'+L[0]+""}else{r+=L[0]}N=A.lR.lastIndex;L=A.lR.exec(K)}return r+K.substr(N)}function z(){if(A.sL&&!e[A.sL]){return l(w)}var r=A.sL?d(A.sL,w):g(w);if(A.r>0){v+=r.keyword_count;B+=r.r}return''+r.value+" "}function J(){return A.sL!==undefined?z():G()}function I(L,r){var K=L.cN?'':"";if(L.rB){x+=K;w=""}else{if(L.eB){x+=l(r)+K;w=""}else{x+=K;w=r}}A=Object.create(L,{parent:{value:A}});B+=L.r}function C(K,r){w+=K;if(r===undefined){x+=J();return 0}var L=o(r,A);if(L){x+=J();I(L,r);return L.rB?0:r.length}var M=s(A,r);if(M){if(!(M.rE||M.eE)){w+=r}x+=J();do{if(A.cN){x+=" "}A=A.parent}while(A!=M.parent);if(M.eE){x+=l(r)}w="";if(M.starts){I(M.starts,"")}return M.rE?0:r.length}if(t(r,A)){throw"Illegal"}w+=r;return r.length||1}var F=e[D];f(F);var A=F;var w="";var B=0;var v=0;var x="";try{var u,q,p=0;while(true){A.t.lastIndex=p;u=A.t.exec(E);if(!u){break}q=C(E.substr(p,u.index-p),u[0]);p=u.index+q}C(E.substr(p));return{r:B,keyword_count:v,value:x,language:D}}catch(H){if(H=="Illegal"){return{r:0,keyword_count:0,value:l(E)}}else{throw H}}}function g(s){var o={keyword_count:0,r:0,value:l(s)};var q=o;for(var p in e){if(!e.hasOwnProperty(p)){continue}var r=d(p,s);r.language=p;if(r.keyword_count+r.r>q.keyword_count+q.r){q=r}if(r.keyword_count+r.r>o.keyword_count+o.r){q=o;o=r}}if(q.language){o.second_best=q}return o}function i(q,p,o){if(p){q=q.replace(/^((<[^>]+>|\t)+)/gm,function(r,v,u,t){return v.replace(/\t/g,p)})}if(o){q=q.replace(/\n/g," ")}return q}function m(r,u,p){var v=h(r,p);var t=a(r);if(t=="no-highlight"){return}var w=t?d(t,v):g(v);t=w.language;var o=c(r);if(o.length){var q=document.createElement("pre");q.innerHTML=w.value;w.value=j(o,c(q),v)}w.value=i(w.value,u,p);var s=r.className;if(!s.match("(\\s|^)(language-)?"+t+"(\\s|$)")){s=s?(s+" "+t):t}r.innerHTML=w.value;r.className=s;r.result={language:t,kw:w.keyword_count,re:w.r};if(w.second_best){r.second_best={language:w.second_best.language,kw:w.second_best.keyword_count,re:w.second_best.r}}}function n(){if(n.called){return}n.called=true;Array.prototype.map.call(document.getElementsByTagName("pre"),b).filter(Boolean).forEach(function(o){m(o,hljs.tabReplace)})}function k(){window.addEventListener("DOMContentLoaded",n,false);window.addEventListener("load",n,false)}var e={};this.LANGUAGES=e;this.highlight=d;this.highlightAuto=g;this.fixMarkup=i;this.highlightBlock=m;this.initHighlighting=n;this.initHighlightingOnLoad=k;this.IR="[a-zA-Z][a-zA-Z0-9_]*";this.UIR="[a-zA-Z_][a-zA-Z0-9_]*";this.NR="\\b\\d+(\\.\\d+)?";this.CNR="(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)";this.BNR="\\b(0b[01]+)";this.RSR="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|\\.|-|-=|/|/=|:|;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~";this.BE={b:"\\\\[\\s\\S]",r:0};this.ASM={cN:"string",b:"'",e:"'",i:"\\n",c:[this.BE],r:0};this.QSM={cN:"string",b:'"',e:'"',i:"\\n",c:[this.BE],r:0};this.CLCM={cN:"comment",b:"//",e:"$"};this.CBLCLM={cN:"comment",b:"/\\*",e:"\\*/"};this.HCM={cN:"comment",b:"#",e:"$"};this.NM={cN:"number",b:this.NR,r:0};this.CNM={cN:"number",b:this.CNR,r:0};this.BNM={cN:"number",b:this.BNR,r:0};this.inherit=function(q,r){var o={};for(var p in q){o[p]=q[p]}if(r){for(var p in r){o[p]=r[p]}}return o}}();hljs.LANGUAGES.bash=function(a){var g="true false";var e="if then else elif fi for break continue while in do done echo exit return set declare";var c={cN:"variable",b:"\\$[a-zA-Z0-9_#]+"};var b={cN:"variable",b:"\\${([^}]|\\\\})+}"};var h={cN:"string",b:'"',e:'"',i:"\\n",c:[a.BE,c,b],r:0};var d={cN:"string",b:"'",e:"'",c:[{b:"''"}],r:0};var f={cN:"test_condition",b:"",e:"",c:[h,d,c,b],k:{literal:g},r:0};return{k:{keyword:e,literal:g},c:[{cN:"shebang",b:"(#!\\/bin\\/bash)|(#!\\/bin\\/sh)",r:10},c,b,a.HCM,h,d,a.inherit(f,{b:"\\[ ",e:" \\]",r:0}),a.inherit(f,{b:"\\[\\[ ",e:" \\]\\]"})]}}(hljs);hljs.LANGUAGES.cs=function(a){return{k:"abstract as base bool break byte case catch char checked class const continue decimal default delegate do double else enum event explicit extern false finally fixed float for foreach goto if implicit in int interface internal is lock long namespace new null object operator out override params private protected public readonly ref return sbyte sealed short sizeof stackalloc static string struct switch this throw true try typeof uint ulong unchecked unsafe ushort using virtual volatile void while ascending descending from get group into join let orderby partial select set value var where yield",c:[{cN:"comment",b:"///",e:"$",rB:true,c:[{cN:"xmlDocTag",b:"///|"},{cN:"xmlDocTag",b:"?",e:">"}]},a.CLCM,a.CBLCLM,{cN:"preprocessor",b:"#",e:"$",k:"if else elif endif define undef warning error line region endregion pragma checksum"},{cN:"string",b:'@"',e:'"',c:[{b:'""'}]},a.ASM,a.QSM,a.CNM]}}(hljs);hljs.LANGUAGES.ruby=function(e){var a="[a-zA-Z_][a-zA-Z0-9_]*(\\!|\\?)?";var j="[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?";var g={keyword:"and false then defined module in return redo if BEGIN retry end for true self when next until do begin unless END rescue nil else break undef not super class case require yield alias while ensure elsif or include"};var c={cN:"yardoctag",b:"@[A-Za-z]+"};var k=[{cN:"comment",b:"#",e:"$",c:[c]},{cN:"comment",b:"^\\=begin",e:"^\\=end",c:[c],r:10},{cN:"comment",b:"^__END__",e:"\\n$"}];var d={cN:"subst",b:"#\\{",e:"}",l:a,k:g};var i=[e.BE,d];var b=[{cN:"string",b:"'",e:"'",c:i,r:0},{cN:"string",b:'"',e:'"',c:i,r:0},{cN:"string",b:"%[qw]?\\(",e:"\\)",c:i},{cN:"string",b:"%[qw]?\\[",e:"\\]",c:i},{cN:"string",b:"%[qw]?{",e:"}",c:i},{cN:"string",b:"%[qw]?<",e:">",c:i,r:10},{cN:"string",b:"%[qw]?/",e:"/",c:i,r:10},{cN:"string",b:"%[qw]?%",e:"%",c:i,r:10},{cN:"string",b:"%[qw]?-",e:"-",c:i,r:10},{cN:"string",b:"%[qw]?\\|",e:"\\|",c:i,r:10}];var h={cN:"function",bWK:true,e:" |$|;",k:"def",c:[{cN:"title",b:j,l:a,k:g},{cN:"params",b:"\\(",e:"\\)",l:a,k:g}].concat(k)};var f=k.concat(b.concat([{cN:"class",bWK:true,e:"$|;",k:"class module",c:[{cN:"title",b:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?",r:0},{cN:"inheritance",b:"<\\s*",c:[{cN:"parent",b:"("+e.IR+"::)?"+e.IR}]}].concat(k)},h,{cN:"constant",b:"(::)?(\\b[A-Z]\\w*(::)?)+",r:0},{cN:"symbol",b:":",c:b.concat([{b:j}]),r:0},{cN:"symbol",b:a+":",r:0},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",r:0},{cN:"number",b:"\\?\\w"},{cN:"variable",b:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},{b:"("+e.RSR+")\\s*",c:k.concat([{cN:"regexp",b:"/",e:"/[a-z]*",i:"\\n",c:[e.BE,d]}]),r:0}]));d.c=f;h.c[1].c=f;return{l:a,k:g,c:f}}(hljs);hljs.LANGUAGES.diff=function(a){return{c:[{cN:"chunk",b:"^\\@\\@ +\\-\\d+,\\d+ +\\+\\d+,\\d+ +\\@\\@$",r:10},{cN:"chunk",b:"^\\*\\*\\* +\\d+,\\d+ +\\*\\*\\*\\*$",r:10},{cN:"chunk",b:"^\\-\\-\\- +\\d+,\\d+ +\\-\\-\\-\\-$",r:10},{cN:"header",b:"Index: ",e:"$"},{cN:"header",b:"=====",e:"=====$"},{cN:"header",b:"^\\-\\-\\-",e:"$"},{cN:"header",b:"^\\*{3} ",e:"$"},{cN:"header",b:"^\\+\\+\\+",e:"$"},{cN:"header",b:"\\*{5}",e:"\\*{5}$"},{cN:"addition",b:"^\\+",e:"$"},{cN:"deletion",b:"^\\-",e:"$"},{cN:"change",b:"^\\!",e:"$"}]}}(hljs);hljs.LANGUAGES.javascript=function(a){return{k:{keyword:"in if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const",literal:"true false null undefined NaN Infinity"},c:[a.ASM,a.QSM,a.CLCM,a.CBLCLM,a.CNM,{b:"("+a.RSR+"|\\b(case|return|throw)\\b)\\s*",k:"return throw case",c:[a.CLCM,a.CBLCLM,{cN:"regexp",b:"/",e:"/[gim]*",i:"\\n",c:[{b:"\\\\/"}]},{b:"<",e:">;",sL:"xml"}],r:0},{cN:"function",bWK:true,e:"{",k:"function",c:[{cN:"title",b:"[A-Za-z$_][0-9A-Za-z$_]*"},{cN:"params",b:"\\(",e:"\\)",c:[a.CLCM,a.CBLCLM],i:"[\"'\\(]"}],i:"\\[|%"}]}}(hljs);hljs.LANGUAGES.css=function(a){var b={cN:"function",b:a.IR+"\\(",e:"\\)",c:[a.NM,a.ASM,a.QSM]};return{cI:true,i:"[=/|']",c:[a.CBLCLM,{cN:"id",b:"\\#[A-Za-z0-9_-]+"},{cN:"class",b:"\\.[A-Za-z0-9_-]+",r:0},{cN:"attr_selector",b:"\\[",e:"\\]",i:"$"},{cN:"pseudo",b:":(:)?[a-zA-Z0-9\\_\\-\\+\\(\\)\\\"\\']+"},{cN:"at_rule",b:"@(font-face|page)",l:"[a-z-]+",k:"font-face page"},{cN:"at_rule",b:"@",e:"[{;]",eE:true,k:"import page media charset",c:[b,a.ASM,a.QSM,a.NM]},{cN:"tag",b:a.IR,r:0},{cN:"rules",b:"{",e:"}",i:"[^\\s]",r:0,c:[a.CBLCLM,{cN:"rule",b:"[^\\s]",rB:true,e:";",eW:true,c:[{cN:"attribute",b:"[A-Z\\_\\.\\-]+",e:":",eE:true,i:"[^\\s]",starts:{cN:"value",eW:true,eE:true,c:[b,a.NM,a.QSM,a.ASM,a.CBLCLM,{cN:"hexcolor",b:"\\#[0-9A-F]+"},{cN:"important",b:"!important"}]}}]}]}]}}(hljs);hljs.LANGUAGES.xml=function(a){var c="[A-Za-z0-9\\._:-]+";var b={eW:true,c:[{cN:"attribute",b:c,r:0},{b:'="',rB:true,e:'"',c:[{cN:"value",b:'"',eW:true}]},{b:"='",rB:true,e:"'",c:[{cN:"value",b:"'",eW:true}]},{b:"=",c:[{cN:"value",b:"[^\\s/>]+"}]}]};return{cI:true,c:[{cN:"pi",b:"<\\?",e:"\\?>",r:10},{cN:"doctype",b:"",r:10,c:[{b:"\\[",e:"\\]"}]},{cN:"comment",b:"",r:10},{cN:"cdata",b:"<\\!\\[CDATA\\[",e:"\\]\\]>",r:10},{cN:"tag",b:"",rE:true,sL:"css"}},{cN:"tag",b:"
-
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Markdown Preview/messages.json b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Markdown Preview/messages.json
deleted file mode 100644
index 9e8458b..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Markdown Preview/messages.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "install": "README.md",
- "1.0.2": "CHANGES.md"
-}
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Markdown Preview/package-metadata.json b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Markdown Preview/package-metadata.json
deleted file mode 100644
index 83265a8..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Markdown Preview/package-metadata.json
+++ /dev/null
@@ -1 +0,0 @@
-{"url": "https://github.com/revolunet/sublimetext-markdown-preview", "version": "1.0.3", "description": "markdown preview and build plugin for sublime text 2/3"}
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Markdown Preview/sample.html b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Markdown Preview/sample.html
deleted file mode 100644
index afe1c51..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Markdown Preview/sample.html
+++ /dev/null
@@ -1,272 +0,0 @@
-Sample Markdown Cheat Sheet
-This is a sample markdown file to help you write Markdown quickly :)
-If you use the fabulous Sublime Text 2/3 editor along with the Markdown Preview plugin , open your ST2 Palette with CMD+P
then choose Markdown Preview in browser
to see the result in your browser.
-Text basics
-this is italic and this is bold . another italic and another bold
-this is important
text. and percentage signs : % and %
-This is a paragraph with a footnote (builtin parser only).
-Insert [ toc ]
without spaces to generate a table of contents (builtin parsers only).
-Indentation
-
-Here is some indented text
-
-even more indented
-
-
-Titles
-Big title (h1)
-Middle title (h2)
-Smaller title (h3)
-and so on (hX)
-and so on (hX)
-and so on (hX)
-Example lists (1)
-
-bullets can be -
, +
, or *
-bullet list 1
-
-bullet list 2
-
-
-
-bullet list 3
-
-bullet list 4
-bullet list 5
-
-Links
-This is an example inline link and another one with a title .
-Links can also be reference based : reference 1 or reference 2 with title .
-References are usually placed at the bottom of the document
-Images
-A sample image :
-
-As links, images can also use references instead of inline links :
-
-Code
-It's quite easy to show code in markdown files.
-Backticks can be used to highlight
some words.
-Also, any indented block is considered a code block. If enable_highlight
is true
, syntax highlighting will be included (for the builtin parser - the github parser does this automatically).
-<script>
- document.location = 'http://lmgtfy.com/?q=markdown+cheat+sheet';
-</script>
-
-Math
-When enable_mathjax
is true
, inline math can be included \(\frac{\pi}{2}\) $\pi$
-Alternatively, math can be written on its own line:
-$$F(\omega) = \frac{1}{\sqrt{2\pi}} \int_{-\infty}^{\infty} f(t) \, e^{ - i \omega t}dt$$
-\[\int_0^1 f(t) \mathrm{d}t\]
-\[\sum_j \gamma_j^2/d_j\]
-GitHub Flavored Markdown
-If you use the Github parser, you can use some of Github Flavored Markdown syntax :
-
-User/Project@SHA: revolunet/sublimetext-markdown-preview@7da61badeda468b5019869d11000307e07e07401
-User/Project#Issue: revolunet/sublimetext-markdown-preview#1
-User : @revolunet
-
-Some Python code :
-import random
-
-class CardGame(object):
- """ a sample python class """
- NB_CARDS = 32
- def __init__(self, cards=5):
- self.cards = random.sample(range(self.NB_CARDS), 5)
- print 'ready to play'
-
-
-Some Javascript code :
-var config = {
- duration: 5,
- comment: 'WTF'
-}
-// callbacks beauty un action
-async_call('/path/to/api', function(json) {
- another_call(json, function(result2) {
- another_another_call(result2, function(result3) {
- another_another_another_call(result3, function(result4) {
- alert('And if all went well, i got my result :)');
- });
- });
- });
-})
-
-
-The Github Markdown also brings some nice Emoji support : :+1: :heart: :beer:
-Parsers and Extensions
-Markdown Preview comes with Python-Markdown and Markdown2 preloaded.
-Python-Markdown
-The Python-Markdown Parser provides support for several extensions.
-
-
-You can enable them all at once using the extra
keyword.
-extensions: [ 'extra' ]
-
-If you want all the extras plus the toc
extension,
-your settings would look like this:
-{
- ...
- parser: 'markdown',
- extensions: ['extra', 'toc'],
- ...
-}
-
-Other Extensions
-There are also some extensions that are not included in Markdown Extra
-but come in the standard Python-Markdown library.
-
-3rd Party Extensions
-Python-Markdown is designed to be extended.
-Just fork this repo and add your extensions inside the .../Packages/Markdown Preview/markdown/extensions/
folder.
-Check out the list of 3rd Party extensions .
-Default Extensions
-The default extensions are:
-
-Use the default
keyword, to select them all.
-If you want all the defaults plus the definition_lists
extension,
-your settings would look like this:
-{
- ...
- parser: 'markdown',
- extensions: ['default', 'definition_lists'],
- ...
-}
-
-Markdown2
-The Markdown2 Parser also provides support for extensions, known as Extras .
-You can configure the list of extras you want to use inside the package settings.
-
-The default extras are:
-
-You can enable all default extras at once using the default
keyword.
-If you want all the default extras plus the 'wiki-table' extra,
-your settings would look like this:
-{
- ...
- parser: 'markdown2',
- extensions: ['default', 'wiki-table'],
- ...
-}
-
-
-For a complete list of extras please checkout the Extras Wiki Page .
-Examples
-Tables
-The tables
extension of the Python-Markdown parser is activated by default,
-but is currently not available in Markdown2 .
-The syntax was adopted from the php markdown project ,
-and is also used in github flavoured markdown.
-
-
-
-Year
-Temperature (low)
-Temperature (high)
-
-
-
-
-1900
--10
-25
-
-
-1910
--15
-30
-
-
-1920
--10
-32
-
-
-
-Wiki Tables
-If you are using Markdown2 with the wiki-tables
extra activated you should see a table below:
-
-
-
-
-Year
-
-Temperature (low)
-
-Temperature (high)
-
-
-
-
-
-
-1910
-
--15
-
-30
-
-
-
-
-1920
-
--10
-
-32
-
-
-
-
-Definition Lists
-This example requires Python Markdown 's def_list
extension.
-
-Apple
-Pomaceous fruit of plants of the genus Malus in
-the family Rosaceae.
-Orange
-The fruit of an evergreen tree of the genus Citrus.
-
-About
-This plugin and this sample file is proudly brought to you by the revolunet team
-
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Markdown Preview/sample.md b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Markdown Preview/sample.md
deleted file mode 100644
index f3fafc4..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Markdown Preview/sample.md
+++ /dev/null
@@ -1,327 +0,0 @@
-Sample Markdown Cheat Sheet
-===========================
-
-This is a sample markdown file to help you write Markdown quickly :)
-
-If you use the fabulous [Sublime Text 2/3 editor][ST] along with the [Markdown Preview plugin][MarkdownPreview], open your ST2 Palette with `CMD+P` then choose `Markdown Preview in browser` to see the result in your browser.
-
-## Text basics
-this is *italic* and this is **bold** . another _italic_ and another __bold__
-
-this is `important` text. and percentage signs : % and `%`
-
-This is a paragraph with a footnote (builtin parser only). [^note-id]
-
-Insert `[ toc ]` without spaces to generate a table of contents (builtin parsers only).
-
-## Indentation
-> Here is some indented text
->> even more indented
-
-## Titles
-# Big title (h1)
-## Middle title (h2)
-### Smaller title (h3)
-#### and so on (hX)
-##### and so on (hX)
-###### and so on (hX)
-
-## Example lists (1)
-
- - bullets can be `-`, `+`, or `*`
- - bullet list 1
- - bullet list 2
- - sub item 1
- - sub item 2
-
- with indented text inside
-
- - bullet list 3
- + bullet list 4
- * bullet list 5
-
-## Links
-
-This is an [example inline link](http://lmgtfy.com/) and [another one with a title](http://lmgtfy.com/ "Hello, world").
-
-Links can also be reference based : [reference 1][ref1] or [reference 2 with title][ref2].
-
-References are usually placed at the bottom of the document
-
-## Images
-
-A sample image :
-
-![revolunet logo](http://www.revolunet.com/static/parisjs8/img/logo-revolunet-carre.jpg "revolunet logo")
-
-As links, images can also use references instead of inline links :
-
-![revolunet logo][revolunet-logo]
-
-
-## Code
-
-It's quite easy to show code in markdown files.
-
-Backticks can be used to `highlight` some words.
-
-Also, any indented block is considered a code block. If `enable_highlight` is `true`, syntax highlighting will be included (for the builtin parser - the github parser does this automatically).
-
-
-
-## Math
-
-When `enable_mathjax` is `true`, inline math can be included \\(\frac{\pi}{2}\\) $\pi$
-
-Alternatively, math can be written on its own line:
-
-$$F(\omega) = \frac{1}{\sqrt{2\pi}} \int_{-\infty}^{\infty} f(t) \, e^{ - i \omega t}dt$$
-
-\\[\int_0^1 f(t) \mathrm{d}t\\]
-
-\\[\sum_j \gamma_j^2/d_j\\]
-
-
-
-## GitHub Flavored Markdown
-
-If you use the Github parser, you can use some of [Github Flavored Markdown][gfm] syntax :
-
- * User/Project@SHA: revolunet/sublimetext-markdown-preview@7da61badeda468b5019869d11000307e07e07401
- * User/Project#Issue: revolunet/sublimetext-markdown-preview#1
- * User : @revolunet
-
-Some Python code :
-
-```python
-import random
-
-class CardGame(object):
- """ a sample python class """
- NB_CARDS = 32
- def __init__(self, cards=5):
- self.cards = random.sample(range(self.NB_CARDS), 5)
- print 'ready to play'
-```
-
-Some Javascript code :
-
-```js
-var config = {
- duration: 5,
- comment: 'WTF'
-}
-// callbacks beauty un action
-async_call('/path/to/api', function(json) {
- another_call(json, function(result2) {
- another_another_call(result2, function(result3) {
- another_another_another_call(result3, function(result4) {
- alert('And if all went well, i got my result :)');
- });
- });
- });
-})
-```
-
-The Github Markdown also brings some [nice Emoji support][emoji] : :+1: :heart: :beer:
-
-[^note-id]: This is the text of the note.
-
-## Parsers and Extensions
-
-Markdown Preview comes with **Python-Markdown** and **Markdown2** preloaded.
-
-### *Python-Markdown*
-
-The [Python-Markdown Parser][] provides support for several extensions.
-
-[Python-Markdown Parser]: https://github.com/waylan/Python-Markdown
-
-#### Extra Extensions
-
-* `abbr` -- [Abbreviations][]
-* `attr_list` -- [Attribute Lists][]
-* `def_list` -- [Definition Lists][]
-* `fenced_code` -- [Fenced Code Blocks][]
-* `footnotes` -- [Footnotes][]
-* `tables` -- [Tables][]
-* `smart_strong` -- [Smart Strong][]
-
-[Abbreviations]: http://pythonhosted.org/Markdown/extensions/abbreviations.html
-[Attribute Lists]: http://pythonhosted.org/Markdown/extensions/attr_list.html
-[Definition Lists]: http://pythonhosted.org/Markdown/extensions/definition_lists.html
-[Fenced Code Blocks]: http://pythonhosted.org/Markdown/extensions/fenced_code_blocks.html
-[Footnotes]: http://pythonhosted.org/Markdown/extensions/footnotes.html
-[Tables]: http://pythonhosted.org/Markdown/extensions/tables.html
-[Smart Strong]: http://pythonhosted.org/Markdown/extensions/smart_strong.html
-
-
-You can enable them all at once using the `extra` keyword.
-
- extensions: [ 'extra' ]
-
-If you want all the extras plus the `toc` extension,
-your settings would look like this:
-
- {
- ...
- parser: 'markdown',
- extensions: ['extra', 'toc'],
- ...
- }
-
-
-#### Other Extensions
-
-There are also some extensions that are not included in Markdown Extra
-but come in the standard Python-Markdown library.
-
-* `code-hilite` -- [CodeHilite][]
-* `html-tidy` -- [HTML Tidy][]
-* `header-id` -- [HeaderId][]
-* `meta_data` -- [Meta-Data][]
-* `nl2br` -- [New Line to Break][]
-* `rss` -- [RSS][]
-* `sane_lists` -- [Sane Lists][]
-* `toc` -- [Table of Contents][]
-* `wikilinks` -- [WikiLinks][]
-
-[CodeHilite]: http://pythonhosted.org/Markdown/extensions/code_hilite.html
-[HTML Tidy]: http://pythonhosted.org/Markdown/extensions/html_tidy.html
-[HeaderId]: http://pythonhosted.org/Markdown/extensions/header_id.html
-[Meta-Data]: http://pythonhosted.org/Markdown/extensions/meta_data.html
-[New Line to Break]: http://pythonhosted.org/Markdown/extensions/nl2br.html
-[RSS]: http://pythonhosted.org/Markdown/extensions/rss.html
-[Sane Lists]: http://pythonhosted.org/Markdown/extensions/sane_lists.html
-[Table of Contents]: http://pythonhosted.org/Markdown/extensions/toc.html
-[WikiLinks]: http://pythonhosted.org/Markdown/extensions/wikilinks.html
-
-#### 3rd Party Extensions
-
-
-*Python-Markdown* is designed to be extended.
-Just fork this repo and add your extensions inside the `.../Packages/Markdown Preview/markdown/extensions/` folder.
-
-Check out the list of [3rd Party extensions](
-https://github.com/waylan/Python-Markdown/wiki/Third-Party-Extensions).
-
-
-#### Default Extensions
-
-The default extensions are:
-
-* `footnotes` -- [Footnotes]
-* `toc` -- [Table of Contents]
-* `fenced_code` -- [Fenced Code Blocks]
-* `tables` -- [Tables]
-
-Use the `default` keyword, to select them all.
-If you want all the defaults plus the `definition_lists` extension,
-your settings would look like this:
-
- {
- ...
- parser: 'markdown',
- extensions: ['default', 'definition_lists'],
- ...
- }
-
-
-### *Markdown2*
-
-The [Markdown2 Parser][] also provides support for extensions, known as [Extras][].
-You can configure the list of extras you want to use inside the package settings.
-
-[Markdown2 Parser]: https://github.com/trentm/python-markdown2
-
-
-#### Default Extras
-
-The default extras are:
-
-* `footnotes` -- [Footnotes][Footnotes Extra]
-* `toc` -- Table of Contents
-* `fenced-code-blocks` -- [Fenced CodeBlocks][]
-* `cuddled-lists` -- [Cuddled Lists][]
-
-[Footnotes Extra]: https://github.com/trentm/python-markdown2/wiki/footnotes
-[Fenced CodeBlocks]: https://github.com/trentm/python-markdown2/wiki/fenced-code-blocks
-[Cuddled Lists]: https://github.com/trentm/python-markdown2/wiki/cuddled-lists
-
-
-You can enable all default extras at once using the `default` keyword.
-If you want all the default extras plus the 'wiki-table' extra,
-your settings would look like this:
-
- {
- ...
- parser: 'markdown2',
- extensions: ['default', 'wiki-table'],
- ...
- }
-
-
-#### Other Extras
-
-For a complete list of extras please checkout the [Extras Wiki Page][Extras].
-
-[Extras]: https://github.com/trentm/python-markdown2/wiki/Extras
-
-
-## Examples
-
-
-### Tables
-
-The `tables` extension of the *Python-Markdown* parser is activated by default,
-but is currently **not** available in *Markdown2*.
-
-The syntax was adopted from the [php markdown project](http://michelf.ca/projects/php-markdown/extra/#table),
-and is also used in github flavoured markdown.
-
-| Year | Temperature (low) | Temperature (high) |
-| ---- | ----------------- | -------------------|
-| 1900 | -10 | 25 |
-| 1910 | -15 | 30 |
-| 1920 | -10 | 32 |
-
-
-### Wiki Tables
-
-If you are using *Markdown2* with the `wiki-tables` extra activated you should see a table below:
-
-|| *Year* || *Temperature (low)* || *Temperature (high)* ||
-|| 1900 || -10 || 25 ||
-|| 1910 || -15 || 30 ||
-|| 1920 || -10 || 32 ||
-
-
-### Definition Lists
-
-This example requires *Python Markdown*'s `def_list` extension.
-
-Apple
-: Pomaceous fruit of plants of the genus Malus in
- the family Rosaceae.
-
-Orange
-: The fruit of an evergreen tree of the genus Citrus.
-
-
-## About
-
-This plugin and this sample file is proudly brought to you by the [revolunet team][revolunet]
-
- [ref1]: http://revolunet.com
- [ref2]: http://revolunet.com "rich web apps"
- [MarkdownREF]: http://daringfireball.net/projects/markdown/basics
- [MarkdownPreview]: https://github.com/revolunet/sublimetext-markdown-preview
- [ST]: http://sublimetext.com
- [revolunet]: http://revolunet.com
- [revolunet-logo]: http://www.revolunet.com/static/parisjs8/img/logo-revolunet-carre.jpg "revolunet logo"
- [gfm]: http://github.github.com/github-flavored-markdown/
- [emoji]: http://www.emoji-cheat-sheet.com/
-
-
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Missing Palette Commands/Missing.sublime-commands b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Missing Palette Commands/Missing.sublime-commands
deleted file mode 100644
index 0477d93..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Missing Palette Commands/Missing.sublime-commands
+++ /dev/null
@@ -1,122 +0,0 @@
-[
- // File Menu
- { "caption": "Exit Sublime Text 2", "command": "exit" },
- { "caption": "New Window", "command": "new_window"},
- { "caption": "Close Window", "command": "close_window" },
- { "caption": "File: Save As", "command": "prompt_save_as" },
- { "caption": "File: Close", "command": "close" },
- { "caption": "File: Reopen Closed File", "command": "reopen_last_file" },
-
- // Edit Menu
- { "caption": "Code Folding: Fold All", "command": "fold_by_level", "args": {"level": 1} },
-
- { "caption": "Permute Lines: Reverse", "command": "permute_lines", "args": {"operation": "reverse"} },
- { "caption": "Permute Lines: Unique", "command": "permute_lines", "args": {"operation": "unique"} },
- { "caption": "Permute Lines: Shuffle", "command": "permute_lines", "args": {"operation": "shuffle"} },
-
- { "caption": "Permute Selections: Sort", "command": "sort_selection", "args": {"case_sensitive": false} },
- { "caption": "Permute Selections: Sort (Case Sensitive)", "command": "sort_selection", "args": {"case_sensitive": true} },
- { "caption": "Permute Selections: Reverse", "command": "permute_selection", "args": {"operation": "reverse"} },
- { "caption": "Permute Selections: Unique", "command": "permute_selection", "args": {"operation": "unique"} },
- { "caption": "Permute Selections: Shuffle", "command": "permute_selection", "args": {"operation": "shuffle"} },
-
- // Find Menu
- { "caption": "Find", "command": "show_panel", "args": {"panel": "find"} },
- { "caption": "Find in Files", "command": "show_panel", "args": {"panel": "find_in_files"} },
- { "caption": "Replace", "command": "show_panel", "args": {"panel": "replace"} },
- { "caption": "Show Find Results Panel", "command": "show_panel", "args": {"panel": "output.find_results"} },
-
- { "caption": "Next Result", "command": "next_result" },
- { "caption": "Previous Result", "command": "previous_result" },
-
- // View Menu
- { "caption": "View: Toggle Fullscreen", "command": "toggle_full_screen" },
- { "caption": "View: Toggle Distraction Free mode", "command": "toggle_distraction_free" },
- { "caption": "View: Toggle Console", "command": "show_panel", "args": {"panel": "console", "toggle": true} },
-
- { "caption": "Indentation: Indent Using Spaces", "command": "toggle_setting", "args": {"setting": "translate_tabs_to_spaces"} },
- { "caption": "Indentation: Tab Width: 1", "command": "set_setting", "args": {"setting": "tab_size", "value": 1} },
- { "caption": "Indentation: Tab Width: 2", "command": "set_setting", "args": {"setting": "tab_size", "value": 2} },
- { "caption": "Indentation: Tab Width: 3", "command": "set_setting", "args": {"setting": "tab_size", "value": 3} },
- { "caption": "Indentation: Tab Width: 4", "command": "set_setting", "args": {"setting": "tab_size", "value": 4} },
- { "caption": "Indentation: Tab Width: 5", "command": "set_setting", "args": {"setting": "tab_size", "value": 5} },
- { "caption": "Indentation: Tab Width: 6", "command": "set_setting", "args": {"setting": "tab_size", "value": 6} },
- { "caption": "Indentation: Tab Width: 7", "command": "set_setting", "args": {"setting": "tab_size", "value": 7} },
- { "caption": "Indentation: Tab Width: 8", "command": "set_setting", "args": {"setting": "tab_size", "value": 8} },
- { "caption": "Indentation: Guess Settings From Buffer", "command": "detect_indentation" },
-
- { "caption": "Line Endings: Windows", "command": "set_line_ending", "args": {"type": "windows"} },
- { "caption": "Line Endings: Unix", "command": "set_line_ending", "args": {"type": "unix"} },
- { "caption": "Line Endings: Mac OS 9", "command": "set_line_ending", "args": {"type": "cr"} },
-
- { "caption": "View: Toggle Spell Check", "command": "toggle_setting", "args": {"setting": "spell_check"} },
- { "caption": "Spell Check: Next Misspelling", "command": "next_misspelling" },
- { "caption": "Spell Check: Previous Misspelling", "command": "previous_misspelling" },
-
- { "caption": "Ruler: None", "command": "set_setting", "args": {"setting": "rulers", "value": []}},
- { "caption": "Ruler: Column 70", "command": "set_setting", "args": {"setting": "rulers", "value": [70]}},
- { "caption": "Ruler: Column 78", "command": "set_setting", "args": {"setting": "rulers", "value": [78]}},
- { "caption": "Ruler: Column 80", "command": "set_setting", "args": {"setting": "rulers", "value": [80]}},
- { "caption": "Ruler: Column 100", "command": "set_setting", "args": {"setting": "rulers", "value": [100]}},
- { "caption": "Ruler: Column 120", "command": "set_setting", "args": {"setting": "rulers", "value": [120]}},
-
- { "caption": "Word Wrap: Automatic Column", "command": "set_setting", "args": {"setting": "wrap_width", "value": 0}},
- { "caption": "Word Wrap: Column 70", "command": "set_setting", "args": {"setting": "wrap_width", "value": 70}},
- { "caption": "Word Wrap: Column 78", "command": "set_setting", "args": {"setting": "wrap_width", "value": 78}},
- { "caption": "Word Wrap: Column 80", "command": "set_setting", "args": {"setting": "wrap_width", "value": 80}},
- { "caption": "Word Wrap: Column 100", "command": "set_setting", "args": {"setting": "wrap_width", "value": 100}},
- { "caption": "Word Wrap: Column 120", "command": "set_setting", "args": {"setting": "wrap_width", "value": 120}},
-
- { "caption": "Layout: Single",
- "command": "set_layout",
- "args": {"cols": [0.0, 1.0], "rows": [0.0, 1.0], "cells": [[0, 0, 1, 1]]}
- },
- { "caption": "Layout: Columns: 2",
- "command": "set_layout",
- "args": {"cols": [0.0, 0.5, 1.0], "rows": [0.0, 1.0], "cells": [[0, 0, 1, 1], [1, 0, 2, 1]]}
- },
- { "caption": "Layout: Columns: 3",
- "command": "set_layout",
- "args": {"cols": [0.0, 0.33, 0.66, 1.0], "rows": [0.0, 1.0], "cells": [[0, 0, 1, 1], [1, 0, 2, 1], [2, 0, 3, 1]]}
- },
- { "caption": "Layout: Columns: 4",
- "command": "set_layout",
- "args": {"cols": [0.0, 0.25, 0.5, 0.75, 1.0], "rows": [0.0, 1.0], "cells": [[0, 0, 1, 1], [1, 0, 2, 1], [2, 0, 3, 1], [3, 0, 4, 1]]}
- },
- { "caption": "Layout: Rows: 2",
- "command": "set_layout",
- "args": {"cols": [0.0, 1.0], "rows": [0.0, 0.5, 1.0], "cells": [[0, 0, 1, 1], [0, 1, 1, 2]]}
- },
- { "caption": "Layout: Rows: 3",
- "command": "set_layout",
- "args": {"cols": [0.0, 1.0], "rows": [0.0, 0.33, 0.66, 1.0], "cells": [[0, 0, 1, 1], [0, 1, 1, 2], [0, 2, 1, 3]]}
- },
- { "caption": "Layout: Grid: 4",
- "command": "set_layout",
- "args": {"cols": [0.0, 0.5, 1.0], "rows": [0.0, 0.5, 1.0], "cells": [[0, 0, 1, 1], [1, 0, 2, 1], [0, 1, 1, 2], [1, 1, 2, 2]]}
- },
-
- // Tools Menu
- { "caption": "Cancel Build", "command": "exec", "args": {"kill": true} },
- { "caption": "Show Build Results Panel", "command": "show_panel", "args": {"panel": "output.exec"} },
- { "caption": "Tools: New Snippet", "command": "new_snippet" },
-
- // Project Menu
- { "caption": "Switch Project in Window", "command": "prompt_select_project" },
- { "caption": "Project: Open Project", "command": "prompt_open_project" },
- { "caption": "Project: Edit Project", "command": "open_file", "args": {"file": "${project}"} },
- { "caption": "Project: Remove all Folders", "command": "close_folder_list" },
- { "caption": "Project: Refresh Folders", "command": "refresh_folder_list" },
-
- // Preferences Menu
- { "caption": "Preferences: Syntax Specific – User", "command": "open_file_settings" },
- { "caption": "Font: Increase Font Size", "command": "increase_font_size" },
- { "caption": "Font: Decrease Font Size", "command": "decrease_font_size" },
- { "caption": "Font: Reset Font Size", "command": "reset_font_size" },
-
- // Misc (not in menu)
- { "caption": "View: Toggle Gutter", "command": "toggle_setting", "args": {"setting": "gutter"} },
- { "caption": "View: Toggle Line Numbers", "command": "toggle_setting", "args": {"setting": "line_numbers"} },
- { "caption": "Check for Updates", "command": "update_check" },
- { "caption": "Reveal Current File in Side Bar", "command": "reveal_in_side_bar" }
-]
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Missing Palette Commands/README.md b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Missing Palette Commands/README.md
deleted file mode 100644
index 09f1d1b..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Missing Palette Commands/README.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# Missing Palette Commands
-
-I really like the _Command Palette_ feature of Sublime Text 2.
-The only problem I have with it is that some useful commands
-have been omitted and are only available through the main menu.
-
-This package provides a `.sublime-commands` file that contains
-the missing commands.
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Missing Palette Commands/package-metadata.json b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Missing Palette Commands/package-metadata.json
deleted file mode 100644
index 3035f07..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Missing Palette Commands/package-metadata.json
+++ /dev/null
@@ -1 +0,0 @@
-{"url": "https://github.com/fjl/Sublime-Missing-Palette-Commands", "version": "2013.08.26.09.50.09", "description": "Menu Commands that are missing from the Sublime Text 2 Command Palette"}
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Related Files/.gitignore b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Related Files/.gitignore
deleted file mode 100644
index 0d20b64..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Related Files/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-*.pyc
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Related Files/Default.sublime-commands b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Related Files/Default.sublime-commands
deleted file mode 100644
index d55e1e1..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Related Files/Default.sublime-commands
+++ /dev/null
@@ -1,3 +0,0 @@
-[
- { "caption": "Related Files", "command": "related_files" }
-]
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Related Files/Default.sublime-keymap b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Related Files/Default.sublime-keymap
deleted file mode 100644
index 9b0a2d1..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Related Files/Default.sublime-keymap
+++ /dev/null
@@ -1,3 +0,0 @@
-[
- { "keys": ["ctrl+super+p"], "command": "related_files"}
-]
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Related Files/Main.sublime-menu b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Related Files/Main.sublime-menu
deleted file mode 100644
index b9ddbed..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Related Files/Main.sublime-menu
+++ /dev/null
@@ -1,27 +0,0 @@
-[
- {
- "caption": "Preferences",
- "mnemonic": "n",
- "id": "preferences",
- "children":
- [
- {
- "caption": "Package Settings",
- "mnemonic": "P",
- "id": "package-settings",
- "children":
- [
- {
- "caption": "RelatedFiles",
- "children":
- [
- { "command": "open_file", "args": {"file": "${packages}/Related Files/RelatedFiles.sublime-settings"}, "caption": "Settings – Default" },
- { "command": "open_file", "args": {"file": "${packages}/User/RelatedFiles.sublime-settings"}, "caption": "Settings – User" },
- { "caption": "-" }
- ]
- }
- ]
- }
- ]
- }
-]
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Related Files/README.md b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Related Files/README.md
deleted file mode 100644
index f2fc0f2..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Related Files/README.md
+++ /dev/null
@@ -1,36 +0,0 @@
-# Sublime Text 2 - Related Files
-
-![Screenshot](https://raw.github.com/fabiokr/sublime-related-files/master/screenshots/list.png)
-
-This plugin provides a quick list of related files to the currently open file.
-
-My main use case is to list related files under a Ruby on Rails project. For example, for an opened "app/controllers/examples_controller.rb", related files would be "app/helpers/examples_helper.rb", "app/views/examples/**", and "spec/controllers/examples_controller_spec.rb".
-
-This plugin was inspired by the existing [Open Related](https://github.com/vojtajina/sublime-OpenRelated) and [Rails Related Files](https://github.com/luqman/SublimeText2RailsRelatedFiles).
-
-I wanted something between the two of them (a quick list of results that could be setup for any kinds of projects, not only Rails), so I created my own.
-
-# Key Shortcut
-
-The default shortcut is mapped to "ctrl+super+p". To change it to something more suitable for your needs, you can easily change that by copying the following and replacing the "keys" to your desired key combination:
-
-```json
-{ "keys": ["ctrl+super+p"], "command": "related_files"}
-```
-
-# Configuration
-
-The plugins comes configured to lookup Rails related files, but you can add your own setups. Let's see an existing example:
-
-```json
-// Test/specs for ruby files
-".+\/(app|lib)\/(.+).rb":
- [
- "spec/$2_spec.rb",
- "test/$2_test.rb"
- ]
-```
-
-The configuration has two parts: the key, which is a regular expression to match against the currently open file, and a list of globs to map the related files.
-
-You can use the $1, $2, etc. on the glob strings to be replace by the extracted parts from the regex.
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Related Files/RelatedFiles.sublime-settings b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Related Files/RelatedFiles.sublime-settings
deleted file mode 100644
index eb9502c..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Related Files/RelatedFiles.sublime-settings
+++ /dev/null
@@ -1,84 +0,0 @@
-{
- "patterns": {
- // Test/specs for ruby files
- ".+\/(app|lib)\/(.+).rb":
- [
- "spec/$2_spec.rb",
- "test/$2_test.rb"
- ],
-
- // Ruby files for test/specs
- ".+\/(test|spec)\/(.+)_(test|spec).rb":
- [
- "app/$2.rb",
- "lib/$2.rb"
- ],
-
- // Rails controllers
- ".+\/app\/controllers\/(.+)_controller.rb":
- [
- "app/views/$1/**",
- "app/helpers/$1_helper.rb",
- "config/routes.rb",
- "spec/requests/$1_spec.rb",
- "spec/routing/$1_routing_spec.rb"
- ],
-
- // Rails helpers
- ".+\/app\/helpers\/(.+)_helper.rb":
- [
- "app/views/$1/**",
- "app/controllers/$1_controller.rb",
- "config/routes.rb",
- "spec/requests/$1_spec.rb"
- ],
-
- // Rails views
- ".+\/app\/views\/(.+)\/[^\/].+":
- [
- "app/views/$1/**",
- "app/controllers/$1_controller.rb",
- "app/helpers/$1_helper.rb",
- "config/routes.rb",
- "spec/controllers/$1_spec.rb",
- "spec/requests/$1_spec.rb"
- ],
-
- // Rails routes
- ".+\/config\/routes.rb":
- [
- "spec/routing/**"
- ],
-
- // Rails libs
- ".+\/(lib)\/(.+).rb":
- [
- "spec/lib/$2_spec.rb",
- "test/lib/$2_test.rb"
- ],
-
- // Rails controllers specs
- ".+/spec/controllers/(.+)_controller_spec.rb":
- [
- "app/controllers/$1_controller.rb",
- "app/helpers/$1_helper.rb",
- "app/views/$1/**",
- "config/routes.rb"
- ],
-
- // Rails request specs
- ".+/spec/requests/(.+)_spec.rb":
- [
- "app/controllers/$1_controller.rb",
- "app/helpers/$1_helper.rb",
- "app/views/$1/**",
- "config/routes.rb"
- ],
-
- // Rails libs specs
- ".+/spec/lib/(.+)_spec.rb":
- [
- "lib/$1.rb"
- ]
- }
-}
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Related Files/fixtures/example1/app/controllers/examples_controller.rb b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Related Files/fixtures/example1/app/controllers/examples_controller.rb
deleted file mode 100644
index f712c1a..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Related Files/fixtures/example1/app/controllers/examples_controller.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-class ExamplesController < ApplicationController
-
-end
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Related Files/fixtures/example1/app/helpers/examples_helper.rb b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Related Files/fixtures/example1/app/helpers/examples_helper.rb
deleted file mode 100644
index e69de29..0000000
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Related Files/fixtures/example1/app/views/examples/index.html b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Related Files/fixtures/example1/app/views/examples/index.html
deleted file mode 100644
index e69de29..0000000
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Related Files/fixtures/example1/app/views/examples/show.html b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Related Files/fixtures/example1/app/views/examples/show.html
deleted file mode 100644
index e69de29..0000000
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Related Files/fixtures/example1/test/controllers/examples_controller_test.rb b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Related Files/fixtures/example1/test/controllers/examples_controller_test.rb
deleted file mode 100644
index e69de29..0000000
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Related Files/fixtures/example2/app/controllers/examples_controller.rb b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Related Files/fixtures/example2/app/controllers/examples_controller.rb
deleted file mode 100644
index e69de29..0000000
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Related Files/fixtures/example2/app/views/examples/index.html b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Related Files/fixtures/example2/app/views/examples/index.html
deleted file mode 100644
index e69de29..0000000
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Related Files/fixtures/example2/app/views/examples/show.html b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Related Files/fixtures/example2/app/views/examples/show.html
deleted file mode 100644
index e69de29..0000000
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Related Files/fixtures/example2/test/controllers/examples_controller_test.rb b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Related Files/fixtures/example2/test/controllers/examples_controller_test.rb
deleted file mode 100644
index e69de29..0000000
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Related Files/package-metadata.json b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Related Files/package-metadata.json
deleted file mode 100644
index ba1647e..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Related Files/package-metadata.json
+++ /dev/null
@@ -1 +0,0 @@
-{"url": "https://github.com/fabiokr/sublime-related-files", "version": "2013.03.15.12.29.58", "description": "A Sublime Text 2 plugin to list related files"}
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Related Files/related.py b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Related Files/related.py
deleted file mode 100644
index a1c6007..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Related Files/related.py
+++ /dev/null
@@ -1,86 +0,0 @@
-import os
-import re
-import glob
-import itertools
-
-
-class Related(object):
- # Initializes the RelatedFiles object.
- #
- # file_path - the file to look related files for
- # patterns - a dictionary of patterns in the following format:
- # {"(.+)_controller.rb": ["*/the/paths/$1/**", "*/test/$1_controller_test.rb"]}
- #
- # The glob paths will have their $i replaced by the matched groups within the file name
- # matcher.
- def __init__(self, file_path, patterns, folders):
- self.__file_path = file_path
- self.__patterns = patterns
- self.__root = self.__root(folders)
- self.__files = []
- self.__descriptions = []
- self.__build()
-
- # # Retrieves a list of all related descriptions.
- def descriptions(self):
- return self.__descriptions
-
- # # Retrieves a list of all related files paths.
- def files(self):
- return self.__files
-
- # Builds a list with all related files and sets self.descriptions and
- # self.files.
- def __build(self):
- files = set()
-
- file_path = self.__to_posixpath(self.__file_path)
-
- # for each matching pattern
- for regex, paths in self.__patterns.iteritems():
- match = re.compile(regex).match(file_path)
- if match:
- # returns a flattened file list
- files.update(self.__files_for_paths(regex, match, paths))
-
- # sorts items
- files = list(files)
- files.sort()
-
- self.__files = files
- self.__descriptions = [self.__file_without_root(file) for file in files]
-
- # Returns the root folder for the given file and folders
- def __root(self, folders):
- for folder in folders:
- if self.__file_path.startswith(os.path.join(folder, "")):
- return folder
-
- # Retrieves a list of files fot the given match and paths
- def __files_for_paths(self, regex, match, paths):
- paths = [self.__replaced_path(match, path) for path in paths]
-
- files = [glob.glob(os.path.join(self.__root, path)) for path in paths]
- flattened = [self.__to_posixpath(path) for path in list(itertools.chain.from_iterable(files))]
-
- # Ignores current file
- if self.__file_path in flattened:
- flattened.remove(unicode(self.__file_path))
-
- return flattened
-
- # Retrieves the file name without the root part.
- def __file_without_root(self, file):
- return os.path.basename(self.__root) + file[len(self.__root):]
-
- # Retrieves a path with its interpolation vars replaces by the found groups
- # on match.
- def __replaced_path(self, match, path):
- replaced_path = path
- for i, group in enumerate(match.groups()):
- replaced_path = replaced_path.replace("$%s" % (i + 1), group)
- return replaced_path
-
- # Converts paths to posixpaths.
- def __to_posixpath(self, path):
- return re.sub("\\\\", "/", path)
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Related Files/related_files.py b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Related Files/related_files.py
deleted file mode 100644
index ef289f1..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Related Files/related_files.py
+++ /dev/null
@@ -1,39 +0,0 @@
-import sublime
-import sublime_plugin
-from related import *
-
-
-class RelatedFilesCommand(sublime_plugin.WindowCommand):
- def run(self, index=None):
- active_file_path = self.__active_file_path()
-
- if active_file_path:
- # Builds a list of related files for the current open file.
- self.__related = Related(active_file_path, self.__patterns(), sublime.active_window().folders())
-
- self.window.show_quick_panel(self.__related.descriptions(), self.__open_file)
- else:
- self.__status_msg("No open files")
-
- # Opens the file in path.
- def __open_file(self, index):
- if index >= 0:
- self.window.open_file(self.__related.files()[index])
- else:
- self.__status_msg("No related files found")
-
- # Retrieves the patterns from settings.
- def __patterns(self):
- return sublime.load_settings("RelatedFiles.sublime-settings").get('patterns')
-
- # Returns the activelly open file path from sublime.
- def __active_file_path(self):
- if self.window.active_view():
- file_path = self.window.active_view().file_name()
-
- if file_path and len(file_path) > 0:
- return file_path
-
- # Displays a status message on sublime.
- def __status_msg(self, message):
- sublime.status_message(message)
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Related Files/related_test.py b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Related Files/related_test.py
deleted file mode 100644
index a47b52a..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Related Files/related_test.py
+++ /dev/null
@@ -1,52 +0,0 @@
-import unittest
-import os
-from related import *
-
-
-class RelatedTest(unittest.TestCase):
-
- def test_descriptions_with_matches(self):
- self.assertEqual(self.__related().descriptions(), [
- "example1/app/helpers/examples_helper.rb",
- "example1/app/views/examples/index.html",
- "example1/app/views/examples/show.html",
- "example1/test/controllers/examples_controller_test.rb"
- ])
-
- def test_descriptions_without_matches(self):
- self.assertEqual(self.__related_without_match().descriptions(), [])
-
- def test_files_with_matches(self):
- self.assertEqual(self.__related().files(), [
- self.__expand("fixtures/example1/app/helpers/examples_helper.rb"),
- self.__expand("fixtures/example1/app/views/examples/index.html"),
- self.__expand("fixtures/example1/app/views/examples/show.html"),
- self.__expand("fixtures/example1/test/controllers/examples_controller_test.rb")
- ])
-
- def test_files_without_matches(self):
- self.assertEqual(self.__related_without_match().files(), [])
-
- def __patterns(self):
- return {
- ".+\/app\/controllers\/(.+)_controller.rb": ["app/views/$1/**", "app/helpers/$1_helper.rb"],
- ".+\/app\/(.+).rb": ["test/$1_test.rb"]
- }
-
- def __file(self):
- return self.__expand("fixtures/example1/app/controllers/examples_controller.rb")
-
- def __folders(self):
- return [self.__expand("fixtures/example1"), self.__expand("fixtures/example2")]
-
- def __expand(self, path):
- return os.path.join(os.path.dirname(os.path.realpath(__file__)), path)
-
- def __related(self):
- return Related(self.__file(), self.__patterns(), self.__folders())
-
- def __related_without_match(self):
- return Related("/should/not/match", self.__patterns(), self.__folders())
-
-if __name__ == '__main__':
- unittest.main()
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Related Files/screenshots/list.png b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Related Files/screenshots/list.png
deleted file mode 100644
index 933c9ab..0000000
Binary files a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Related Files/screenshots/list.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SmartMarkdown/.gitignore b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SmartMarkdown/.gitignore
deleted file mode 100644
index 4a8e770..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SmartMarkdown/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-*.pyc
-SmartMarkdown.sublime-project
-SmartMarkdown.sublime-workspace
-release.sh
-test/*
-.ropeproject
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SmartMarkdown/Default (Linux).sublime-keymap b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SmartMarkdown/Default (Linux).sublime-keymap
deleted file mode 100644
index 0e09a91..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SmartMarkdown/Default (Linux).sublime-keymap
+++ /dev/null
@@ -1,31 +0,0 @@
-[
- { "keys": ["ctrl+;", "ctrl+n"], "command": "headline_move",
- "args": {"forward": true, "same_level": false}, "context":
- [
- { "key": "selector", "operator": "equal", "operand": "text.html.markdown" }
- ]
- },
- { "keys": ["ctrl+;", "ctrl+p"], "command": "headline_move",
- "args": {"forward": false, "same_level": false}, "context":
- [
- { "key": "selector", "operator": "equal", "operand": "text.html.markdown" }
- ]
- },
- { "keys": ["ctrl+;", "ctrl+f"], "command": "headline_move",
- "args": {"forward": true, "same_level": true}, "context":
- [
- { "key": "selector", "operator": "equal", "operand": "text.html.markdown" }
- ]
- },
- { "keys": ["ctrl+;", "ctrl+b"], "command": "headline_move",
- "args": {"forward": false, "same_level": true}, "context":
- [
- { "key": "selector", "operator": "equal", "operand": "text.html.markdown" }
- ]
- },
- { "keys": ["ctrl+enter"], "command": "smart_new_line", "context":
- [
- { "key": "selector", "operator": "equal", "operand": "markup.heading.markdown" }
- ]
- }
-]
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SmartMarkdown/Default (OSX).sublime-keymap b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SmartMarkdown/Default (OSX).sublime-keymap
deleted file mode 100644
index 8d78de9..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SmartMarkdown/Default (OSX).sublime-keymap
+++ /dev/null
@@ -1,31 +0,0 @@
-[
- { "keys": ["ctrl+c", "ctrl+n"], "command": "headline_move",
- "args": {"forward": true, "same_level": false}, "context":
- [
- { "key": "selector", "operator": "equal", "operand": "text.html.markdown" }
- ]
- },
- { "keys": ["ctrl+c", "ctrl+p"], "command": "headline_move",
- "args": {"forward": false, "same_level": false}, "context":
- [
- { "key": "selector", "operator": "equal", "operand": "text.html.markdown" }
- ]
- },
- { "keys": ["ctrl+c", "ctrl+f"], "command": "headline_move",
- "args": {"forward": true, "same_level": true}, "context":
- [
- { "key": "selector", "operator": "equal", "operand": "text.html.markdown" }
- ]
- },
- { "keys": ["ctrl+c", "ctrl+b"], "command": "headline_move",
- "args": {"forward": false, "same_level": true}, "context":
- [
- { "key": "selector", "operator": "equal", "operand": "text.html.markdown" }
- ]
- },
- { "keys": ["ctrl+enter"], "command": "smart_new_line", "context":
- [
- { "key": "selector", "operator": "equal", "operand": "markup.heading.markdown" }
- ]
- }
-]
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SmartMarkdown/Default (Windows).sublime-keymap b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SmartMarkdown/Default (Windows).sublime-keymap
deleted file mode 100644
index 0e09a91..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SmartMarkdown/Default (Windows).sublime-keymap
+++ /dev/null
@@ -1,31 +0,0 @@
-[
- { "keys": ["ctrl+;", "ctrl+n"], "command": "headline_move",
- "args": {"forward": true, "same_level": false}, "context":
- [
- { "key": "selector", "operator": "equal", "operand": "text.html.markdown" }
- ]
- },
- { "keys": ["ctrl+;", "ctrl+p"], "command": "headline_move",
- "args": {"forward": false, "same_level": false}, "context":
- [
- { "key": "selector", "operator": "equal", "operand": "text.html.markdown" }
- ]
- },
- { "keys": ["ctrl+;", "ctrl+f"], "command": "headline_move",
- "args": {"forward": true, "same_level": true}, "context":
- [
- { "key": "selector", "operator": "equal", "operand": "text.html.markdown" }
- ]
- },
- { "keys": ["ctrl+;", "ctrl+b"], "command": "headline_move",
- "args": {"forward": false, "same_level": true}, "context":
- [
- { "key": "selector", "operator": "equal", "operand": "text.html.markdown" }
- ]
- },
- { "keys": ["ctrl+enter"], "command": "smart_new_line", "context":
- [
- { "key": "selector", "operator": "equal", "operand": "markup.heading.markdown" }
- ]
- }
-]
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SmartMarkdown/Default.sublime-commands b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SmartMarkdown/Default.sublime-commands
deleted file mode 100644
index 90028e7..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SmartMarkdown/Default.sublime-commands
+++ /dev/null
@@ -1,27 +0,0 @@
-[
- {
- "caption": "Pandoc: Render Markdown to temp PDF and View",
- "command": "pandoc_render",
- "args":{"open_after":true, "target":"pdf", "save_result":false}
- },
- {
- "caption": "Pandoc: Render Markdown to temp HTML and View",
- "command": "pandoc_render",
- "args":{"open_after":true, "target":"html", "save_result":false}
- },
- {
- "caption": "Pandoc: Render Markdown to HTML",
- "command": "pandoc_render",
- "args":{"open_after":false, "target":"html", "save_result":true}
- },
- {
- "caption": "Pandoc: Render Markdown to PDF",
- "command": "pandoc_render",
- "args":{"open_after":false, "target":"pdf", "save_result":true}
- },
- {
- "caption": "Pandoc: Render Markdown DocX",
- "command": "pandoc_render",
- "args":{"open_after":false, "target":"docx", "save_result":true}
- }
-]
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SmartMarkdown/Default.sublime-keymap b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SmartMarkdown/Default.sublime-keymap
deleted file mode 100644
index 28a78b4..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SmartMarkdown/Default.sublime-keymap
+++ /dev/null
@@ -1,72 +0,0 @@
-[
- { "keys": ["tab"], "command": "smart_folding", "context":
- [
- { "key": "selector", "operator": "equal", "operand": "markup.heading.markdown" }
- ]
- },
- { "keys": ["shift+tab"], "command": "global_folding", "context":
- [
- { "key": "selector", "operator": "equal", "operand": "text.html.markdown" }
- ]
- },
- { "keys": ["enter"], "command": "smart_list", "context":
- [
- { "key": "selector", "operator": "equal", "operand": "text.html.markdown" },
- { "key": "preceding_text", "operator": "regex_contains", "operand": "^\\s*([-+\\**]|\\d+\\.+)\\s+" }
- ]
- },
- { "keys": ["enter"], "command": "smart_list", "context":
- [
- { "key": "selector", "operator": "equal", "operand": "text.html.markdown" },
- { "key": "selector", "operator": "equal", "operand": "markup.list" }
- ]
- },
- { "keys": ["tab"], "command": "smart_table",
- "args": {"forward": true}, "context":
- [
- { "key": "selector", "operator": "equal", "operand": "text.html.markdown" },
- { "key": "preceding_text", "operator": "regex_contains", "operand": "^\\s*(\\||\\+[-=])",
- "match_all": true}
- ]
- },
- { "keys": ["tab"], "command": "smart_table",
- "args": {"forward": true}, "context":
- [
- { "key": "selector", "operator": "equal", "operand": "text.html.markdown" },
- { "key": "preceding_text", "operator": "regex_contains", "operand": "^\\s*" },
- { "key": "following_text", "operator": "regex_contains", "operand": "\\s*(\\||\\+[-=])",
- "match_all": true}
- ]
- },
- { "keys": ["shift+tab"], "command": "smart_table",
- "args": {"forward": false}, "context":
- [
- { "key": "selector", "operator": "equal", "operand": "text.html.markdown" },
- { "key": "preceding_text", "operator": "regex_contains", "operand": "^\\s*(\\||\\+[-=])",
- "match_all": true}
- ]
- },
- { "keys": ["shift+tab"], "command": "smart_table",
- "args": {"forward": false}, "context":
- [
- { "key": "selector", "operator": "equal", "operand": "text.html.markdown" },
- { "key": "preceding_text", "operator": "regex_contains", "operand": "^\\s*" },
- { "key": "following_text", "operator": "regex_contains", "operand": "\\s*(\\||\\+[-=])",
- "match_all": true}
- ]
- },
- {
- "keys": ["super+shift+."], "command": "change_heading_level",
- "args": {"up": true}, "context":
- [
- {"key": "selector", "operator": "equal", "operand": "text.html.markdown"}
- ]
- },
- {
- "keys": ["super+shift+,"], "command": "change_heading_level",
- "args": {"up": false}, "context":
- [
- {"key": "selector", "operator": "equal", "operand": "text.html.markdown"}
- ]
- }
-]
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SmartMarkdown/Main.sublime-menu b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SmartMarkdown/Main.sublime-menu
deleted file mode 100644
index 91bce87..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SmartMarkdown/Main.sublime-menu
+++ /dev/null
@@ -1,70 +0,0 @@
-[
- {
- "caption": "Preferences",
- "mnemonic": "n",
- "id": "preferences",
- "children":
- [
- {
- "caption": "Package Settings",
- "mnemonic": "P",
- "id": "package-settings",
- "children":
- [
- {
- "caption": "SmartMarkdown",
- "children":
- [
- {
- "command": "open_file", "args":
- {
- "file": "${packages}/SmartMarkdown/SmartMarkdown.sublime-settings"
- },
- "caption": "Settings – Default"
- },
- {
- "command": "open_file", "args":
- {
- "file": "${packages}/User/SmartMarkdown.sublime-settings"
- },
- "caption": "Settings – User"
- },
- { "caption": "-" },
- {
- "command": "open_file", "args":
- {
- "file": "${packages}/SmartMarkdown/Default.sublime-keymap"
- },
- "caption": "Key Bindings – Default"
- },
- {
- "command": "open_file", "args":
- {
- "file": "${packages}/User/Default (OSX).sublime-keymap",
- "platform": "OSX"
- },
- "caption": "Key Bindings – User"
- },
- {
- "command": "open_file", "args":
- {
- "file": "${packages}/User/Default (Linux).sublime-keymap",
- "platform": "Linux"
- },
- "caption": "Key Bindings – User"
- },
- {
- "command": "open_file",
- "args": {
- "file": "${packages}/User/Default (Windows).sublime-keymap",
- "platform": "Windows"
- },
- "caption": "Key Bindings – User"
- }
- ]
- }
- ]
- }
- ]
- }
-]
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SmartMarkdown/SmartMarkdown.sublime-settings b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SmartMarkdown/SmartMarkdown.sublime-settings
deleted file mode 100644
index 69d1fb2..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SmartMarkdown/SmartMarkdown.sublime-settings
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- /* Please specify the PATH of pdflatex if you wanna generate PDF */
- "tex_path": ["/usr/local/texlive/2011/bin/x86_64-darwin",
- "/usr/local/texlive/2012/bin/x86_64-darwin"],
- /* Provide your arguments here as a list e.g.: ["--latex-engine=xelatex", "--toc"]
- arguments that are separated by space must be in separate slots. e.g. ["-H", "template.tex"] */
- "pandoc_args": [],
- "pandoc_args_pdf": [],
- "pandoc_args_html": [],
- "pandoc_args_docx": []
-}
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SmartMarkdown/headline.py b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SmartMarkdown/headline.py
deleted file mode 100644
index 91dce43..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SmartMarkdown/headline.py
+++ /dev/null
@@ -1,263 +0,0 @@
-"""Some utility functions for working with headline of Markdown.
-
-Terminologies
-- Headline :: The headline entity OR the text of the headline
-- Content :: The content under the current headline. It stops after
- encountering a headline with the same or higher level OR EOF.
-"""
-# Author: Muchenxuan Tong
-
-import re
-import sublime
-
-try:
- from .utilities import is_region_void
-except ValueError:
- from utilities import is_region_void
-
-MATCH_PARENT = 1 # Match headlines at the same or higher level
-MATCH_CHILD = 2 # Match headlines at the same or lower level
-MATCH_SILBING = 3 # Only Match headlines at the same level.
-MATCH_ANY = 4 # Any headlines would be matched.
-ANY_LEVEL = -1 # level used when MATCH_ANY is used as match type
-
-
-def region_of_content_of_headline_at_point(view, from_point):
- """Extract the region of the content of under current headline."""
- _, level = headline_and_level_at_point(view, from_point)
- if level == None:
- return None
-
- if is_content_empty_at_point(view, from_point):
- return None
-
- line_num, _ = view.rowcol(from_point)
- content_line_start_point = view.text_point(line_num + 1, 0)
-
- next_headline, _ = find_headline(view, \
- content_line_start_point, \
- level, \
- True, \
- MATCH_PARENT)
- if not is_region_void(next_headline):
- end_pos = next_headline.a - 1
- else:
- end_pos = view.size()
- return sublime.Region(content_line_start_point, end_pos)
-
-
-def headline_and_level_at_point(view, from_point, search_above_and_down=False):
- """Return the current headline and level.
-
- If from_point is inside a headline, then return the headline and level.
- Otherwise depends on the argument it might search above and down.
- """
- line_region = view.line(from_point)
- line_content = view.substr(line_region)
- # Update the level in case it's headline.ANY_LEVEL
- level = _extract_level_from_headline(line_content)
-
- # Search above and down
- if level is None and search_above_and_down:
- # Search above
- headline_region, _ = find_headline(view,\
- from_point,\
- ANY_LEVEL,
- False,
- skip_folded=True)
- if not is_region_void(headline_region):
- line_content, level = headline_and_level_at_point(view,\
- headline_region.a)
- # Search down
- if level is None:
- headline_region, _ = find_headline(view,\
- from_point,\
- ANY_LEVEL,
- True,
- skip_folded=True)
- if not is_region_void(headline_region):
- line_content, level = headline_and_level_at_point(view, headline_region.a)
-
- return line_content, level
-
-
-def _extract_level_from_headline(headline):
- """Extract the level of headline, None if not found.
-
- """
- re_string = _get_re_string(ANY_LEVEL, MATCH_ANY)
- match = re.match(re_string, headline)
-
- if match:
- return len(match.group(1))
- else:
- return None
-
-
-def is_content_empty_at_point(view, from_point):
- """Check if the content under the current headline is empty.
-
- For implementation, check if next line is a headline a the same
- or higher level.
-
- """
- _, level = headline_and_level_at_point(view, from_point)
- if level is None:
- raise ValueError("from_point must be inside a valid headline.")
-
- line_num, _ = view.rowcol(from_point)
- next_line_region = view.line(view.text_point(line_num + 1, 0))
- next_line_content = view.substr(next_line_region)
- next_line_level = _extract_level_from_headline(next_line_content)
-
- # Note that EOF works too in this case.
- if next_line_level and next_line_level <= level:
- return True
- else:
- return False
-
-
-def find_headline(view, from_point, level, forward=True, \
- match_type=MATCH_ANY, skip_headline_at_point=False, \
- skip_folded=False):
- """Return the region of the next headline or EOF.
-
- Parameters
- ----------
- view: sublime.view
-
- from_point: int
- From which to find.
-
- level: int
- The headline level to match.
-
- forward: boolean
- Search forward or backward
-
- match_type: int
- MATCH_SILBING, MATCH_PARENT, MATCH_CHILD or MATCH_ANY.
-
- skip_headline_at_point: boolean
- When searching whether skip the headline at point
-
- skip_folded: boolean
- Whether to skip the folded region
-
- Returns
- -------
- match_region: int
- Matched region, or None if not found.
-
- match_level: int
- The level of matched headline, or None if not found.
-
- """
- if skip_headline_at_point:
- # Move the point to the next line if we are
- # current in a headline already.
- from_point = _get_new_point_if_already_in_headline(view, from_point,
- forward)
-
- re_string = _get_re_string(level, match_type)
- if forward:
- match_region = view.find(re_string, from_point)
- else:
- all_match_regions = view.find_all(re_string)
- match_region = _nearest_region_among_matches_from_point(view, \
- all_match_regions, \
- from_point, \
- False, \
- skip_folded)
-
- if skip_folded:
- while (_is_region_folded(match_region, view)):
- from_point = match_region.b
- match_region = view.find(re_string, from_point)
-
- if not is_region_void(match_region):
- if not is_scope_headline(view, match_region.a):
- return find_headline(view, match_region.a, level, forward, \
- match_type, True, skip_folded)
- else:
- ## Extract the level of matched headlines according to the region
- headline = view.substr(match_region)
- match_level = _extract_level_from_headline(headline)
- else:
- match_level = None
- return (match_region, match_level)
-
-def _get_re_string(level, match_type=MATCH_ANY):
- """Get regular expression string according to match type.
-
- Return regular expression string, rather than compiled string. Since
- sublime's view.find function needs string.
-
- Parameters
- ----------
- match_type: int
- MATCH_SILBING, MATCH_PARENT, MATCH_CHILD or ANY_LEVEL.
-
- """
- if match_type == MATCH_ANY:
- re_string = r'^(#+)\s.*'
- else:
- try:
- if match_type == MATCH_PARENT:
- re_string = r'^(#{1,%d})\s.*' % level
- elif match_type == MATCH_CHILD:
- re_string = r'^(#{%d,})\s.*' % level
- elif match_type == MATCH_SILBING:
- re_string = r'^(#{%d,%d})\s.*' % (level, level)
- except ValueError:
- print("match_type has to be specified if level isn't ANY_LEVE")
- return re_string
-
-
-def _get_new_point_if_already_in_headline(view, from_point, forward=True):
- line_content = view.substr(view.line(from_point))
- if _extract_level_from_headline(line_content):
- line_num, _ = view.rowcol(from_point)
- if forward:
- return view.text_point(line_num + 1, 0)
- else:
- return view.text_point(line_num, 0) - 1
- else:
- return from_point
-
-
-def is_scope_headline(view, from_point):
- return view.score_selector(from_point, "markup.heading") > 0 or \
- view.score_selector(from_point, "meta.block-level.markdown") > 0
-
-
-def _nearest_region_among_matches_from_point(view, all_match_regions, \
- from_point, forward=False,
- skip_folded=True):
- """Find the nearest matched region among all matched regions.
-
- None if not found.
-
- """
- nearest_region = None
-
- for r in all_match_regions:
- if not forward and r.b <= from_point and \
- (not nearest_region or r.a > nearest_region.a):
- candidate = r
- elif forward and r.a >= from_point and \
- (not nearest_region or r.b < nearest_region.b):
- candidate = r
- else:
- continue
- if skip_folded and not _is_region_folded(candidate, view):
- nearest_region = candidate
-
- return nearest_region
-
-
-def _is_region_folded(region, view):
- for i in view.folded_regions():
- if i.contains(region):
- return True
- return False
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SmartMarkdown/headline_level.py b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SmartMarkdown/headline_level.py
deleted file mode 100644
index 3ad56b9..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SmartMarkdown/headline_level.py
+++ /dev/null
@@ -1,21 +0,0 @@
-"""This file is contributed by [David Smith](https://github.com/djs070)
-"""
-import sublime
-import sublime_plugin
-
-
-class ChangeHeadingLevelCommand(sublime_plugin.TextCommand):
- def run(self, edit, up=True):
- for region in self.view.sel():
- line = self.view.line(region)
- if up:
- # Increase heading level
- if not self.view.substr(line)[0] in ['#', ' ']:
- self.view.insert(edit, line.begin(), " ")
- self.view.insert(edit, line.begin(), "#")
- else:
- # Decrease heading level
- if self.view.substr(line)[0] == '#':
- self.view.erase(edit, sublime.Region(line.begin(), line.begin() + 1))
- if self.view.substr(line)[0] == ' ':
- self.view.erase(edit, sublime.Region(line.begin(), line.begin() + 1))
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SmartMarkdown/headline_move.py b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SmartMarkdown/headline_move.py
deleted file mode 100644
index 824d6a9..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SmartMarkdown/headline_move.py
+++ /dev/null
@@ -1,61 +0,0 @@
-"""This module provides commands for easily moving between headilnes.
-
-The feature is borrowed from [Org-mode](http://org-mode.org).
-
-"""
-# Author: Muchenxuan Tong
-
-import sublime
-import sublime_plugin
-
-try:
- from . import headline
- from .utilities import is_region_void
-except ValueError:
- import headline
- from utilities import is_region_void
-
-
-class HeadlineMoveCommand(sublime_plugin.TextCommand):
- def run(self, edit, forward=True, same_level=True):
- """Move between headlines, forward or backward.
-
- If same_level is true, only move to headline with the same level
- or higher level.
-
- """
- new_sel = []
- if same_level:
- level_type = headline.MATCH_PARENT
- else:
- level_type = headline.MATCH_ANY
-
- for region in self.view.sel():
- if same_level:
- _, level = headline.headline_and_level_at_point(self.view,\
- region.a,
- search_above_and_down=True)
- if level is None:
- return
- else:
- level = headline.ANY_LEVEL
-
- match_region, _ = headline.find_headline(self.view, \
- region.a, \
- level, \
- forward, \
- level_type, \
- skip_headline_at_point=True,\
- skip_folded=True)
-
- if is_region_void(match_region):
- return
- new_sel.append(sublime.Region(match_region.a, match_region.a))
-
- self.adjust_view(new_sel)
-
- def adjust_view(self, new_sel):
- self.view.sel().clear()
- for region in new_sel:
- self.view.sel().add(region)
- self.view.show(region)
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SmartMarkdown/license.txt b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SmartMarkdown/license.txt
deleted file mode 100644
index d71c44d..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SmartMarkdown/license.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-Copyright (C) <2012> Muchenxuan Tong
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SmartMarkdown/package-metadata.json b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SmartMarkdown/package-metadata.json
deleted file mode 100644
index 7273997..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SmartMarkdown/package-metadata.json
+++ /dev/null
@@ -1 +0,0 @@
-{"url": "https://github.com/demon386/SmartMarkdown", "version": "2013.06.16.12.00.50", "description": "A plugin for facilitating editing markdown in Sublime Text 2. Features are borrowed from Org mode of Emacs."}
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SmartMarkdown/pandoc_render.py b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SmartMarkdown/pandoc_render.py
deleted file mode 100644
index 67f7320..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SmartMarkdown/pandoc_render.py
+++ /dev/null
@@ -1,124 +0,0 @@
-"""This file is initially forked from
-[SublimePandoc](https://github.com/jclement/SublimePandoc)
-by [DanielMe](https://github.com/DanielMe/)
-
-@todo naming convention should be foo_bar rather than fooBar.
-@bug PDF export doesn't work in my Mac, gonna check it later.
-
-2012-07-02: Muchenxuan Tong changed some stylical errors (with SublimeLinter)
-"""
-
-import sublime
-import sublime_plugin
-import webbrowser
-import tempfile
-import os
-import os.path
-import sys
-import subprocess
-from subprocess import PIPE
-
-
-class PandocRenderCommand(sublime_plugin.TextCommand):
- def is_enabled(self):
- return self.view.score_selector(0, "text.html.markdown") > 0
-
- def is_visible(self):
- return True
-
- def run(self, edit, target="pdf", open_after=True, save_result=False):
- if target not in ["html", "docx", "pdf"]:
- raise Exception("Format %s currently unsopported" % target)
-
- self.setting = sublime.load_settings("SmartMarkdown.sublime-settings")
-
- encoding = self.view.encoding()
- if encoding == 'Undefined':
- encoding = 'UTF-8'
- elif encoding == 'Western (Windows 1252)':
- encoding = 'windows-1252'
- contents = self.view.substr(sublime.Region(0, self.view.size()))
- contents = contents.encode(encoding)
-
- file_name = self.view.file_name()
- if file_name:
- os.chdir(os.path.dirname(file_name))
-
- # write buffer to temporary file
- # This is useful because it means we don't need to save the buffer
- tmp_md = tempfile.NamedTemporaryFile(delete=False, suffix=".md")
- tmp_md.write(contents)
- tmp_md.close()
-
- # output file...
- suffix = "." + target
- if save_result:
- output_name = os.path.splitext(self.view.file_name())[0] + suffix
- if not self.view.file_name():
- raise Exception("Please safe the buffer before trying to export with pandoc.")
- else:
- output = tempfile.NamedTemporaryFile(delete=False, suffix=suffix)
- output.close()
- output_name = output.name
-
- args = self.pandoc_args(target)
- self.run_pandoc(tmp_md.name, output_name, args)
-
- if open_after:
- self.open_result(output_name, target)
- #os.unlink(tmp_md.name)
-
- def run_pandoc(self, infile, outfile, args):
- cmd = ['pandoc'] + args
- cmd += [infile, "-o", outfile]
-
- # Merge the path in settings
- setting_path = self.setting.get("tex_path", [])
- for p in setting_path:
- if p not in os.environ["PATH"]:
- os.environ["PATH"] += ":" + p
-
- try:
- # Use the current directory as working dir whenever possible
- file_name = self.view.file_name()
- if file_name:
- working_dir = os.path.dirname(file_name)
- p = subprocess.Popen(cmd, stdout=PIPE, stderr=PIPE,
- cwd=working_dir)
-
- else:
- p = subprocess.Popen(cmd, stdout=PIPE, stderr=PIPE)
- p.wait()
- out, err = p.communicate()
- if err:
- raise Exception("Command: %s\n" % " ".join(cmd) + "\nErrors: " + err)
- except Exception as e:
- sublime.error_message("Fail to generate output.\n{0}".format(e))
-
- def pandoc_args(self, target):
- """
- Create a list of arguments for the pandoc command
- depending on the target.
- TODO: Actually do something sensible here
- """
- # Merge the args in settings
- args = self.setting.get("pandoc_args", [])
-
- if target == "pdf":
- args += self.setting.get("pandoc_args_pdf", [])
- if target == "html":
- args += self.setting.get("pandoc_args_html", []) + ['-t', 'html5']
- if target == "docx":
- args += self.setting.get("pandoc_args_docx", []) + ['-t', 'docx']
- return args
-
- def open_result(self, outfile, target):
- if target == "html":
- webbrowser.open_new_tab(outfile)
- elif sys.platform == "win32":
- os.startfile(outfile)
- elif "mac" in sys.platform or "darwin" in sys.platform:
- os.system("open %s" % outfile)
- print(outfile)
- elif "posix" in sys.platform or "linux" in sys.platform:
- os.system("xdg-open %s" % outfile)
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SmartMarkdown/readme.md b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SmartMarkdown/readme.md
deleted file mode 100644
index f4b3769..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SmartMarkdown/readme.md
+++ /dev/null
@@ -1,61 +0,0 @@
-# SmartMarkdown for Sublime Text 2 & 3
-
-Author: Muchenxuan Tong (demon386@gmail.com)
-
-## Introduction
-The plugin is aimed at making editing Markdown in Sublime Text 2 easier and more powerful. Ideally, I hope we can bring several amazing features of [Org-mode](http://org-mode.org) of Emacs into Sublime Text.
-
-## What's new
-### v0.3: Adjust the position of folding mark to the end of headline. (added by [vovkkk](https://github.com/vovkkk) and [alehandrof](https://github.com/alehandrof))
-### v0.2: Support for Sublime Text 3 (added by [UNOwen](https://github.com/UNOwen).)
-### v0.1.6: Add support and bindings for headline level changing. (added by [David Smith](https://github.com/djs070).) The key bindings are: **Super+Shift+,** for decreasing and **Super+Shift+.** for increasing.
-### v0.1.5: Basic smart table (grid table) support added. Basic Pandoc intergration (added by [DanielMe](https://github.com/DanielMe/).)
-### v0.1.3: Add support for global headling folding / unfolding.
-### v0.1.2: Move between headlines supported!
-- Use **Ctrl+c Ctrl+n** to move to the next headline (any level); **Ctrl+c Ctrl+p** to the previous one.
-- Use **Ctrl+c Ctrl+f** to move to the next headline (same level or higher level); **Ctrl+c Ctrl+b** to the previous one.
-- Fixed a bug on bullet list. Thanks to quodlibet (fixed in v0.1.1).
-
-### v0.1.0: Created!
-- Smart Headline folding / unfolding is supported.
-- Smart Lists is supported.
-
-## Done
-- **Smart Headline folding / unfolding**. Right now you can fold / unfold headlines by pressing **TAB** on it. I assume you use the following formats: # Section; ## Subsection; ### Subsubsection ...
-- **Global Headline Folding / unfolding**. **Shift+Tab** to Fold / Unfold all at any position.
-- **Smart Order / Unordered list**. When editing lists, you can just press **ENTER** and this plugin will automatically continue the list. Once the content of the list becomes empty it will stop.
-- **Move between headlines**.
- - Use **Ctrl+c Ctrl+n** to move to the next headline (any level); **Ctrl+c Ctrl+p** to the previous one, for Mac. (**Ctrl+; Ctrl+n** and **Ctrl+; Ctrl+p** for Windows and Linux)
- - Use **Ctrl+c Ctrl+f** to move to the next headline (same level or higher level); **Ctrl+c Ctrl+b** to the previous one, for Mac. (**Ctrl+; Ctrlf** and **Ctrl+; Ctrl+b** for Windows and Linux)
-- **Adjust headline level** Added by [David Smith](https://github.com/djs070).
- - **Super+Shift+,** for decreasing and **Super+Shift+.** for increasing headline levels.
-- **Smart table**
- - Currently, the smart table suppose only the Grid table format of [Pandoc](http://johnmacfarlane.net/pandoc/README.html). Use monospaced fonts, otherwise it would appear bizarre.
- - The behavior is like the table in Org-mode. If you are unfamiliar with Org-mode, just use | (vertical line) to separate the column (e.g. | header1 | header 2 |), and use the **TAB** to reformat the table at point. Everything would fall into the place. Add +- and then press TAB for adding separator between rows. Add += and then press TAB for adding separator between header and the table body. Read the Grid tables section of [Pandoc Userg's Guide](http://johnmacfarlane.net/pandoc/README.html#tables) for more information.
- - Use **TAB** to move forward a cell in table, **Shift+TAB** to move backward.
- - Personally I plan to use grid table as a basis and add command for converting to other table formats if necessary.
-- **Basic Pandoc integration with Pandoc** By integrating [SublimePandoc](https://github.com/jclement/SublimePandoc). Added by [DanielMe](https://github.com/DanielMe/).
- - **Note**: If you need to generate PDF output, please make sure you have pdflatex available ([MacTeX](http://www.tug.org/mactex/2012/) for Mac, or TeX Live for other OS). Please also specify "tex_path" in the package settings (Preference - Package Settings - SmartMarkdown - Settings - User (see Settings - Default as an example.))
-
-## Todo
-- **Embeded R & Python Code for reproducible research**
-- **Better Pandoc integration** Actual support for different Pandoc command line options etc.
-- ...
-
-
-## For Developers
-- Whenever possible, please obey the [PEP 8](http://www.python.org/dev/peps/pep-0008/) style guide. This can be checked easily with the plugin SublimeLinter.
-- git-flow is recommended (but not enforced) as a development work flow. For instruction please read [Why aren't you using git-flow?](http://jeffkreeftmeijer.com/2010/why-arent-you-using-git-flow/). To adapt it, a command line tool [gitflow](https://github.com/nvie/gitflow/) is highly recommended.
-- Please work on the develop branch, it's newer than master. the master branch is for users.
-
-# License
-The plugin is licensed under the MIT license.
-
-
-Copyright (C) <2012> Muchenxuan Tong
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SmartMarkdown/smart_folding.py b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SmartMarkdown/smart_folding.py
deleted file mode 100644
index 466eae3..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SmartMarkdown/smart_folding.py
+++ /dev/null
@@ -1,214 +0,0 @@
-"""Smart folding is a feature borrowed from [Org-mode](http://org-mode.org).
-
-It enables folding / unfolding the headlines by simply pressing TAB on headlines.
-
-Global headline folding / unfolding is recommended to be trigged by Shift + TAB,
-at anywhere.
-
-"""
-# Author: Muchenxuan Tong
-
-import re
-
-import sublime
-import sublime_plugin
-
-try:
- from . import headline
- from .utilities import is_region_void
-except ValueError:
- import headline
- from utilities import is_region_void
-
-
-HEADLINE_PATTERN = re.compile(r'^(#+)\s.*')
-
-
-class SmartNewLineCommand(sublime_plugin.TextCommand):
- """Changes behavior of default 'insert line after'
- Puts new line after folding mark if any.
- """
- def run(self, edit):
- points = []
- for s in self.view.sel():
- r = self.view.full_line(s)
- if headline._is_region_folded(r.b + 1, self.view):
- i = headline.region_of_content_of_headline_at_point(self.view, s.b)
- else:
- i = sublime.Region(r.a, r.b - 1)
- points.append(i)
- self.view.insert(edit, i.b, '\n')
- self.view.sel().clear()
- for p in points:
- self.view.sel().add(p.b + 1)
-
-
-class SmartFoldingCommand(sublime_plugin.TextCommand):
- """Smart folding is used to fold / unfold headline at the point.
-
- It's designed to bind to TAB key, and if the current line is not
- a headline, a \t would be inserted.
-
- """
- def run(self, edit):
- ever_matched = False
- for region in self.view.sel():
- matched = self.fold_or_unfold_headline_at_point(region.a)
- if matched:
- ever_matched = True
- if not ever_matched:
- for r in self.view.sel():
- self.view.insert(edit, r.a, '\t')
- self.view.show(r)
-
- def fold_or_unfold_headline_at_point(self, from_point):
- """Smart folding of the current headline.
-
- Unfold only when it's totally folded. Otherwise fold it.
-
- """
- _, level = headline.headline_and_level_at_point(self.view,
- from_point)
- # Not a headline, cancel
- if level is None or not headline.is_scope_headline(self.view, from_point):
- return False
-
- content_region = headline.region_of_content_of_headline_at_point(self.view,
- from_point)
- # If the content is empty, Nothing needs to be done.
- if content_region is None:
- # Return True because there is a headline anyway.
- return True
-
- # Check if content region is folded to decide the action.
- if self.is_region_totally_folded(content_region):
- self.unfold_yet_fold_subheads(content_region, level)
- else:
- self.view.fold(sublime.Region(content_region.a - 1, content_region.b))
- return True
-
- def is_region_totally_folded(self, region):
- """Decide if the region is folded. Treat empty region as folded."""
- if (region is None) or (region.a == region.b):
- return True
-
- for i in self.view.folded_regions():
- if i.contains(region):
- return True
- return False
-
- def unfold_yet_fold_subheads(self, region, level):
- """Unfold the region while keeping the subheadlines folded."""
- ## First unfold all
- self.view.unfold(region)
- ## Fold subheads
- child_headline_region, _ = headline.find_headline(self.view, region.a, level, True, \
- headline.MATCH_CHILD)
-
- while (not is_region_void(child_headline_region) and child_headline_region.b <= region.b):
- child_content_region = headline.region_of_content_of_headline_at_point(self.view,
- child_headline_region.a)
- if child_content_region is not None:
- self.view.fold(sublime.Region(child_content_region.a - 1, child_content_region.b))
- search_start_point = child_content_region.b
- else:
- search_start_point = child_headline_region.b
-
- child_headline_region, _ = headline.find_headline(self.view, \
- search_start_point, level, True, \
- headline.MATCH_CHILD,
- skip_headline_at_point=True)
-
-
-class GlobalFoldingCommand(SmartFoldingCommand):
- """Global folding / unfolding headlines at any point.
-
- Unfold only when top-level headlines are totally folded.
- Otherwise fold.
-
- """
- def run(self, edit):
- if self.is_global_folded():
- # Unfold all
- self.unfold_all()
- else:
- self.fold_all()
-
- def is_global_folded(self):
- """Check if all headlines are folded.
- """
- region, level = headline.find_headline(self.view, 0, \
- headline.ANY_LEVEL, True)
- # Treating no heeadline as folded, since unfolded all makes
- # no harm in this situation.
- if is_region_void(region):
- return True
-
- point = region.a
- # point can be zero
- while (point is not None and region):
- region = headline.region_of_content_of_headline_at_point(self.view, \
- point)
- if not is_region_void(region):
- point = region.b
- if not self.is_region_totally_folded(region):
- return False
- else:
- region, level = headline.find_headline(self.view, point, \
- headline.ANY_LEVEL, \
- True,
- skip_headline_at_point=True)
- if not is_region_void(region):
- point = region.a
- return True
-
- def unfold_all(self):
- self.view.unfold(sublime.Region(0, self.view.size()))
- self.view.show(self.view.sel()[0])
-
- def fold_all(self):
- region, level = headline.find_headline(self.view, \
- 0, \
- headline.ANY_LEVEL, \
- True)
-
- # At this point, headline region is sure to exist, otherwise it would be
- # treated as gobal folded. (self.is_global_folded() would return True)
- point = region.a
- # point can be zero
- while (point is not None and region):
- region = headline.region_of_content_of_headline_at_point(self.view, \
- point)
- if not is_region_void(region):
- point = region.b
- self.view.fold(sublime.Region(region.a - 1, region.b))
- region, level = headline.find_headline(self.view, point, \
- headline.ANY_LEVEL,
- True, \
- skip_headline_at_point=True)
- if not is_region_void(region):
- point = region.a
- self.adjust_cursors_and_view()
-
- def adjust_cursors_and_view(self):
- """After folder, adjust cursors and view.
-
- If the current point is inside the folded region, move it move
- otherwise it's easy to perform some unintentional editing.
-
- """
- folded_regions = self.view.folded_regions()
- new_sel = []
-
- for r in self.view.sel():
- for folded in folded_regions:
- if folded.contains(r):
- new_sel.append(sublime.Region(folded.b, folded.b))
- break
- else:
- new_sel.append(r)
-
- self.view.sel().clear()
- for r in new_sel:
- self.view.sel().add(r)
- self.view.show(r)
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SmartMarkdown/smart_list.py b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SmartMarkdown/smart_list.py
deleted file mode 100644
index c1e229f..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SmartMarkdown/smart_list.py
+++ /dev/null
@@ -1,57 +0,0 @@
-"""Smart list is used to automatially continue the current list."""
-# Author: Muchenxuan Tong
-
-import re
-
-import sublime
-import sublime_plugin
-
-
-ORDER_LIST_PATTERN = re.compile(r"(\s*)(\d+)(\.\s+)\S+")
-UNORDER_LIST_PATTERN = re.compile(r"(\s*[-+\**]+)(\s+)\S+")
-EMPTY_LIST_PATTERN = re.compile(r"(\s*([-+\**]|\d+\.+))\s+$")
-
-
-class SmartListCommand(sublime_plugin.TextCommand):
- def run(self, edit):
- for region in self.view.sel():
- line_region = self.view.line(region)
- # the content before point at the current line.
- before_point_region = sublime.Region(line_region.a,
- region.a)
- before_point_content = self.view.substr(before_point_region)
-
- # Disable smart list when folded.
- folded = False
- for i in self.view.folded_regions():
- if i.contains(before_point_region):
- self.view.insert(edit, region.a, '\n')
- folded = True
- if folded:
- break
-
- match = EMPTY_LIST_PATTERN.match(before_point_content)
- if match:
- self.view.erase(edit, before_point_region)
- break
-
- match = ORDER_LIST_PATTERN.match(before_point_content)
- if match:
- insert_text = match.group(1) + \
- str(int(match.group(2)) + 1) + \
- match.group(3)
- self.view.insert(edit, region.a, "\n" + insert_text)
- break
-
- match = UNORDER_LIST_PATTERN.match(before_point_content)
- if match:
- insert_text = match.group(1) + match.group(2)
- self.view.insert(edit, region.a, "\n" + insert_text)
- break
-
- self.view.insert(edit, region.a, '\n')
- self.adjust_view()
-
- def adjust_view(self):
- for region in self.view.sel():
- self.view.show(region)
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SmartMarkdown/smart_table.py b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SmartMarkdown/smart_table.py
deleted file mode 100644
index 51c6677..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SmartMarkdown/smart_table.py
+++ /dev/null
@@ -1,87 +0,0 @@
-"""Smart is inspired by the Table behavior of Org-mode.
-
-Markdown itself doesn't support grid table, yet pandoc does.
-
-@todo: add a key binding for converting grid table to the simple one
-"""
-# Author: Muchenxuan Tong
-# LICENSE: MIT
-
-import sublime
-import sublime_plugin
-
-try:
- from . import table
-except ValueError:
- import table
-
-
-class SmartTable(sublime_plugin.TextCommand):
- def run(self, edit, forward=True):
- new_sel = []
- for r in self.view.sel():
- point = r.a
-
- for i in self.view.folded_regions():
- if i.contains(sublime.Region(point, point)):
- return
- t = table.convert_table_at_point_as_list(self.view, point)
- t = table.reformat_table_list(t)
- t_str = table.convert_table_list_to_str(t)
-
- # Both are 0-based
- cur_row_num, cur_col_num = table.get_point_row_and_col(self.view, point)
- table_row_num = len(t)
- line_num, _ = self.view.rowcol(point)
- start_line_num = line_num - cur_row_num
- start_point = self.view.text_point(line_num - cur_row_num, 0)
- end_line_num = line_num + table_row_num - cur_row_num - 1
- end_line_start_point = self.view.text_point(end_line_num, 0)
- end_point = self.view.line(end_line_start_point).b
-
- # Erase the previous table region, use the new one for substitution.
- self.view.erase(edit, sublime.Region(start_point, end_point))
- self.view.insert(edit, start_point, t_str)
-
- if forward:
- if cur_col_num is None or cur_col_num >= len(t[0]) - 1:
- line_num += 1
- while(table.is_line_separator(self.view, line_num)):
- line_num += 1
- cur_col_num = 0
- else:
- cur_col_num += 1
- else:
- if cur_col_num is None or cur_col_num <= 0:
- line_num -= 1
- while(table.is_line_separator(self.view, line_num)):
- line_num -= 1
- cur_col_num = len(t[0]) - 1
- else:
- cur_col_num -= 1
-
- # Add a new line when at the end of the table.
- if line_num < start_line_num or line_num > end_line_num:
- col_pos = 0
- if line_num > end_line_num:
- self.view.insert(edit, self.view.text_point(line_num, 0), "\n")
- else:
- col_pos = self.calculate_col_point(t, cur_col_num)
-
- new_sel.append(self.view.text_point(line_num, col_pos))
-
- self.view.sel().clear()
- for r in new_sel:
- self.view.sel().add(r)
- self.view.show(r)
-
- def calculate_col_point(self, formatted_table, col_num):
- i = 0
- while table.SEPARATOR_PATTERN.match(formatted_table[i][0]):
- i += 1
-
- cols_length = [len(j) for j in formatted_table[i]]
- point = 2
- for i in range(col_num):
- point += cols_length[i] + 3
- return point
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SmartMarkdown/table.py b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SmartMarkdown/table.py
deleted file mode 100644
index 41348c4..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SmartMarkdown/table.py
+++ /dev/null
@@ -1,207 +0,0 @@
-"""Utilities function for working with grid table of Pandoc
-
-Terminologies
-
-- Table list :: This is not a list of tables, but rather converting the table as
-a nested python list. Each row is a sub-list in the table list.
-
-"""
-# Author: Muchenxuan Tong
-# LICENSE: MIT
-
-import re
-import copy
-
-import sublime
-
-try:
- from . import utilities
-except ValueError:
- import utilities
-
-TABLE_PATTERN = re.compile(r"\s*\|")
-SEPARATOR_PATTERN = re.compile(r"\s*(\+[=-])")
-
-
-def convert_table_at_point_as_list(view, from_point):
- """Get the table at the point.
- Transform the table to python list.
-
- Returns
- -------
- table: list
- A nested list representing the table.
- indent: "str" (@todo not impelmented yet)
- String of indentation, used in every row.
-
- """
- table_above = convert_table_above_or_below_as_list(view, from_point, above=True)
- table_below = convert_table_above_or_below_as_list(view, from_point, above=False)
- row_at_point = convert_row_at_point_as_list(view, from_point)
-
- table = table_above + [row_at_point] + table_below
- return table
-
-
-def convert_table_above_or_below_as_list(view, from_point, above):
- """Convert the table above the point as python list.
-
- Returns
- -------
- table: list
- A nested list representing the table.
-
- """
- line_num, _ = view.rowcol(from_point)
- line_num += - 1 if above else 1
-
- line_text = utilities.text_at_line(view, line_num)
- table = []
-
- while line_text and (TABLE_PATTERN.match(line_text) or
- SEPARATOR_PATTERN.match(line_text)):
- table.append(_convert_row_text_as_list(line_text))
- line_num += -1 if above else 1
- line_text = utilities.text_at_line(view, line_num)
-
- if above:
- table = table[::-1]
-
- return table
-
-
-def convert_row_at_point_as_list(view, from_point):
- """Convert the row at point as a python list.
- """
- line_num, _ = view.rowcol(from_point)
- line_text = utilities.text_at_line(view, line_num)
-
- return _convert_row_text_as_list(line_text)
-
-
-def _convert_row_text_as_list(row_text):
- """Convert the text of a row into a python list.
-
- Paramters
- ---------
- row_text: str
- The text of the row.
-
- Returns
- -------
- lst: list
- The converted list.
-
- """
- split_row = row_text.split("|")
-
- if len(split_row) > 2 and split_row[-1].strip() == "":
- lst = split_row[1:-1]
- else:
- lst = split_row[1:]
-
- match = SEPARATOR_PATTERN.match(row_text)
- if match:
- lst = [match.group(1)]
-
- return [i.strip() for i in lst]
-
-
-def reformat_table_list(table):
- """Reformat & align the table list.
-
- After this, every column is of the same length,
- and every row is of the same number of column.
-
- """
- cols_num = max([len(row) for row in table])
- cols_length = _get_cols_length(table, cols_num)
-
- new_table = []
- for row in table:
- new_row = []
- if not SEPARATOR_PATTERN.match(row[0]):
- for i in range(cols_num):
- try:
- col = row[i]
- new_row.append(col + " " * (cols_length[i] - len(col)))
- except:
- new_row.append(" " * cols_length[i])
- else:
- marker = row[0][1]
- for i in range(cols_num):
- new_row.append(marker * (cols_length[i] + 2))
- # Add a mark for recognization
- new_row[0] = "+" + new_row[0]
- new_table.append(new_row)
- return new_table
-
-
-def convert_table_list_to_str(table):
- """Convert the python list to str for outputing.
-
- """
- table_str = ""
- table = copy.deepcopy(table)
- for row in table:
- if SEPARATOR_PATTERN.match(row[0]):
- row[0] = row[0][1:] # Remove the mark added in reformat_table_list
- row_str = "+"
- for col_str in row:
- row_str += col_str + "+"
- else:
- row_str = "|"
- for col_str in row:
- row_str += " " + col_str + " " + "|"
- table_str += row_str + "\n"
- return table_str[:-1]
-
-
-def _get_cols_length(table, cols_num):
- """Return the max length of every columns.
- """
- cols_length = [0] * cols_num
- for row in table:
- for (i, col) in enumerate(row):
- col_len = len(col)
- if col_len > cols_length[i]:
- cols_length[i] = col_len
- return cols_length
-
-
-def get_point_row_and_col(view, from_point):
- """Return the row and col the current point is in the table.
- """
- line_num, _ = view.rowcol(from_point)
- line_num -= 1
-
- line_text = utilities.text_at_line(view, line_num)
- row_num = 0
- while line_text and (TABLE_PATTERN.match(line_text) or
- SEPARATOR_PATTERN.match(line_text)):
- row_num += 1
- line_num -= 1
- line_text = utilities.text_at_line(view, line_num)
-
- line_start_point = view.line(from_point)
- region = sublime.Region(line_start_point.a, from_point)
- precedding_text = view.substr(region)
-
- split_row = precedding_text.split("|")
- if len(split_row) >= 2:
- col_num = len(split_row) - 2
- elif split_row[0].strip() == "":
- col_num = -1
- else:
- col_num = None
- return (row_num, col_num)
-
-
-def is_line_separator(view, line_num):
- """Check if the current line is a separator.
- """
- text = utilities.text_at_line(view, line_num)
- if text and SEPARATOR_PATTERN.match(text):
- return True
- else:
- return False
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SmartMarkdown/utilities.py b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SmartMarkdown/utilities.py
deleted file mode 100644
index 2510143..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SmartMarkdown/utilities.py
+++ /dev/null
@@ -1,23 +0,0 @@
-"""Some utility functions for working with sublime.
-"""
-
-
-def text_at_line(view, line_num):
- """Return the content at line. None if out of boundary."""
- if line_num < 0:
- return None
-
- max_line_num, _ = view.rowcol(view.size())
- if line_num > max_line_num:
- return None
-
- point = view.text_point(line_num, 0)
- line_region = view.line(point)
- return view.substr(line_region)
-
-def is_region_void(region):
- if region == None:
- return True
- if region.a == -1 and region.b == -1:
- return True
- return False
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Solarized Color Scheme/README.mkd b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Solarized Color Scheme/README.mkd
deleted file mode 100644
index a0d0f05..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Solarized Color Scheme/README.mkd
+++ /dev/null
@@ -1,80 +0,0 @@
-Solarized Colorscheme for Sublime Text
-=============================
-
-See the [Solarized homepage](http://ethanschoonover.com/solarized) for screenshots,
-details and colorscheme versions for Vim, Mutt, popular terminal emulators and
-other applications.
-
-
-Downloads
----------
-
-If you have come across this page via github please visit the main [Solarized homepage](http://ethanschoonover.com/solarized). The original [Solarized repository] has many more themes and a number of [test files].
-
-[Solarized homepage]: http://ethanschoonover.com/solarized
-[Solarized repository]: https://github.com/altercation/solarized
-[test files]: https://github.com/altercation/solarized/tree/master/utils/tests
-
-
-Sublime Text Support
----------
-
-This theme is fully compatible with [Sublime Text][Sublime]!
-
-To install it, ensure that you have installed Sublime Package Control following [these instructions][SublimePackage]
-
-Open the Sublime command palette with `Ctrl + Shift + P`, type / select `Package Control: Install Package`,
-then from the package control list, type / select `Solarized Color Scheme (TextMate)`
-
-Note that packages are auto-updating, so as new modifications are made they will automatically be installed.
-
-[Sublime]: http://www.sublimetext.com/dev
-[SublimePackage]: http://wbond.net/sublime_packages/package_control/installation
-
-
-Contribute
----------
-
-The goal is to get as-close-as-possible to the rendering of the same file in Vim. If you would like to help, here's how to get involved.
-
-
-1. Fork this repo and checkout your own copy.
-2. Download the [sample documents](https://github.com/altercation/solarized/tree/master/utils/tests).
-3. Checkout this guide to [TextMate theme development](http://manual.macromates.com/en/themes).
-4. Check the [issues](https://github.com/deplorableword/textmate-solarized/issues) to see what needs working on.
-
-Contributors
----------
-* [deplorableword](https://github.com/deplorableword)
-* [fentie](https://github.com/fentie)
-* [bmthykm](https://github.com/bmthykm)
-* [Zegnat](https://github.com/zegnat)
-* [markstory](https://github.com/markstory)
-* [rays](https://github.com/rays)
-* [joshcarr](https://github.com/joshcarr)
-* [thatRD](https://github.com/thatRD)
-* [oesmith](https://github.com/oesmith)
-* [evanmoran](https://github.com/evanmoran)
-* [iristyle](https://github.com/iristyle)
-* [braver](https://github.com/braver)
-
-License
--------
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Solarized Color Scheme/Solarized (dark).tmTheme b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Solarized Color Scheme/Solarized (dark).tmTheme
deleted file mode 100644
index 5e88a48..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Solarized Color Scheme/Solarized (dark).tmTheme
+++ /dev/null
@@ -1,2036 +0,0 @@
-
-
-
-
- name
- Solarized (dark)
- settings
-
-
- settings
-
- background
- #002B36
- caret
- #839496
- foreground
- #839496
- invisibles
- #073642
- lineHighlight
- #073642
- selection
- #EEE8D5
-
-
-
- name
- Comment
- scope
- comment
- settings
-
- fontStyle
-
- foreground
- #586E75
-
-
-
- name
- String
- scope
- string
- settings
-
- foreground
- #2AA198
-
-
-
- name
- StringNumber
- scope
- string
- settings
-
- foreground
- #586E75
-
-
-
- name
- Regexp
- scope
- string.regexp
- settings
-
- foreground
- #DC322F
-
-
-
- name
- Number
- scope
- constant.numeric
- settings
-
- foreground
- #D33682
-
-
-
- name
- Variable
- scope
- variable.language, variable.other
- settings
-
- foreground
- #268BD2
-
-
-
- name
- Keyword
- scope
- keyword
- settings
-
- foreground
- #859900
-
-
-
- name
- Storage
- scope
- storage
- settings
-
- fontStyle
-
- foreground
- #859900
-
-
-
- name
- Class name
- scope
- entity.name.class, entity.name.type.class
- settings
-
- foreground
- #268BD2
-
-
-
- name
- Function name
- scope
- entity.name.function
- settings
-
- foreground
- #268BD2
-
-
-
- name
- Variable start
- scope
- punctuation.definition.variable
- settings
-
- foreground
- #859900
-
-
-
- name
- Embedded code markers
- scope
- punctuation.section.embedded.begin, punctuation.section.embedded.end
- settings
-
- foreground
- #DC322F
-
-
-
- name
- Built-in constant
- scope
- constant.language, meta.preprocessor
- settings
-
- foreground
- #B58900
-
-
-
- name
- Support.construct
- scope
- support.function.construct, keyword.other.new
- settings
-
- foreground
- #DC322F
-
-
-
- name
- User-defined constant
- scope
- constant.character, constant.other
- settings
-
- foreground
- #CB4B16
-
-
-
- name
- Inherited class
- scope
- entity.other.inherited-class
- settings
-
-
-
- name
- Function argument
- scope
- variable.parameter
- settings
-
-
-
- name
- Tag name
- scope
- entity.name.tag
- settings
-
- fontStyle
- bold
- foreground
- #268BD2
-
-
-
- name
- Tag start/end
- scope
- punctuation.definition.tag.html, punctuation.definition.tag.begin, punctuation.definition.tag.end
- settings
-
- foreground
- #586E75
-
-
-
- name
- Tag attribute
- scope
- entity.other.attribute-name
- settings
-
- foreground
- #93A1A1
-
-
-
- name
- Library function
- scope
- support.function
- settings
-
- foreground
- #268BD2
-
-
-
- name
- Continuation
- scope
- punctuation.separator.continuation
- settings
-
- foreground
- #DC322F
-
-
-
- name
- Library constant
- scope
- support.constant
- settings
-
-
-
- name
- Library class/type
- scope
- support.type, support.class
- settings
-
- foreground
- #859900
-
-
-
- name
- Library Exception
- scope
- support.type.exception
- settings
-
- foreground
- #CB4B16
-
-
-
- name
- Special
- scope
- keyword.other.special-method
- settings
-
- foreground
- #CB4B16
-
-
-
- name
- Library variable
- scope
- support.other.variable
- settings
-
-
-
- name
- Invalid
- scope
- invalid
- settings
-
-
-
- name
- Quoted String
- scope
- string.quoted.double, string.quoted.single
- settings
-
- foreground
- #2AA198
-
-
-
- name
- Quotes
- scope
- punctuation.definition.string.begin, punctuation.definition.string.end
- settings
-
- foreground
- #DC322F
-
-
-
- name
- CSS: Property name (body)
- scope
- entity.name.tag.css, support.type.property-name.css, meta.property-name.css, support.type.property-name.scss
- settings
-
- fontStyle
-
- foreground
- #839496
-
-
-
- name
- CSS: @ rules (purple)
- scope
- punctuation.definition.keyword.scss, punctuation.definition.keyword.css, keyword.control.at-rule.charset.css, keyword.control.at-rule.charset.scss, keyword.control.each.css, keyword.control.each.scss, keyword.control.else.css, keyword.control.else.scss, keyword.control.at-rule.import.css, keyword.control.at-rule.import.scss, keyword.control.at-rule.fontface.css, keyword.control.at-rule.fontface.scss, keyword.control.for.css, keyword.control.for.scss, keyword.control.at-rule.function.css, keyword.control.at-rule.function.scss, keyword.control.if.css, keyword.control.if.scss, keyword.control.at-rule.include.scss, keyword.control.at-rule.media.css, keyword.control.at-rule.media.scss, keyword.control.at-rule.font-face.css, keyword.control.at-rule.font-face.scss, meta.at-rule.import.css, variable.other.less, variable.declaration.less, variable.interpolation.less, meta.at-rule.media.scss
- settings
-
- foreground
- #6C71c4
-
-
-
- name
- CSS: Numeric Value (blue)
- scope
- constant.numeric.css, keyword.other.unit.css, keyword.unit.css, constant.other.color.rgb-value.css, constant.numeric.scss, constant.other.color.rgb-value.scss, keyword.other.unit.scss, punctuation.definition.constant.scss, punctuation.definition.constant.css, constant.other.rgb-value.css
- settings
-
- fontStyle
-
- foreground
- #268BD2
-
-
-
- name
- CSS: String, value and constants (azure)
- scope
- variable.parameter.url.scss, meta.property-value.css, meta.property-value.scss, support.constant.property-value.scss, support.constant.font-name.scss, string.quoted.single.css, string.quoted.double.css, constant.character.escaped.css, string.quoted.variable.parameter.url, punctuation.definition.string.begin.scss, punctuation.definition.string.begin.css, punctuation.definition.string.end.scss, punctuation.definition.string.end.css, support.constant.property-value.css
- settings
-
- fontStyle
-
- foreground
- #2AA198
-
-
-
- name
- CSS: !Important (red)
- scope
- keyword.other.important.css
- settings
-
- foreground
- #DC322F
-
-
-
- name
- CSS: Standard color value (orange)
- scope
- support.constant.color, invalid.deprecated.color.w3c-non-standard-color-name.scss
- settings
-
- foreground
- #CB4b16
-
-
-
- name
- CSS: : , () (body)
- scope
- punctuation.terminator.rule.css, punctuation.section.function.css, punctuation.section.function.scss, punctuation.separator.key-value.csspunctuation.scss, punctuation.css, keyword.operator.less, entity.name.tag.wildcard.scss, entity.name.tag.wildcard.css, entity.name.tag.reference.scss
- settings
-
- fontStyle
-
- foreground
- #657B83
-
-
-
- name
- CSS: Selector > [] and non-spec tags (body)
- scope
- meta.selector.css
- settings
-
- fontStyle
-
- foreground
- #657B83
-
-
-
- name
- CSS: Tag (green)
- scope
- entity.name.tag.css, entity.name.tag.scss
- settings
-
- fontStyle
-
- foreground
- #859900
-
-
-
- name
- CSS .class (yellow)
- scope
- entity.other.attribute-name.class.css, entity.other.less.mixin
- settings
-
- fontStyle
-
- foreground
- #B58900
-
-
-
- name
- CSS: #id (yellow)
- scope
- source.css entity.other.attribute-name.id
- settings
-
- fontStyle
- bold
- foreground
- #B58900
-
-
-
- name
- CSS :pseudo (orange)
- scope
- entity.other.attribute-name.pseudo-element.css, entity.other.attribute-name.pseudo-class.css
- settings
-
- fontStyle
-
- foreground
- #CB4B16
-
-
-
- name
- SCSS: Variables (pink)
- scope
- variable, variable.scss
- settings
-
- foreground
- #D33682
-
-
-
- name
- JS: Function Name
- scope
- meta.function.js, entity.name.function.js, support.function.dom.js
- settings
-
- foreground
- #B58900
-
-
-
- name
- JS: Source
- scope
- text.html.basic source.js.embedded.html
- settings
-
- fontStyle
-
- foreground
- #B58900
-
-
-
- name
- JS: Function
- scope
- storage.type.function.js
- settings
-
- foreground
- #268BD2
-
-
-
- name
- JS: Numeric Constant
- scope
- constant.numeric.js
- settings
-
- foreground
- #2AA198
-
-
-
- name
- JS: []
- scope
- meta.brace.square.js
- settings
-
- foreground
- #268BD2
-
-
-
- name
- JS: Storage Type
- scope
- storage.type.js
- settings
-
- foreground
- #268BD2
-
-
-
- name
- ()
- scope
- meta.brace.round, punctuation.definition.parameters.begin.js, punctuation.definition.parameters.end.js
- settings
-
- foreground
- #93A1A1
-
-
-
- name
- {}
- scope
- meta.brace.curly.js
- settings
-
- foreground
- #839496
-
-
-
- name
- HTML: Doctype
- scope
- entity.name.tag.doctype.html, meta.tag.sgml.html, string.quoted.double.doctype.identifiers-and-DTDs.html
- settings
-
- fontStyle
- italic
- foreground
- #839496
-
-
-
- name
- HTML: Comment Block
- scope
- comment.block.html
- settings
-
- fontStyle
- italic
- foreground
- #839496
-
-
-
- name
- HTML: Script
- scope
- entity.name.tag.script.html
- settings
-
- fontStyle
- italic
-
-
-
- name
- HTML: Style
- scope
- source.css.embedded.html string.quoted.double.html
- settings
-
- fontStyle
-
- foreground
- #2AA198
-
-
-
- name
- HTML: Text
- scope
- text.html.ruby
- settings
-
- fontStyle
- bold
- foreground
- #839496
-
-
-
- name
- HTML: =
- scope
- text.html.basic meta.tag.other.html, text.html.basic meta.tag.any.html, text.html.basic meta.tag.block.any, text.html.basic meta.tag.inline.any, text.html.basic meta.tag.structure.any.html, text.html.basic source.js.embedded.html, punctuation.separator.key-value.html
- settings
-
- fontStyle
-
- foreground
- #657B83
-
-
-
- name
- HTML: something=
- scope
- text.html.basic entity.other.attribute-name.html
- settings
-
- foreground
- #657B83
-
-
-
- name
- HTML: "
- scope
- text.html.basic meta.tag.structure.any.html punctuation.definition.string.begin.html, punctuation.definition.string.begin.html, punctuation.definition.string.end.html
- settings
-
- fontStyle
-
- foreground
- #2AA198
-
-
-
- name
- HTML: <tag>
- scope
- entity.name.tag.block.any.html
- settings
-
- fontStyle
- bold
- foreground
- #268BD2
-
-
-
- name
- HTML: style
- scope
- source.css.embedded.html entity.name.tag.style.html
- settings
-
- fontStyle
- italic
-
-
-
- name
- HTML: <style>
- scope
- entity.name.tag.style.html
- settings
-
- fontStyle
-
-
-
-
- name
- HTML: {}
- scope
- text.html.basic, punctuation.section.property-list.css
- settings
-
- fontStyle
-
-
-
-
- name
- HTML: Embeddable
- scope
- source.css.embedded.html, comment.block.html
- settings
-
- fontStyle
- italic
- foreground
- #839496
-
-
-
- name
- Ruby: Variable definition
- scope
- punctuation.definition.variable.ruby
- settings
-
- fontStyle
-
- foreground
- #268BD2
-
-
-
- name
- Ruby: Function Name
- scope
- meta.function.method.with-arguments.ruby
- settings
-
- foreground
- #657B83
-
-
-
- name
- Ruby: Variable
- scope
- variable.language.ruby
- settings
-
- foreground
- #2AA198
-
-
-
- name
- Ruby: Function
- scope
- entity.name.function.ruby
- settings
-
- foreground
- #268BD2
-
-
-
- name
- Ruby: Keyword Control
- scope
- keyword.control.ruby, keyword.control.def.ruby
- settings
-
- fontStyle
- bold
- foreground
- #859900
-
-
-
- name
- Ruby: Class
- scope
- keyword.control.class.ruby, meta.class.ruby
- settings
-
- foreground
- #859900
-
-
-
- name
- Ruby: Class Name
- scope
- entity.name.type.class.ruby
- settings
-
- fontStyle
-
- foreground
- #B58900
-
-
-
- name
- Ruby: Keyword
- scope
- keyword.control.ruby
- settings
-
- fontStyle
-
- foreground
- #859900
-
-
-
- name
- Ruby: Support Class
- scope
- support.class.ruby
- settings
-
- fontStyle
-
- foreground
- #B58900
-
-
-
- name
- Ruby: Special Method
- scope
- keyword.other.special-method.ruby
- settings
-
- foreground
- #859900
-
-
-
- name
- Ruby: Constant
- scope
- constant.language.ruby, constant.numeric.ruby
- settings
-
- foreground
- #2AA198
-
-
-
- name
- Ruby: Constant Other
- scope
- variable.other.constant.ruby
- settings
-
- fontStyle
-
- foreground
- #B58900
-
-
-
- name
- Ruby: :symbol
- scope
- constant.other.symbol.ruby
- settings
-
- fontStyle
-
- foreground
- #2AA198
-
-
-
- name
- Ruby: Punctuation Section ''
- scope
- punctuation.section.embedded.ruby, punctuation.definition.string.begin.ruby, punctuation.definition.string.end.ruby
- settings
-
- foreground
- #DC322F
-
-
-
- name
- Ruby: Special Method
- scope
- keyword.other.special-method.ruby
- settings
-
- foreground
- #CB4B16
-
-
-
- name
- PHP: Include
- scope
- keyword.control.import.include.php
- settings
-
- foreground
- #CB4B16
-
-
-
- name
- Ruby: erb =
- scope
- text.html.ruby meta.tag.inline.any.html
- settings
-
- fontStyle
-
- foreground
- #839496
-
-
-
- name
- Ruby: erb ""
- scope
- text.html.ruby punctuation.definition.string.begin, text.html.ruby punctuation.definition.string.end
- settings
-
- fontStyle
-
- foreground
- #2AA198
-
-
-
- name
- PHP: Quoted Single
- scope
- punctuation.definition.string.begin, punctuation.definition.string.end
- settings
-
- foreground
- #839496
-
-
-
- name
- PHP: Class Names
- scope
- support.class.php
- settings
-
- foreground
- #93A1A1
-
-
-
- name
- PHP: []
- scope
- keyword.operator.index-start.php, keyword.operator.index-end.php
- settings
-
- foreground
- #DC322F
-
-
-
- name
- PHP: Array
- scope
- meta.array.php
- settings
-
- foreground
- #586E75
-
-
-
- name
- PHP: Array()
- scope
- meta.array.php support.function.construct.php, meta.array.empty.php support.function.construct.php
- settings
-
- fontStyle
-
- foreground
- #B58900
-
-
-
- name
- PHP: Array Construct
- scope
- support.function.construct.php
- settings
-
- foreground
- #B58900
-
-
-
- name
- PHP: Array Begin
- scope
- punctuation.definition.array.begin, punctuation.definition.array.end
- settings
-
- foreground
- #DC322F
-
-
-
- name
- PHP: Numeric Constant
- scope
- constant.numeric.php
- settings
-
- foreground
- #2AA198
-
-
-
- name
- PHP: New
- scope
- keyword.other.new.php
- settings
-
- foreground
- #CB4B16
-
-
-
- name
- PHP: ::
- scope
- keyword.operator.class
- settings
-
- fontStyle
-
- foreground
- #93A1A1
-
-
-
- name
- PHP: Other Property
- scope
- variable.other.property.php
- settings
-
- foreground
- #839496
-
-
-
- name
- PHP: Class
- scope
- storage.modifier.extends.php, storage.type.class.php, keyword.operator.class.php
- settings
-
- foreground
- #B58900
-
-
-
- name
- PHP: Semicolon
- scope
- punctuation.terminator.expression.php
- settings
-
- foreground
- #839496
-
-
-
- name
- PHP: Inherited Class
- scope
- meta.other.inherited-class.php
- settings
-
- fontStyle
-
- foreground
- #586E75
-
-
-
- name
- PHP: Storage Type
- scope
- storage.type.php
- settings
-
- foreground
- #859900
-
-
-
- name
- PHP: Function
- scope
- entity.name.function.php
- settings
-
- foreground
- #839496
-
-
-
- name
- PHP: Function Construct
- scope
- support.function.construct.php
- settings
-
- foreground
- #859900
-
-
-
- name
- PHP: Function Call
- scope
- entity.name.type.class.php, meta.function-call.php, meta.function-call.static.php, meta.function-call.object.php
- settings
-
- foreground
- #839496
-
-
-
- name
- PHP: Comment
- scope
- keyword.other.phpdoc
- settings
-
- fontStyle
-
- foreground
- #839496
-
-
-
- name
- PHP: Source Emebedded
- scope
- source.php.embedded.block.html
- settings
-
- foreground
- #CB4B16
-
-
-
- name
- PHP: Storage Type Function
- scope
- storage.type.function.php
- settings
-
- foreground
- #CB4B16
-
-
-
- name
- C: constant
- scope
- constant.numeric.c
- settings
-
- fontStyle
-
- foreground
- #2AA198
-
-
-
- name
- C: Meta Preprocessor
- scope
- meta.preprocessor.c.include, meta.preprocessor.macro.c
- settings
-
- fontStyle
-
- foreground
- #CB4B16
-
-
-
- name
- C: Keyword
- scope
- keyword.control.import.define.c, keyword.control.import.include.c
- settings
-
- fontStyle
-
- foreground
- #CB4B16
-
-
-
- name
- C: Function Preprocessor
- scope
- entity.name.function.preprocessor.c
- settings
-
- fontStyle
-
- foreground
- #CB4B16
-
-
-
- name
- C: include <something.c>
- scope
- meta.preprocessor.c.include string.quoted.other.lt-gt.include.c, meta.preprocessor.c.include punctuation.definition.string.begin.c, meta.preprocessor.c.include punctuation.definition.string.end.c
- settings
-
- fontStyle
-
- foreground
- #2AA198
-
-
-
- name
- C: Function
- scope
- support.function.C99.c, support.function.any-method.c, entity.name.function.c
- settings
-
- fontStyle
-
- foreground
- #93A1A1
-
-
-
- name
- C: "
- scope
- punctuation.definition.string.begin.c, punctuation.definition.string.end.c
- settings
-
- fontStyle
-
- foreground
- #2AA198
-
-
-
- name
- C: Storage Type
- scope
- storage.type.c
- settings
-
- fontStyle
-
- foreground
- #B58900
-
-
-
- name
- diff: header
- scope
- meta.diff, meta.diff.header
- settings
-
- background
- #B58900
- fontStyle
- italic
- foreground
- #EEE8D5
-
-
-
- name
- diff: deleted
- scope
- markup.deleted
- settings
-
- background
- #EEE8D5
- fontStyle
-
- foreground
- #DC322F
-
-
-
- name
- diff: changed
- scope
- markup.changed
- settings
-
- background
- #EEE8D5
- fontStyle
-
- foreground
- #CB4B16
-
-
-
- name
- diff: inserted
- scope
- markup.inserted
- settings
-
- background
- #EEE8D5
- foreground
- #2AA198
-
-
-
- name
- reST raw
- scope
- text.restructuredtext markup.raw
- settings
-
- foreground
- #2AA198
-
-
-
- name
- Other: Removal
- scope
- other.package.exclude, other.remove
- settings
-
- fontStyle
-
- foreground
- #DC322F
-
-
-
- name
- Other: Add
- scope
- other.add
- settings
-
- foreground
- #2AA198
-
-
-
- name
- Tex: {}
- scope
- punctuation.section.group.tex , punctuation.definition.arguments.begin.latex, punctuation.definition.arguments.end.latex, punctuation.definition.arguments.latex
- settings
-
- fontStyle
-
- foreground
- #DC322F
-
-
-
- name
- Tex: {text}
- scope
- meta.group.braces.tex
- settings
-
- fontStyle
-
- foreground
- #B58900
-
-
-
- name
- Tex: Other Math
- scope
- string.other.math.tex
- settings
-
- fontStyle
-
- foreground
- #B58900
-
-
-
- name
- Tex: {var}
- scope
- variable.parameter.function.latex
- settings
-
- fontStyle
-
- foreground
- #CB4B16
-
-
-
- name
- Tex: Math \\
- scope
- punctuation.definition.constant.math.tex
- settings
-
- fontStyle
-
- foreground
- #DC322F
-
-
-
- name
- Tex: Constant Math
- scope
- text.tex.latex constant.other.math.tex, constant.other.general.math.tex, constant.other.general.math.tex, constant.character.math.tex
- settings
-
- fontStyle
-
- foreground
- #2AA198
-
-
-
- name
- Tex: Other Math String
- scope
- string.other.math.tex
- settings
-
- fontStyle
-
- foreground
- #B58900
-
-
-
- name
- Tex: $
- scope
- punctuation.definition.string.begin.tex, punctuation.definition.string.end.tex
- settings
-
- fontStyle
-
- foreground
- #DC322F
-
-
-
- name
- Tex: \label
- scope
- keyword.control.label.latex, text.tex.latex constant.other.general.math.tex
- settings
-
- fontStyle
-
- foreground
- #2AA198
-
-
-
- name
- Tex: \label { }
- scope
- variable.parameter.definition.label.latex
- settings
-
- fontStyle
-
- foreground
- #DC322F
-
-
-
- name
- Tex: Function
- scope
- support.function.be.latex
- settings
-
- fontStyle
-
- foreground
- #859900
-
-
-
- name
- Tex: Support Function Section
- scope
- support.function.section.latex
- settings
-
- fontStyle
-
- foreground
- #CB4B16
-
-
-
- name
- Tex: Support Function
- scope
- support.function.general.tex
- settings
-
- fontStyle
-
- foreground
- #2AA198
-
-
-
- name
- Tex: Comment
- scope
- punctuation.definition.comment.tex, comment.line.percentage.tex
- settings
-
- fontStyle
- italic
-
-
-
- name
- Tex: Reference Label
- scope
- keyword.control.ref.latex
- settings
-
- fontStyle
-
- foreground
- #2AA198
-
-
-
- name
- Python: storage
- scope
- storage.type.class.python, storage.type.function.python, storage.modifier.global.python
- settings
-
- fontStyle
-
- foreground
- #859900
-
-
-
- name
- Python: import
- scope
- keyword.control.import.python, keyword.control.import.from.python
- settings
-
- foreground
- #CB4B16
-
-
-
- name
- Python: Support.exception
- scope
- support.type.exception.python
- settings
-
- foreground
- #B58900
-
-
-
- name
- Shell: builtin
- scope
- support.function.builtin.shell
- settings
-
- foreground
- #859900
-
-
-
- name
- Shell: variable
- scope
- variable.other.normal.shell
- settings
-
- foreground
- #CB4B16
-
-
-
- name
- Shell: DOT_FILES
- scope
- source.shell
- settings
-
- fontStyle
-
- foreground
- #268BD2
-
-
-
- name
- Shell: meta scope in loop
- scope
- meta.scope.for-in-loop.shell, variable.other.loop.shell
- settings
-
- fontStyle
-
- foreground
- #586E75
-
-
-
- name
- Shell: ""
- scope
- punctuation.definition.string.end.shell, punctuation.definition.string.begin.shell
- settings
-
- fontStyle
-
- foreground
- #859900
-
-
-
- name
- Shell: Meta Block
- scope
- meta.scope.case-block.shell, meta.scope.case-body.shell
- settings
-
- fontStyle
-
- foreground
- #586E75
-
-
-
- name
- Shell: []
- scope
- punctuation.definition.logical-expression.shell
- settings
-
- fontStyle
-
- foreground
- #DC322F
-
-
-
- name
- Shell: Comment
- scope
- comment.line.number-sign.shell
- settings
-
- fontStyle
- italic
-
-
-
- name
- Java: import
- scope
- keyword.other.import.java
- settings
-
- fontStyle
-
- foreground
- #CB4B16
-
-
-
- name
- Java: meta-import
- scope
- storage.modifier.import.java
- settings
-
- fontStyle
-
- foreground
- #586E75
-
-
-
- name
- Java: Class
- scope
- meta.class.java storage.modifier.java
- settings
-
- fontStyle
-
- foreground
- #B58900
-
-
-
- name
- Java: /* comment */
- scope
- source.java comment.block
- settings
-
- fontStyle
-
- foreground
- #586E75
-
-
-
- name
- Java: /* @param */
- scope
- comment.block meta.documentation.tag.param.javadoc keyword.other.documentation.param.javadoc
- settings
-
- fontStyle
-
- foreground
- #586E75
-
-
-
- name
- Perl: variables
- scope
- punctuation.definition.variable.perl, variable.other.readwrite.global.perl, variable.other.predefined.perl, keyword.operator.comparison.perl
- settings
-
- foreground
- #B58900
-
-
-
- name
- Perl: functions
- scope
- support.function.perl
- settings
-
- foreground
- #859900
-
-
-
- name
- Perl: comments
- scope
- comment.line.number-sign.perl
- settings
-
- fontStyle
- italic
- foreground
- #586E75
-
-
-
- name
- Perl: quotes
- scope
- punctuation.definition.string.begin.perl, punctuation.definition.string.end.perl
- settings
-
- foreground
- #2AA198
-
-
-
- name
- Perl: \char
- scope
- constant.character.escape.perl
- settings
-
- foreground
- #DC322F
-
-
-
- Name
- Markdown punctuation
- scope
- markup.list, text.html.markdown punctuation.definition, meta.separator.markdown
- settings
-
- foreground
- #CB4b16
-
-
-
- Name
- Markdown heading
- scope
- markup.heading
- settings
-
- foreground
- #268BD2
-
-
-
- Name
- Markdown text inside some block element
- scope
- markup.quote, meta.paragraph.list
- settings
-
- foreground
- #2AA198
-
-
-
- Name
- Markdown em
- scope
- markup.italic
- settings
-
- fontStyle
- italic
-
-
-
- Name
- Markdown strong
- scope
- markup.bold
- settings
-
- fontStyle
- bold
-
-
-
- Name
- Markdown reference
- scope
- markup.underline.link.markdown, meta.link.inline punctuation.definition.metadata, meta.link.reference.markdown punctuation.definition.constant, meta.link.reference.markdown constant.other.reference
- settings
-
- foreground
- #B58900
-
-
-
- Name
- Markdown linebreak
- scope
- meta.paragraph.markdown meta.dummy.line-break
- settings
-
- background
- #6C71c4
-
-
-
- name
- SublimeLinter Annotations
- scope
- sublimelinter.notes
- settings
-
- background
- #eee8d5
- foreground
- #eee8d5
-
-
-
- name
- SublimeLinter Error Outline
- scope
- sublimelinter.outline.illegal
- settings
-
- background
- #93a1a1
- foreground
- #93a1a1
-
-
-
- name
- SublimeLinter Error Underline
- scope
- sublimelinter.underline.illegal
- settings
-
- background
- #dc322f
-
-
-
- name
- SublimeLinter Warning Outline
- scope
- sublimelinter.outline.warning
- settings
-
- background
- #839496
- foreground
- #839496
-
-
-
- name
- SublimeLinter Warning Underline
- scope
- sublimelinter.underline.warning
- settings
-
- background
- #b58900
-
-
-
- name
- SublimeLinter Violation Outline
- scope
- sublimelinter.outline.violation
- settings
-
- background
- #657b83
- foreground
- #657b83
-
-
-
- name
- SublimeLinter Violation Underline
- scope
- sublimelinter.underline.violation
- settings
-
- background
- #cb4b16
-
-
-
- name
- SublimeBracketHighlighter
- scope
- brackethighlighter.all
- settings
-
- background
- #002b36
- foreground
- #cb4b16
-
-
-
- uuid
- A4299D9B-1DE5-4BC4-87F6-A757E71B1597
-
-
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Solarized Color Scheme/Solarized (light).tmTheme b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Solarized Color Scheme/Solarized (light).tmTheme
deleted file mode 100644
index 3123aa1..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Solarized Color Scheme/Solarized (light).tmTheme
+++ /dev/null
@@ -1,2036 +0,0 @@
-
-
-
-
- name
- Solarized (light)
- settings
-
-
- settings
-
- background
- #FDF6E3
- caret
- #657B83
- foreground
- #657B83
- invisibles
- #EEE8D5
- lineHighlight
- #EEE8D5
- selection
- #073642
-
-
-
- name
- Comment
- scope
- comment
- settings
-
- fontStyle
-
- foreground
- #93A1A1
-
-
-
- name
- String
- scope
- string
- settings
-
- foreground
- #2AA198
-
-
-
- name
- StringNumber
- scope
- string
- settings
-
- foreground
- #586E75
-
-
-
- name
- Regexp
- scope
- string.regexp
- settings
-
- foreground
- #DC322F
-
-
-
- name
- Number
- scope
- constant.numeric
- settings
-
- foreground
- #D33682
-
-
-
- name
- Variable
- scope
- variable.language, variable.other
- settings
-
- foreground
- #268BD2
-
-
-
- name
- Keyword
- scope
- keyword
- settings
-
- foreground
- #859900
-
-
-
- name
- Storage
- scope
- storage
- settings
-
- fontStyle
-
- foreground
- #859900
-
-
-
- name
- Class name
- scope
- entity.name.class, entity.name.type.class
- settings
-
- foreground
- #268BD2
-
-
-
- name
- Function name
- scope
- entity.name.function
- settings
-
- foreground
- #268BD2
-
-
-
- name
- Variable start
- scope
- punctuation.definition.variable
- settings
-
- foreground
- #859900
-
-
-
- name
- Embedded code markers
- scope
- punctuation.section.embedded.begin, punctuation.section.embedded.end
- settings
-
- foreground
- #DC322F
-
-
-
- name
- Built-in constant
- scope
- constant.language, meta.preprocessor
- settings
-
- foreground
- #B58900
-
-
-
- name
- Support.construct
- scope
- support.function.construct, keyword.other.new
- settings
-
- foreground
- #DC322F
-
-
-
- name
- User-defined constant
- scope
- constant.character, constant.other
- settings
-
- foreground
- #CB4B16
-
-
-
- name
- Inherited class
- scope
- entity.other.inherited-class
- settings
-
-
-
- name
- Function argument
- scope
- variable.parameter
- settings
-
-
-
- name
- Tag name
- scope
- entity.name.tag
- settings
-
- fontStyle
- bold
- foreground
- #268BD2
-
-
-
- name
- Tag start/end
- scope
- punctuation.definition.tag.html, punctuation.definition.tag.begin, punctuation.definition.tag.end
- settings
-
- foreground
- #93A1A1
-
-
-
- name
- Tag attribute
- scope
- entity.other.attribute-name
- settings
-
- foreground
- #93A1A1
-
-
-
- name
- Library function
- scope
- support.function
- settings
-
- foreground
- #268BD2
-
-
-
- name
- Continuation
- scope
- punctuation.separator.continuation
- settings
-
- foreground
- #DC322F
-
-
-
- name
- Library constant
- scope
- support.constant
- settings
-
-
-
- name
- Library class/type
- scope
- support.type, support.class
- settings
-
- foreground
- #859900
-
-
-
- name
- Library Exception
- scope
- support.type.exception
- settings
-
- foreground
- #CB4B16
-
-
-
- name
- Special
- scope
- keyword.other.special-method
- settings
-
- foreground
- #CB4B16
-
-
-
- name
- Library variable
- scope
- support.other.variable
- settings
-
-
-
- name
- Invalid
- scope
- invalid
- settings
-
-
-
- name
- Quoted String
- scope
- string.quoted.double, string.quoted.single
- settings
-
- foreground
- #2AA198
-
-
-
- name
- Quotes
- scope
- punctuation.definition.string.begin, punctuation.definition.string.end
- settings
-
- foreground
- #DC322F
-
-
-
- name
- CSS: Property name (body)
- scope
- entity.name.tag.css, support.type.property-name.css, meta.property-name.css, support.type.property-name.scss
- settings
-
- fontStyle
-
- foreground
- #657B83
-
-
-
- name
- CSS: @ rules (purple)
- scope
- punctuation.definition.keyword.scss, punctuation.definition.keyword.css, keyword.control.at-rule.charset.css, keyword.control.at-rule.charset.scss, keyword.control.each.css, keyword.control.each.scss, keyword.control.else.css, keyword.control.else.scss, keyword.control.at-rule.import.css, keyword.control.at-rule.import.scss, keyword.control.at-rule.fontface.css, keyword.control.at-rule.fontface.scss, keyword.control.for.css, keyword.control.for.scss, keyword.control.at-rule.function.css, keyword.control.at-rule.function.scss, keyword.control.if.css, keyword.control.if.scss, keyword.control.at-rule.include.scss, keyword.control.at-rule.media.css, keyword.control.at-rule.media.scss, keyword.control.at-rule.font-face.css, keyword.control.at-rule.font-face.scss, meta.at-rule.import.css, variable.other.less, variable.declaration.less, variable.interpolation.less, meta.at-rule.media.scss
- settings
-
- foreground
- #6C71c4
-
-
-
- name
- CSS: Numeric Value (blue)
- scope
- constant.numeric.css, keyword.other.unit.css, keyword.unit.css, constant.other.color.rgb-value.css, constant.numeric.scss, constant.other.color.rgb-value.scss, keyword.other.unit.scss, punctuation.definition.constant.scss, punctuation.definition.constant.css, constant.other.rgb-value.css
- settings
-
- fontStyle
-
- foreground
- #268BD2
-
-
-
- name
- CSS: String, value and constants (azure)
- scope
- variable.parameter.url.scss, meta.property-value.css, meta.property-value.scss, support.constant.property-value.scss, support.constant.font-name.scss, string.quoted.single.css, string.quoted.double.css, constant.character.escaped.css, string.quoted.variable.parameter.url, punctuation.definition.string.begin.scss, punctuation.definition.string.begin.css, punctuation.definition.string.end.scss, punctuation.definition.string.end.css, support.constant.property-value.css
- settings
-
- fontStyle
-
- foreground
- #2AA198
-
-
-
- name
- CSS: !Important (red)
- scope
- keyword.other.important.css
- settings
-
- foreground
- #DC322F
-
-
-
- name
- CSS: Standard color value (orange)
- scope
- support.constant.color, invalid.deprecated.color.w3c-non-standard-color-name.scss
- settings
-
- foreground
- #CB4b16
-
-
-
- name
- CSS: : , () (body)
- scope
- punctuation.terminator.rule.css, punctuation.section.function.css, punctuation.section.function.scss, punctuation.separator.key-value.csspunctuation.scss, punctuation.css, keyword.operator.less, entity.name.tag.wildcard.scss, entity.name.tag.wildcard.css, entity.name.tag.reference.scss
- settings
-
- fontStyle
-
- foreground
- #657B83
-
-
-
- name
- CSS: Selector > [] and non-spec tags (body)
- scope
- meta.selector.css
- settings
-
- fontStyle
-
- foreground
- #657B83
-
-
-
- name
- CSS: Tag (green)
- scope
- entity.name.tag.css, entity.name.tag.scss
- settings
-
- fontStyle
-
- foreground
- #859900
-
-
-
- name
- CSS .class (yellow)
- scope
- entity.other.attribute-name.class.css, entity.other.less.mixin
- settings
-
- fontStyle
-
- foreground
- #B58900
-
-
-
- name
- CSS: #id (yellow)
- scope
- source.css entity.other.attribute-name.id
- settings
-
- fontStyle
- bold
- foreground
- #B58900
-
-
-
- name
- CSS :pseudo (orange)
- scope
- entity.other.attribute-name.pseudo-element.css, entity.other.attribute-name.pseudo-class.css
- settings
-
- fontStyle
-
- foreground
- #CB4B16
-
-
-
- name
- SCSS: Variables (pink)
- scope
- variable, variable.scss
- settings
-
- foreground
- #D33682
-
-
-
- name
- JS: Function Name
- scope
- meta.function.js, entity.name.function.js, support.function.dom.js
- settings
-
- foreground
- #B58900
-
-
-
- name
- JS: Source
- scope
- text.html.basic source.js.embedded.html
- settings
-
- fontStyle
-
- foreground
- #B58900
-
-
-
- name
- JS: Function
- scope
- storage.type.function.js
- settings
-
- foreground
- #268BD2
-
-
-
- name
- JS: Numeric Constant
- scope
- constant.numeric.js
- settings
-
- foreground
- #2AA198
-
-
-
- name
- JS: []
- scope
- meta.brace.square.js
- settings
-
- foreground
- #268BD2
-
-
-
- name
- JS: Storage Type
- scope
- storage.type.js
- settings
-
- foreground
- #268BD2
-
-
-
- name
- ()
- scope
- meta.brace.round, punctuation.definition.parameters.begin.js, punctuation.definition.parameters.end.js
- settings
-
- foreground
- #93A1A1
-
-
-
- name
- {}
- scope
- meta.brace.curly.js
- settings
-
- foreground
- #657B83
-
-
-
- name
- HTML: Doctype
- scope
- entity.name.tag.doctype.html, meta.tag.sgml.html, string.quoted.double.doctype.identifiers-and-DTDs.html
- settings
-
- fontStyle
- italic
- foreground
- #839496
-
-
-
- name
- HTML: Comment Block
- scope
- comment.block.html
- settings
-
- fontStyle
- italic
- foreground
- #839496
-
-
-
- name
- HTML: Script
- scope
- entity.name.tag.script.html
- settings
-
- fontStyle
- italic
-
-
-
- name
- HTML: Style
- scope
- source.css.embedded.html string.quoted.double.html
- settings
-
- fontStyle
-
- foreground
- #2AA198
-
-
-
- name
- HTML: Text
- scope
- text.html.ruby
- settings
-
- fontStyle
- bold
- foreground
- #657b83
-
-
-
- name
- HTML: =
- scope
- text.html.basic meta.tag.other.html, text.html.basic meta.tag.any.html, text.html.basic meta.tag.block.any, text.html.basic meta.tag.inline.any, text.html.basic meta.tag.structure.any.html, text.html.basic source.js.embedded.html, punctuation.separator.key-value.html
- settings
-
- fontStyle
-
- foreground
- #657B83
-
-
-
- name
- HTML: something=
- scope
- text.html.basic entity.other.attribute-name.html
- settings
-
- foreground
- #657B83
-
-
-
- name
- HTML: "
- scope
- text.html.basic meta.tag.structure.any.html punctuation.definition.string.begin.html, punctuation.definition.string.begin.html, punctuation.definition.string.end.html
- settings
-
- fontStyle
-
- foreground
- #2AA198
-
-
-
- name
- HTML: <tag>
- scope
- entity.name.tag.block.any.html
- settings
-
- fontStyle
- bold
- foreground
- #268BD2
-
-
-
- name
- HTML: style
- scope
- source.css.embedded.html entity.name.tag.style.html
- settings
-
- fontStyle
- italic
-
-
-
- name
- HTML: <style>
- scope
- entity.name.tag.style.html
- settings
-
- fontStyle
-
-
-
-
- name
- HTML: {}
- scope
- text.html.basic, punctuation.section.property-list.css
- settings
-
- fontStyle
-
-
-
-
- name
- HTML: Embeddable
- scope
- source.css.embedded.html, comment.block.html
- settings
-
- fontStyle
- italic
- foreground
- #839496
-
-
-
- name
- Ruby: Variable definition
- scope
- punctuation.definition.variable.ruby
- settings
-
- fontStyle
-
- foreground
- #268BD2
-
-
-
- name
- Ruby: Function Name
- scope
- meta.function.method.with-arguments.ruby
- settings
-
- foreground
- #657B83
-
-
-
- name
- Ruby: Variable
- scope
- variable.language.ruby
- settings
-
- foreground
- #2AA198
-
-
-
- name
- Ruby: Function
- scope
- entity.name.function.ruby
- settings
-
- foreground
- #268BD2
-
-
-
- name
- Ruby: Keyword Control
- scope
- keyword.control.ruby, keyword.control.def.ruby
- settings
-
- fontStyle
- bold
- foreground
- #859900
-
-
-
- name
- Ruby: Class
- scope
- keyword.control.class.ruby, meta.class.ruby
- settings
-
- foreground
- #859900
-
-
-
- name
- Ruby: Class Name
- scope
- entity.name.type.class.ruby
- settings
-
- fontStyle
-
- foreground
- #B58900
-
-
-
- name
- Ruby: Keyword
- scope
- keyword.control.ruby
- settings
-
- fontStyle
-
- foreground
- #859900
-
-
-
- name
- Ruby: Support Class
- scope
- support.class.ruby
- settings
-
- fontStyle
-
- foreground
- #B58900
-
-
-
- name
- Ruby: Special Method
- scope
- keyword.other.special-method.ruby
- settings
-
- foreground
- #859900
-
-
-
- name
- Ruby: Constant
- scope
- constant.language.ruby, constant.numeric.ruby
- settings
-
- foreground
- #2AA198
-
-
-
- name
- Ruby: Constant Other
- scope
- variable.other.constant.ruby
- settings
-
- fontStyle
-
- foreground
- #B58900
-
-
-
- name
- Ruby: :symbol
- scope
- constant.other.symbol.ruby
- settings
-
- fontStyle
-
- foreground
- #2AA198
-
-
-
- name
- Ruby: Punctuation Section ''
- scope
- punctuation.section.embedded.ruby, punctuation.definition.string.begin.ruby, punctuation.definition.string.end.ruby
- settings
-
- foreground
- #DC322F
-
-
-
- name
- Ruby: Special Method
- scope
- keyword.other.special-method.ruby
- settings
-
- foreground
- #CB4B16
-
-
-
- name
- PHP: Include
- scope
- keyword.control.import.include.php
- settings
-
- foreground
- #CB4B16
-
-
-
- name
- Ruby: erb =
- scope
- text.html.ruby meta.tag.inline.any.html
- settings
-
- fontStyle
-
- foreground
- #839496
-
-
-
- name
- Ruby: erb ""
- scope
- text.html.ruby punctuation.definition.string.begin, text.html.ruby punctuation.definition.string.end
- settings
-
- fontStyle
-
- foreground
- #2AA198
-
-
-
- name
- PHP: Quoted Single
- scope
- punctuation.definition.string.begin, punctuation.definition.string.end
- settings
-
- foreground
- #839496
-
-
-
- name
- PHP: Class Names
- scope
- support.class.php
- settings
-
- foreground
- #586E75
-
-
-
- name
- PHP: []
- scope
- keyword.operator.index-start.php, keyword.operator.index-end.php
- settings
-
- foreground
- #DC322F
-
-
-
- name
- PHP: Array
- scope
- meta.array.php
- settings
-
- foreground
- #586E75
-
-
-
- name
- PHP: Array()
- scope
- meta.array.php support.function.construct.php, meta.array.empty.php support.function.construct.php
- settings
-
- fontStyle
-
- foreground
- #B58900
-
-
-
- name
- PHP: Array Construct
- scope
- support.function.construct.php
- settings
-
- foreground
- #B58900
-
-
-
- name
- PHP: Array Begin
- scope
- punctuation.definition.array.begin, punctuation.definition.array.end
- settings
-
- foreground
- #DC322F
-
-
-
- name
- PHP: Numeric Constant
- scope
- constant.numeric.php
- settings
-
- foreground
- #2AA198
-
-
-
- name
- PHP: New
- scope
- keyword.other.new.php
- settings
-
- foreground
- #CB4B16
-
-
-
- name
- PHP: ::
- scope
- keyword.operator.class
- settings
-
- fontStyle
-
- foreground
- #586E75
-
-
-
- name
- PHP: Other Property
- scope
- variable.other.property.php
- settings
-
- foreground
- #839496
-
-
-
- name
- PHP: Class
- scope
- storage.modifier.extends.php, storage.type.class.php, keyword.operator.class.php
- settings
-
- foreground
- #B58900
-
-
-
- name
- PHP: Semicolon
- scope
- punctuation.terminator.expression.php
- settings
-
- foreground
- #657B83
-
-
-
- name
- PHP: Inherited Class
- scope
- meta.other.inherited-class.php
- settings
-
- fontStyle
-
- foreground
- #586E75
-
-
-
- name
- PHP: Storage Type
- scope
- storage.type.php
- settings
-
- foreground
- #859900
-
-
-
- name
- PHP: Function
- scope
- entity.name.function.php
- settings
-
- foreground
- #839496
-
-
-
- name
- PHP: Function Construct
- scope
- support.function.construct.php
- settings
-
- foreground
- #859900
-
-
-
- name
- PHP: Function Call
- scope
- entity.name.type.class.php, meta.function-call.php, meta.function-call.static.php, meta.function-call.object.php
- settings
-
- foreground
- #839496
-
-
-
- name
- PHP: Comment
- scope
- keyword.other.phpdoc
- settings
-
- fontStyle
-
- foreground
- #839496
-
-
-
- name
- PHP: Source Emebedded
- scope
- source.php.embedded.block.html
- settings
-
- foreground
- #CB4B16
-
-
-
- name
- PHP: Storage Type Function
- scope
- storage.type.function.php
- settings
-
- foreground
- #CB4B16
-
-
-
- name
- C: constant
- scope
- constant.numeric.c
- settings
-
- fontStyle
-
- foreground
- #2AA198
-
-
-
- name
- C: Meta Preprocessor
- scope
- meta.preprocessor.c.include, meta.preprocessor.macro.c
- settings
-
- fontStyle
-
- foreground
- #CB4B16
-
-
-
- name
- C: Keyword
- scope
- keyword.control.import.define.c, keyword.control.import.include.c
- settings
-
- fontStyle
-
- foreground
- #CB4B16
-
-
-
- name
- C: Function Preprocessor
- scope
- entity.name.function.preprocessor.c
- settings
-
- fontStyle
-
- foreground
- #CB4B16
-
-
-
- name
- C: include <something.c>
- scope
- meta.preprocessor.c.include string.quoted.other.lt-gt.include.c, meta.preprocessor.c.include punctuation.definition.string.begin.c, meta.preprocessor.c.include punctuation.definition.string.end.c
- settings
-
- fontStyle
-
- foreground
- #2AA198
-
-
-
- name
- C: Function
- scope
- support.function.C99.c, support.function.any-method.c, entity.name.function.c
- settings
-
- fontStyle
-
- foreground
- #586E75
-
-
-
- name
- C: "
- scope
- punctuation.definition.string.begin.c, punctuation.definition.string.end.c
- settings
-
- fontStyle
-
- foreground
- #2AA198
-
-
-
- name
- C: Storage Type
- scope
- storage.type.c
- settings
-
- fontStyle
-
- foreground
- #B58900
-
-
-
- name
- diff: header
- scope
- meta.diff, meta.diff.header
- settings
-
- background
- #B58900
- fontStyle
- italic
- foreground
- #EEE8D5
-
-
-
- name
- diff: deleted
- scope
- markup.deleted
- settings
-
- background
- #EEE8D5
- fontStyle
-
- foreground
- #DC322F
-
-
-
- name
- diff: changed
- scope
- markup.changed
- settings
-
- background
- #EEE8D5
- fontStyle
-
- foreground
- #CB4B16
-
-
-
- name
- diff: inserted
- scope
- markup.inserted
- settings
-
- background
- #EEE8D5
- foreground
- #2AA198
-
-
-
- name
- reST raw
- scope
- text.restructuredtext markup.raw
- settings
-
- foreground
- #2AA198
-
-
-
- name
- Other: Removal
- scope
- other.package.exclude, other.remove
- settings
-
- fontStyle
-
- foreground
- #DC322F
-
-
-
- name
- Other: Add
- scope
- other.add
- settings
-
- foreground
- #2AA198
-
-
-
- name
- Tex: {}
- scope
- punctuation.section.group.tex , punctuation.definition.arguments.begin.latex, punctuation.definition.arguments.end.latex, punctuation.definition.arguments.latex
- settings
-
- fontStyle
-
- foreground
- #DC322F
-
-
-
- name
- Tex: {text}
- scope
- meta.group.braces.tex
- settings
-
- fontStyle
-
- foreground
- #B58900
-
-
-
- name
- Tex: Other Math
- scope
- string.other.math.tex
- settings
-
- fontStyle
-
- foreground
- #B58900
-
-
-
- name
- Tex: {var}
- scope
- variable.parameter.function.latex
- settings
-
- fontStyle
-
- foreground
- #CB4B16
-
-
-
- name
- Tex: Math \\
- scope
- punctuation.definition.constant.math.tex
- settings
-
- fontStyle
-
- foreground
- #DC322F
-
-
-
- name
- Tex: Constant Math
- scope
- text.tex.latex constant.other.math.tex, constant.other.general.math.tex, constant.other.general.math.tex, constant.character.math.tex
- settings
-
- fontStyle
-
- foreground
- #2AA198
-
-
-
- name
- Tex: Other Math String
- scope
- string.other.math.tex
- settings
-
- fontStyle
-
- foreground
- #B58900
-
-
-
- name
- Tex: $
- scope
- punctuation.definition.string.begin.tex, punctuation.definition.string.end.tex
- settings
-
- fontStyle
-
- foreground
- #DC322F
-
-
-
- name
- Tex: \label
- scope
- keyword.control.label.latex, text.tex.latex constant.other.general.math.tex
- settings
-
- fontStyle
-
- foreground
- #2AA198
-
-
-
- name
- Tex: \label { }
- scope
- variable.parameter.definition.label.latex
- settings
-
- fontStyle
-
- foreground
- #DC322F
-
-
-
- name
- Tex: Function
- scope
- support.function.be.latex
- settings
-
- fontStyle
-
- foreground
- #859900
-
-
-
- name
- Tex: Support Function Section
- scope
- support.function.section.latex
- settings
-
- fontStyle
-
- foreground
- #CB4B16
-
-
-
- name
- Tex: Support Function
- scope
- support.function.general.tex
- settings
-
- fontStyle
-
- foreground
- #2AA198
-
-
-
- name
- Tex: Comment
- scope
- punctuation.definition.comment.tex, comment.line.percentage.tex
- settings
-
- fontStyle
- italic
-
-
-
- name
- Tex: Reference Label
- scope
- keyword.control.ref.latex
- settings
-
- fontStyle
-
- foreground
- #2AA198
-
-
-
- name
- Python: storage
- scope
- storage.type.class.python, storage.type.function.python, storage.modifier.global.python
- settings
-
- fontStyle
-
- foreground
- #859900
-
-
-
- name
- Python: import
- scope
- keyword.control.import.python, keyword.control.import.from.python
- settings
-
- foreground
- #CB4B16
-
-
-
- name
- Python: Support.exception
- scope
- support.type.exception.python
- settings
-
- foreground
- #B58900
-
-
-
- name
- Shell: builtin
- scope
- support.function.builtin.shell
- settings
-
- foreground
- #859900
-
-
-
- name
- Shell: variable
- scope
- variable.other.normal.shell
- settings
-
- foreground
- #CB4B16
-
-
-
- name
- Shell: DOT_FILES
- scope
- source.shell
- settings
-
- fontStyle
-
- foreground
- #268BD2
-
-
-
- name
- Shell: meta scope in loop
- scope
- meta.scope.for-in-loop.shell, variable.other.loop.shell
- settings
-
- fontStyle
-
- foreground
- #586E75
-
-
-
- name
- Shell: ""
- scope
- punctuation.definition.string.end.shell, punctuation.definition.string.begin.shell
- settings
-
- fontStyle
-
- foreground
- #859900
-
-
-
- name
- Shell: Meta Block
- scope
- meta.scope.case-block.shell, meta.scope.case-body.shell
- settings
-
- fontStyle
-
- foreground
- #586E75
-
-
-
- name
- Shell: []
- scope
- punctuation.definition.logical-expression.shell
- settings
-
- fontStyle
-
- foreground
- #DC322F
-
-
-
- name
- Shell: Comment
- scope
- comment.line.number-sign.shell
- settings
-
- fontStyle
- italic
-
-
-
- name
- Java: import
- scope
- keyword.other.import.java
- settings
-
- fontStyle
-
- foreground
- #CB4B16
-
-
-
- name
- Java: meta-import
- scope
- storage.modifier.import.java
- settings
-
- fontStyle
-
- foreground
- #586E75
-
-
-
- name
- Java: Class
- scope
- meta.class.java storage.modifier.java
- settings
-
- fontStyle
-
- foreground
- #B58900
-
-
-
- name
- Java: /* comment */
- scope
- source.java comment.block
- settings
-
- fontStyle
-
- foreground
- #586E75
-
-
-
- name
- Java: /* @param */
- scope
- comment.block meta.documentation.tag.param.javadoc keyword.other.documentation.param.javadoc
- settings
-
- fontStyle
-
- foreground
- #586E75
-
-
-
- name
- Perl: variables
- scope
- punctuation.definition.variable.perl, variable.other.readwrite.global.perl, variable.other.predefined.perl, keyword.operator.comparison.perl
- settings
-
- foreground
- #B58900
-
-
-
- name
- Perl: functions
- scope
- support.function.perl
- settings
-
- foreground
- #859900
-
-
-
- name
- Perl: comments
- scope
- comment.line.number-sign.perl
- settings
-
- fontStyle
- italic
- foreground
- #586E75
-
-
-
- name
- Perl: quotes
- scope
- punctuation.definition.string.begin.perl, punctuation.definition.string.end.perl
- settings
-
- foreground
- #2AA198
-
-
-
- name
- Perl: \char
- scope
- constant.character.escape.perl
- settings
-
- foreground
- #DC322F
-
-
-
- Name
- Markdown punctuation
- scope
- markup.list, text.html.markdown punctuation.definition, meta.separator.markdown
- settings
-
- foreground
- #CB4b16
-
-
-
- Name
- Markdown heading
- scope
- markup.heading
- settings
-
- foreground
- #268BD2
-
-
-
- Name
- Markdown text inside some block element
- scope
- markup.quote, meta.paragraph.list
- settings
-
- foreground
- #2AA198
-
-
-
- Name
- Markdown em
- scope
- markup.italic
- settings
-
- fontStyle
- italic
-
-
-
- Name
- Markdown strong
- scope
- markup.bold
- settings
-
- fontStyle
- bold
-
-
-
- Name
- Markdown reference
- scope
- markup.underline.link.markdown, meta.link.inline punctuation.definition.metadata, meta.link.reference.markdown punctuation.definition.constant, meta.link.reference.markdown constant.other.reference
- settings
-
- foreground
- #B58900
-
-
-
- Name
- Markdown linebreak
- scope
- meta.paragraph.markdown meta.dummy.line-break
- settings
-
- background
- #6C71c4
-
-
-
- name
- SublimeLinter Annotations
- scope
- sublimelinter.notes
- settings
-
- background
- #eee8d5
- foreground
- #eee8d5
-
-
-
- name
- SublimeLinter Error Outline
- scope
- sublimelinter.outline.illegal
- settings
-
- background
- #93a1a1
- foreground
- #93a1a1
-
-
-
- name
- SublimeLinter Error Underline
- scope
- sublimelinter.underline.illegal
- settings
-
- background
- #dc322f
-
-
-
- name
- SublimeLinter Warning Outline
- scope
- sublimelinter.outline.warning
- settings
-
- background
- #839496
- foreground
- #839496
-
-
-
- name
- SublimeLinter Warning Underline
- scope
- sublimelinter.underline.warning
- settings
-
- background
- #b58900
-
-
-
- name
- SublimeLinter Violation Outline
- scope
- sublimelinter.outline.violation
- settings
-
- background
- #657b83
- foreground
- #657b83
-
-
-
- name
- SublimeLinter Violation Underline
- scope
- sublimelinter.underline.violation
- settings
-
- background
- #cb4b16
-
-
-
- name
- SublimeBracketHighlighter
- scope
- brackethighlighter.all
- settings
-
- background
- #FDF6E3
- foreground
- #cb4b16
-
-
-
- uuid
- 38E819D9-AE02-452F-9231-ECC3B204AFD7
-
-
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Solarized Color Scheme/package-metadata.json b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Solarized Color Scheme/package-metadata.json
deleted file mode 100644
index e725fe4..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Solarized Color Scheme/package-metadata.json
+++ /dev/null
@@ -1 +0,0 @@
-{"url": "https://github.com/SublimeColors/Solarized", "version": "2013.05.31.15.52.59", "description": "A port of the popular Solarized Theme for Sublime Text 2"}
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Solarized Color Scheme/samples/README.md b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Solarized Color Scheme/samples/README.md
deleted file mode 100644
index 7f2c162..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Solarized Color Scheme/samples/README.md
+++ /dev/null
@@ -1,2 +0,0 @@
-Included here are a number of samples that can be used to verify
-the color scheme.
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Solarized Color Scheme/samples/test.c b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Solarized Color Scheme/samples/test.c
deleted file mode 100644
index 7e88404..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Solarized Color Scheme/samples/test.c
+++ /dev/null
@@ -1,26 +0,0 @@
-#define UNICODE
-#include
-
-int main(int argc, char **argv) {
- int speed = 0, speed1 = 0, speed2 = 0; // 1-20
- printf("Set Mouse Speed by Maverick\n");
-
- SystemParametersInfo(SPI_GETMOUSESPEED, 0, &speed, 0);
- printf("Current speed: %2d\n", speed);
-
- if (argc == 1) return 0;
- if (argc >= 2) sscanf(argv[1], "%d", &speed1);
- if (argc >= 3) sscanf(argv[2], "%d", &speed2);
-
- if (argc == 2) // set speed to first value
- speed = speed1;
- else if (speed == speed1 || speed == speed2) // alternate
- speed = speed1 + speed2 - speed;
- else
- speed = speed1; // start with first value
-
- SystemParametersInfo(SPI_SETMOUSESPEED, 0, speed, 0);
- SystemParametersInfo(SPI_GETMOUSESPEED, 0, &speed, 0);
- printf("New speed: %2d\n", speed);
- return 0;
-}
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Solarized Color Scheme/samples/test.coffee b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Solarized Color Scheme/samples/test.coffee
deleted file mode 100644
index 9dbe6cb..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Solarized Color Scheme/samples/test.coffee
+++ /dev/null
@@ -1,23 +0,0 @@
-undefined
-xui
-window = this
-string = new String('string')
-document = window.document
-simpleExpr = /^#?([\w-]+)$/
-idExpr = /^#/
-tagExpr = /<([\w:]+)/
-
-slice = (e) ->
- [].slice.call(e, 0)
-
-try
- a = slice(document.documentElement.childNodes)[0].nodeType
-catch e
- slice = (e) ->
- ret = []
- for i in e[i]
- ret.push(e[i])
- return ret
-
-window.x$ = window.xui = xui = (q, context) ->
- new xui.fn.find(q, context)
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Solarized Color Scheme/samples/test.html b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Solarized Color Scheme/samples/test.html
deleted file mode 100644
index e4d5f3b..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Solarized Color Scheme/samples/test.html
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
-A Tiny Page
-
-
-
-abc
-def
-Testing page
-
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Solarized Color Scheme/samples/test.js b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Solarized Color Scheme/samples/test.js
deleted file mode 100644
index 49d110a..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Solarized Color Scheme/samples/test.js
+++ /dev/null
@@ -1,42 +0,0 @@
-// Generated by CoffeeScript 1.4.0
-var a, document, idExpr, simpleExpr, slice, string, tagExpr, window, xui;
-
-void 0;
-
-xui;
-
-
-window = this;
-
-string = new String('string');
-
-document = window.document;
-
-simpleExpr = /^#?([\w-]+)$/;
-
-idExpr = /^#/;
-
-tagExpr = /<([\w:]+)/;
-
-slice = function(e) {
- return [].slice.call(e, 0);
-};
-
-try {
- a = slice(document.documentElement.childNodes)[0].nodeType;
-} catch (e) {
- slice = function(e) {
- var i, ret, _i, _len, _ref;
- ret = [];
- _ref = e[i];
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
- i = _ref[_i];
- ret.push(e[i]);
- }
- return ret;
- };
-}
-
-window.x$ = window.xui = xui = function(q, context) {
- return new xui.fn.find(q, context);
-};
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Solarized Color Scheme/samples/test.md b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Solarized Color Scheme/samples/test.md
deleted file mode 100644
index d24fb37..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Solarized Color Scheme/samples/test.md
+++ /dev/null
@@ -1,26 +0,0 @@
-% Pandoc Test File
-% Ethan Schoonover
-% March 22, 2011
-
-%% format: markdown+lhs
-
-> import Hakyll
-> main :: IO ()
-> main = hakyll $ do
-> compile "css/*" $ byExtension (error "Not a (S)CSS file")
-
-Using *Pandoc*
-=============
-
-In this document the technical terms `water` and `ice` will be replaced by
-H~2~O.^[a contrived footnote]
-
-## Heading styles can be mixed
-
-And matched, and they still fold **properly**
-
-* * * *
-
-Some code:
-
- a verbatim or "code" block
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Solarized Color Scheme/samples/test.py b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Solarized Color Scheme/samples/test.py
deleted file mode 100644
index 92a68e0..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Solarized Color Scheme/samples/test.py
+++ /dev/null
@@ -1,39 +0,0 @@
-#!/usr/bin/env python
-# encoding: utf-8
-"""
-"""
-
-import string
-
-module_variable = 0
-
-
-def functionName(self, int):
- local = 5 + 5
- module_variable = 5*5
- return module_variable
-
-
-class my_class(object):
-
- def __init__(self, arg1, string):
- self.value = True
- return
-
- def method1(self, str):
- self.s = str
- return self.value
-
- def method2(self):
- return
- print 'How did we get here?'
-
- def method1(self):
- return self.value + 1
- method2 = method1
-
-class my_subclass(my_class):
-
- def __init__(self, arg1, string):
- self.value = arg1
- return
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Solarized Color Scheme/samples/test.rb b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Solarized Color Scheme/samples/test.rb
deleted file mode 100644
index 2658f37..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/Solarized Color Scheme/samples/test.rb
+++ /dev/null
@@ -1,49 +0,0 @@
-# ruby test file ruby.rb
-
-include Enumerable
-
-def initialize(rbconfig)
-@rbconfig = rbconfig
-@no_harm = false
-end
-
-def load_savefile
-begin
- File.foreach(savefile()) do |line|
- k, v = *line.split(/=//, 2)
- self[k] = v.strip
- end
-rescue Errno::ENOENT
- setup_rb_error $!.message + "\n#{File.basename($0)} config first"
-end
-end
-
-if c['rubylibdir']
- # V > 1.6.3
- libruby = "#{c['prefix']}/lib/ruby"
- siterubyverarch = c['sitearchdir']
-end
-parameterize = lambda {|path|
- path.sub(/\A#{Regexp.quote(c['prefix'])}/, '$prefix')
-}
-
-if arg = c['configure_args'].split.detect {|arg| /--with-make-prog=/ =~ arg }
- makeprog = arg.sub(/'/, '').split(/=//, 2)[1]
-else
- makeprog = 'make'
-end
-
-def setup_rb_error(msg)
- raise SetupError, msg
-end
-
-if $0 == __FILE__
- begin
- ToplevelInstaller.invoke
- rescue SetupError
- raise if $DEBUG
- $stderr.puts $!.message
- $stderr.puts "Try 'ruby #{$0} --help' for detailed usage."
- exit 1
- end
-end
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/StringEncode/Default.sublime-commands b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/StringEncode/Default.sublime-commands
deleted file mode 100644
index 1b65db2..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/StringEncode/Default.sublime-commands
+++ /dev/null
@@ -1,74 +0,0 @@
-[
- {
- "caption": "StringEncode: HTML Entitize",
- "command": "html_entitize"
- },
- {
- "caption": "StringEncode: HTML Deentitize",
- "command": "html_deentitize"
- },
- {
- "caption": "StringEncode: XML Entitize",
- "command": "xml_entitize"
- },
- {
- "caption": "StringEncode: XML Deentitize",
- "command": "xml_deentitize"
- },
- {
- "caption": "StringEncode: Safe HTML Entitize",
- "command": "safe_html_entitize"
- },
- {
- "caption": "StringEncode: Safe HTML Deentitize",
- "command": "safe_html_deentitize"
- },
- {
- "caption": "StringEncode: JSON Escape",
- "command": "json_escape"
- },
- {
- "caption": "StringEncode: JSON Unescape",
- "command": "json_unescape"
- },
- {
- "caption": "StringEncode: URL Encode",
- "command": "url_encode"
- },
- {
- "caption": "StringEncode: URL Decode",
- "command": "url_decode"
- },
- {
- "caption": "StringEncode: Base64 Encode",
- "command": "base64_encode"
- },
- {
- "caption": "StringEncode: Base64 Decode",
- "command": "base64_decode"
- },
- {
- "caption": "StringEncode: Escape regex",
- "command": "escape_regex"
- },
- {
- "caption": "StringEncode: Escape LIKE",
- "command": "escape_like"
- },
- {
- "caption": "StringEncode: Decimal to Hexadecimal",
- "command": "dec_hex"
- },
- {
- "caption": "StringEncode: Hexadecimal to Decimal",
- "command": "hex_dec"
- },
- {
- "caption": "StringEncode: Unicode to Hexadecimal",
- "command": "unicode_hex"
- },
- {
- "caption": "StringEncode: Hexadecimal to Unicode",
- "command": "hex_unicode"
- }
-]
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/StringEncode/Example.sublime-keymap b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/StringEncode/Example.sublime-keymap
deleted file mode 100644
index 84dce04..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/StringEncode/Example.sublime-keymap
+++ /dev/null
@@ -1,14 +0,0 @@
-[
- { "keys": ["super+shift+7"], "command": "xml_entitize", "scope": "text.xml" },
- { "keys": ["super+ctrl+7"], "command": "xml_deentitize", "scope": "text.xml" },
- { "keys": ["super+shift+7"], "command": "html_entitize" },
- { "keys": ["super+ctrl+7"], "command": "html_deentitize" },
- { "keys": ["super+shift+8"], "command": "json_escape" },
- { "keys": ["super+ctrl+8"], "command": "json_unescape" },
- { "keys": ["super+shift+6"], "command": "base64_encode" },
- { "keys": ["super+ctrl+6"], "command": "base64_decode" },
- { "keys": ["super+shift+5"], "command": "url_encode" },
- { "keys": ["super+ctrl+5"], "command": "url_decode" },
- { "keys": ["ctrl+shift+r"], "command": "escape_regex" },
- { "keys": ["super+ctrl+3"], "command": "hex_dec" }
-]
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/StringEncode/LICENSE b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/StringEncode/LICENSE
deleted file mode 100644
index 8da8c54..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/StringEncode/LICENSE
+++ /dev/null
@@ -1,26 +0,0 @@
-Copyright (c) 2012, Colin T.A. Gray
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-2. Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
-ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-The views and conclusions contained in the software and documentation are those
-of the authors and should not be interpreted as representing official policies,
-either expressed or implied, of this project.
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/StringEncode/README.md b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/StringEncode/README.md
deleted file mode 100644
index 71ae8bb..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/StringEncode/README.md
+++ /dev/null
@@ -1,61 +0,0 @@
-StringEncode
-============
-
-Converts characters from one "encoding" to another using a transformation (think HTML entities, not character encodings).
-
-Installation
-------------
-
-1. Using Package Control, install "StringEncode"
-
-Or:
-
-1. Open the Sublime Text Packages folder
-
- - OS X: ~/Library/Application Support/Sublime Text 3/Packages/
- - Windows: %APPDATA%/Sublime Text 3/Packages/
- - Linux: ~/.Sublime Text 3/Packages/
-
-2. clone this repo
-3. Install keymaps for the commands (see Example.sublime-keymap for my preferred keys)
-
-### Sublime Text 2
-
-1. Open the Sublime Text 2 Packages folder
-2. clone this repo, but use the `st2` branch
-
- git clone -b st2 git@github.com:colinta/SublimeStringEncode
-
-Commands
---------
-
-`html_entitize`: Converts characters to their HTML entity
-
-`html_deentitize`: Converts HTML entities to a character
-
-`url_encode`: Uses urllib.quote to escape special URL characters
-
-`url_decode`: Uses urllib.unquote to convert escaped URL characters
-
-`json_escape`: Escapes a string and surrounds it in quotes, according to the JSON encoding.
-
-`json_unescape`: Unescapes a string (include the quotes!) according to JSON encoding.
-
-`base64_encode`: Uses base64 to encode into base64
-
-`base64_decode`: Uses base64 to decode from base64
-
-`escape_regex`: Escapes regex meta characters
-
-`escape_like`: Escapes SQL-LIKE meta characters
-
-`safe_html_entitize`: Converts characters to their HTML entity, but preserves HTML reserved characters
-
-`safe_html_deentitize`: Converts HTML entities to a character, but preserves HTML reserved characters
-
-TODO
-----
-
-`xml_entitize`: Converts characters to their XML entity
-
-`xml_deentitize`: Converts XML entities to a character
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/StringEncode/package-metadata.json b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/StringEncode/package-metadata.json
deleted file mode 100644
index 667df99..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/StringEncode/package-metadata.json
+++ /dev/null
@@ -1 +0,0 @@
-{"url": "https://github.com/colinta/SublimeStringEncode", "version": "2013.08.20.19.57.08", "description": "Converts characters from one encoding to another using a transformation (think HTML entities, not character encodings)."}
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/StringEncode/package.json b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/StringEncode/package.json
deleted file mode 100644
index 96ab65f..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/StringEncode/package.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "name": "StringEncode",
- "description": "Converts characters from one encoding to another using a transformation (think HTML entities, not character encodings).",
- "author": "Colin T.A. Gray (colinta)",
- "details": "https://github.com/colinta/SublimeStringEncode",
- "labels": ["text manipulation"],
- "releases": [
- {
- "details": "https://github.com/colinta/SublimeStringEncode/tree/master",
- "sublime_text": "<3000"
- },
- {
- "details": "https://github.com/colinta/SublimeStringEncode/tags",
- "sublime_text": ">=3000"
- }
- ]
-}
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/StringEncode/string_encode.py b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/StringEncode/string_encode.py
deleted file mode 100644
index ca753e7..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/StringEncode/string_encode.py
+++ /dev/null
@@ -1,290 +0,0 @@
-# coding: utf8
-import urllib
-import base64
-import re
-import json
-import sys
-
-import sublime_plugin
-
-
-class StringEncode(sublime_plugin.TextCommand):
- def run(self, edit):
- for region in self.view.sel():
- if region.empty():
- continue
- text = self.view.substr(region)
- replacement = self.encode(text)
- self.view.replace(edit, region, replacement)
-
-
-html_escape_table = {
- u"\"": """, u"'": "'", u"<": "<", u">": ">", u"¡": "¡", u"¢": "¢", u"£": "£", u"¤": "¤", u"¥": "¥", u"¦": "¦", u"§": "§", u"¨": "¨", u"©": "©", u"ª": "ª", u"«": "«", u"¬": "¬", u"®": "®", u"¯": "¯", u"°": "°", u"±": "±", u"²": "²", u"³": "³", u"´": "´", u"µ": "µ", u"¶": "¶", u"·": "·", u"¸": "¸", u"¹": "¹", u"º": "º", u"»": "»", u"¼": "¼", u"½": "½", u"¾": "¾", u"¿": "¿", u"À": "À", u"Á": "Á", u"Â": "Â", u"Ã": "Ã", u"Ä": "Ä", u"Å": "Å", u"Æ": "Æ", u"Ç": "Ç", u"È": "È", u"É": "É", u"Ê": "Ê", u"Ë": "Ë", u"Ì": "Ì", u"Í": "Í", u"Î": "Î", u"Ï": "Ï", u"Ð": "Ð", u"Ñ": "Ñ", u"Ò": "Ò", u"Ó": "Ó", u"Ô": "Ô", u"Õ": "Õ", u"Ö": "Ö", u"×": "×", u"Ø": "Ø", u"Ù": "Ù", u"Ú": "Ú", u"Û": "Û", u"Ü": "Ü", u"Ý": "Ý", u"Þ": "Þ", u"ß": "ß", u"à": "à", u"á": "á", u"â": "â", u"ã": "ã", u"ä": "ä", u"å": "å", u"æ": "æ", u"ç": "ç", u"è": "è", u"é": "é", u"ê": "ê", u"ë": "ë", u"ì": "ì", u"í": "í", u"î": "î", u"ï": "ï", u"ð": "ð", u"ñ": "ñ", u"ò": "ò", u"ó": "ó", u"ô": "ô", u"õ": "õ", u"ö": "ö", u"÷": "÷", u"ø": "ø", u"ù": "ù", u"ú": "ú", u"û": "û", u"ü": "ü", u"ý": "ý", u"þ": "þ", u"ÿ": "ÿ", u"Œ": "Œ", u"œ": "œ", u"Š": "Š", u"š": "š", u"Ÿ": "Ÿ", u"ƒ": "ƒ", u"ˆ": "ˆ", u"˜": "˜", u"Α": "Α", u"Β": "Β", u"Γ": "Γ", u"Δ": "Δ", u"Ε": "Ε", u"Ζ": "Ζ", u"Η": "Η", u"Θ": "Θ", u"Ι": "Ι", u"Κ": "Κ", u"Λ": "Λ", u"Μ": "Μ", u"Ν": "Ν", u"Ξ": "Ξ", u"Ο": "Ο", u"Π": "Π", u"Ρ": "Ρ", u"Σ": "Σ", u"Τ": "Τ", u"Υ": "Υ", u"Φ": "Φ", u"Χ": "Χ", u"Ψ": "Ψ", u"Ω": "Ω", u"α": "α", u"β": "β", u"γ": "γ", u"δ": "δ", u"ε": "ε", u"ζ": "ζ", u"η": "η", u"θ": "θ", u"ι": "ι", u"κ": "κ", u"λ": "λ", u"μ": "μ", u"ν": "ν", u"ξ": "ξ", u"ο": "ο", u"π": "π", u"ρ": "ρ", u"ς": "ς", u"σ": "σ", u"τ": "τ", u"υ": "υ", u"φ": "φ", u"χ": "χ", u"ψ": "ψ", u"ω": "ω", u"ϑ": "ϑ", u"ϒ": "ϒ", u"ϖ": "ϖ", u"–": "–", u"—": "—", u"‘": "‘", u"’": "’", u"‚": "‚", u"“": "“", u"”": "”", u"„": "„", u"†": "†", u"‡": "‡", u"•": "•", u"…": "…", u"‰": "‰", u"′": "′", u"″": "″", u"‹": "‹", u"›": "›", u"‾": "‾", u"⁄": "⁄", u"€": "€", u"ℑ": "ℑ", u"℘": "℘", u"ℜ": "ℜ", u"™": "™", u"ℵ": "ℵ", u"←": "←", u"↑": "↑", u"→": "→", u"↓": "↓", u"↔": "↔", u"↵": "↵", u"⇐": "⇐", u"⇑": "⇑", u"⇒": "⇒", u"⇓": "⇓", u"⇔": "⇔", u"∀": "∀", u"∂": "∂", u"∃": "∃", u"∅": "∅", u"∇": "∇", u"∈": "∈", u"∉": "∉", u"∋": "∋", u"∏": "∏", u"∑": "∑", u"−": "−", u"∗": "∗", u"√": "√", u"∝": "∝", u"∞": "∞", u"∠": "∠", u"∧": "∧", u"∨": "∨", u"∩": "∩", u"∪": "∪", u"∫": "∫", u"∴": "∴", u"∼": "∼", u"≅": "≅", u"≈": "≈", u"≠": "≠", u"≡": "≡", u"≤": "≤", u"≥": "≥", u"⊂": "⊂", u"⊃": "⊃", u"⊄": "⊄", u"⊆": "⊆", u"⊇": "⊇", u"⊕": "⊕", u"⊗": "⊗", u"⊥": "⊥", u"⋅": "⋅", u"⌈": "⌈", u"⌉": "⌉", u"⌊": "⌊", u"⌋": "⌋", u"〈": "〈", u"〉": "〉", u"◊": "◊", u"♠": "♠", u"♣": "♣", u"♥": "♥", u"♦": "♦", u"\xa0": " ",
-}
-xml_escape_table = {
- u"\"": """, u"'": "'", u"<": "<", u">": ">"
-}
-html_reserved_list = (u"\"", u"'", u"<", u">", u"&")
-
-
-class HtmlEntitizeCommand(StringEncode):
- def encode(self, text):
- text = text.replace('&', '&')
- for k in html_escape_table:
- v = html_escape_table[k]
- text = text.replace(k, v)
- ret = ''
- for i, c in enumerate(text):
- if ord(c) > 127:
- ret += hex(ord(c)).replace('0x', '') + ';'
- else:
- ret += c
- return ret
-
-
-class HtmlDeentitizeCommand(StringEncode):
- def encode(self, text):
- for k in html_escape_table:
- v = html_escape_table[k]
- text = text.replace(v, k)
- while re.search('[xX][a-fA-F0-9]+;', text):
- match = re.search('[xX]([a-fA-F0-9]+);', text)
- text = text.replace(match.group(0), unichr(int('0x' + match.group(1), 16)))
- text = text.replace('&', '&')
- return text
-
-
-class SafeHtmlEntitizeCommand(StringEncode):
- def encode(self, text):
- for k in html_escape_table:
- # skip HTML reserved characters
- if k in html_reserved_list:
- continue
- v = html_escape_table[k]
- text = text.replace(k, v)
- ret = ''
- for i, c in enumerate(text):
- if ord(c) > 127:
- ret += hex(ord(c)).replace('0x', '') + ';'
- else:
- ret += c
- return ret
-
-
-class SafeHtmlDeentitizeCommand(StringEncode):
- def encode(self, text):
- for k in html_escape_table:
- # skip HTML reserved characters
- if k in html_reserved_list:
- continue
- v = html_escape_table[k]
- text = text.replace(v, k)
- while re.search('[xX][a-fA-F0-9]+;', text):
- match = re.search('[xX]([a-fA-F0-9]+);', text)
- text = text.replace(match.group(0), unichr(int('0x' + match.group(1), 16)))
- text = text.replace('&', '&')
- return text
-
-
-class XmlEntitizeCommand(StringEncode):
- def encode(self, text):
- text = text.replace('&', '&')
- for k in xml_escape_table:
- v = xml_escape_table[k]
- text = text.replace(k, v)
- ret = ''
- for i, c in enumerate(text):
- if ord(c) > 127:
- ret += hex(ord(c)).replace('0x', '') + ';'
- else:
- ret += c
- return ret
-
-
-class XmlDeentitizeCommand(StringEncode):
- def encode(self, text):
- for k in xml_escape_table:
- v = xml_escape_table[k]
- text = text.replace(v, k)
- text = text.replace('&', '&')
- return text
-
-
-class JsonEscapeCommand(StringEncode):
- def encode(self, text):
- return json.dumps(text)
-
-
-class JsonUnescapeCommand(StringEncode):
- def encode(self, text):
- return json.loads(text)
-
-
-class UrlEncodeCommand(StringEncode):
- def encode(self, text):
- return urllib.parse.quote(text)
-
-
-class UrlDecodeCommand(StringEncode):
- def encode(self, text):
- return urllib.parse.unquote(text)
-
-
-class Base64EncodeCommand(StringEncode):
- def encode(self, text):
- return base64.b64encode(text)
-
-
-class Base64DecodeCommand(StringEncode):
- def encode(self, text):
- return base64.b64decode(text)
-
-
-class Escaper(StringEncode):
- def encode(self, text):
- return re.sub(r'(?= 0xd800 and tmp <= 0xdbff:
- char_index += 1
- else:
- hex_text += '\\u' + '{0:04x}'.format(tmp)
- char_index = 0
- elif char_index == 2:
- c3 = c
- char_index += 1
- elif char_index == 3:
- c4 = c
- if endian == 'little':
- c3, c4 = c4, c3
- tmp1 = ((c1 << 8) + c2) - 0xd800
- tmp2 = ((c3 << 8) + c4) - 0xdc00
- tmp = (tmp1 * 0x400) + tmp2 + 0x10000
- hex_text += '\\U' + '{0:08x}'.format(tmp)
- char_index = 0
- return hex_text
-
-
-class HexUnicodeCommand(StringEncode):
- def encode(self, text):
- uni_text = text
-
- endian = sys.byteorder
-
- r = re.compile(r'\\u([0-9a-fA-F]{2})([0-9a-fA-F]{2})')
- rr = r.search(uni_text)
- while rr:
- first_byte = int(rr.group(1), 16)
-
- if first_byte >= 0xd8 and first_byte <= 0xdf:
- # Surrogate pair
- pass
- else:
- if endian == 'little':
- b1 = int(rr.group(2), 16)
- b2 = int(rr.group(1), 16)
- else:
- b1 = int(rr.group(1), 16)
- b2 = int(rr.group(2), 16)
-
- ch = bytes([b1, b2]).decode('utf-16')
-
- uni_text = uni_text.replace(rr.group(0), ch)
- rr = r.search(uni_text, rr.start(0)+1)
-
- # Surrogate pair (2 bytes + 2 bytes)
- r = re.compile(r'\\u([0-9a-fA-F]{2})([0-9a-fA-F]{2})\\u([0-9a-fA-F]{2})([0-9a-fA-F]{2})')
- rr = r.search(uni_text)
- while rr:
- if endian == 'little':
- b1 = int(rr.group(2), 16)
- b2 = int(rr.group(1), 16)
- b3 = int(rr.group(4), 16)
- b4 = int(rr.group(3), 16)
- else:
- b1 = int(rr.group(1), 16)
- b2 = int(rr.group(2), 16)
- b3 = int(rr.group(3), 16)
- b4 = int(rr.group(4), 16)
-
- ch = bytes([b1, b2, b3, b4]).decode('utf-16')
-
- uni_text = uni_text.replace(rr.group(0), ch)
- rr = r.search(uni_text)
-
- # Surrogate pair (4 bytes)
- r = re.compile(r'\\U([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})')
- rr = r.search(uni_text)
- while rr:
- tmp = (int(rr.group(1), 16) << 24) \
- + (int(rr.group(2), 16) << 16) \
- + (int(rr.group(3), 16) << 8) \
- + (int(rr.group(4), 16))
-
- if (tmp <= 0xffff):
- ch = chr(tmp)
- else:
- tmp -= 0x10000
- c1 = 0xd800 + int(tmp / 0x400)
- c2 = 0xdc00 + int(tmp % 0x400)
- if endian == 'little':
- b1 = c1 & 0xff
- b2 = c1 >> 8
- b3 = c2 & 0xff
- b4 = c2 >> 8
- else:
- b1 = c1 >> 8
- b2 = c1 & 0xff
- b3 = c2 >> 8
- b4 = c2 & 0xff
-
- ch = bytes([b1, b2, b3, b4]).decode('utf-16')
-
- uni_text = uni_text.replace(rr.group(0), ch)
- rr = r.search(uni_text)
-
- return uni_text
-
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SublimeTODO/Default (Linux).sublime-keymap b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SublimeTODO/Default (Linux).sublime-keymap
deleted file mode 100644
index d050399..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SublimeTODO/Default (Linux).sublime-keymap
+++ /dev/null
@@ -1,80 +0,0 @@
-[
-
- // {
- // "keys": ["n"], "command": "goto_next_result",
- // "context": [
- // { "key": "setting.todo_results", "operator": "equal", "operand": true }
- // ]
- // }
-
- {
- "keys": ["n"], "command": "navigate_results",
- "context": [
- {"key": "setting.command_mode", "operand": true}
- // {"key": "setting.todo_results"}
- ],
- "args": {"direction": "forward"}
- },
-
- {
- "keys": ["down"], "command": "navigate_results",
- "context": [
- {"key": "setting.command_mode", "operand": true}
- // {"key": "setting.todo_results"}
- ],
- "args": {"direction": "forward"}
- },
-
- {
- "keys": ["j"], "command": "navigate_results",
- "context": [
- {"key": "setting.command_mode", "operand": true}
- // {"key": "setting.todo_results"}
- ],
- "args": {"direction": "forward"}
- },
-
- {
- "keys": ["p"], "command": "navigate_results",
- "context": [
- {"key": "setting.command_mode", "operand": true}
- // {"key": "setting.todo_results"}
- ],
- "args": {"direction": "backward"}
- },
-
- {
- "keys": ["up"], "command": "navigate_results",
- "context": [
- {"key": "setting.command_mode", "operand": true}
- //{"key": "setting.todo_results"}
- ],
- "args": {"direction": "backward"}
- },
-
- {
- "keys": ["k"], "command": "navigate_results",
- "context": [
- {"key": "setting.command_mode", "operand": true}
- //{"key": "setting.todo_results"}
- ],
- "args": {"direction": "backward"}
- },
-
- {
- "keys": ["c"], "command": "clear_selection",
- "context": [
- {"key": "setting.command_mode", "operand": true}
- // {"key": "setting.todo_results"}
- ]
- },
-
- {
- "keys": ["enter"], "command": "goto_comment",
- "context": [
- {"key": "setting.command_mode", "operand": true}
- // {"key": "setting.todo_results"}
- ]
- }
-
-]
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SublimeTODO/Default (Linux).sublime-mousemap b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SublimeTODO/Default (Linux).sublime-mousemap
deleted file mode 100644
index f3868a5..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SublimeTODO/Default (Linux).sublime-mousemap
+++ /dev/null
@@ -1,6 +0,0 @@
-[
- {
- "button": "button1", "count": 2, "modifiers": ["shift"],
- "command": "mouse_goto_comment"
- }
-]
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SublimeTODO/Default (OSX).sublime-keymap b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SublimeTODO/Default (OSX).sublime-keymap
deleted file mode 100644
index d050399..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SublimeTODO/Default (OSX).sublime-keymap
+++ /dev/null
@@ -1,80 +0,0 @@
-[
-
- // {
- // "keys": ["n"], "command": "goto_next_result",
- // "context": [
- // { "key": "setting.todo_results", "operator": "equal", "operand": true }
- // ]
- // }
-
- {
- "keys": ["n"], "command": "navigate_results",
- "context": [
- {"key": "setting.command_mode", "operand": true}
- // {"key": "setting.todo_results"}
- ],
- "args": {"direction": "forward"}
- },
-
- {
- "keys": ["down"], "command": "navigate_results",
- "context": [
- {"key": "setting.command_mode", "operand": true}
- // {"key": "setting.todo_results"}
- ],
- "args": {"direction": "forward"}
- },
-
- {
- "keys": ["j"], "command": "navigate_results",
- "context": [
- {"key": "setting.command_mode", "operand": true}
- // {"key": "setting.todo_results"}
- ],
- "args": {"direction": "forward"}
- },
-
- {
- "keys": ["p"], "command": "navigate_results",
- "context": [
- {"key": "setting.command_mode", "operand": true}
- // {"key": "setting.todo_results"}
- ],
- "args": {"direction": "backward"}
- },
-
- {
- "keys": ["up"], "command": "navigate_results",
- "context": [
- {"key": "setting.command_mode", "operand": true}
- //{"key": "setting.todo_results"}
- ],
- "args": {"direction": "backward"}
- },
-
- {
- "keys": ["k"], "command": "navigate_results",
- "context": [
- {"key": "setting.command_mode", "operand": true}
- //{"key": "setting.todo_results"}
- ],
- "args": {"direction": "backward"}
- },
-
- {
- "keys": ["c"], "command": "clear_selection",
- "context": [
- {"key": "setting.command_mode", "operand": true}
- // {"key": "setting.todo_results"}
- ]
- },
-
- {
- "keys": ["enter"], "command": "goto_comment",
- "context": [
- {"key": "setting.command_mode", "operand": true}
- // {"key": "setting.todo_results"}
- ]
- }
-
-]
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SublimeTODO/Default (OSX).sublime-mousemap b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SublimeTODO/Default (OSX).sublime-mousemap
deleted file mode 100644
index 41485cf..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SublimeTODO/Default (OSX).sublime-mousemap
+++ /dev/null
@@ -1,6 +0,0 @@
-[
- {
- "button": "button1", "count": 2, "modifiers": ["alt"],
- "command": "mouse_goto_comment"
- }
-]
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SublimeTODO/Default (Windows).sublime-keymap b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SublimeTODO/Default (Windows).sublime-keymap
deleted file mode 100644
index d050399..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SublimeTODO/Default (Windows).sublime-keymap
+++ /dev/null
@@ -1,80 +0,0 @@
-[
-
- // {
- // "keys": ["n"], "command": "goto_next_result",
- // "context": [
- // { "key": "setting.todo_results", "operator": "equal", "operand": true }
- // ]
- // }
-
- {
- "keys": ["n"], "command": "navigate_results",
- "context": [
- {"key": "setting.command_mode", "operand": true}
- // {"key": "setting.todo_results"}
- ],
- "args": {"direction": "forward"}
- },
-
- {
- "keys": ["down"], "command": "navigate_results",
- "context": [
- {"key": "setting.command_mode", "operand": true}
- // {"key": "setting.todo_results"}
- ],
- "args": {"direction": "forward"}
- },
-
- {
- "keys": ["j"], "command": "navigate_results",
- "context": [
- {"key": "setting.command_mode", "operand": true}
- // {"key": "setting.todo_results"}
- ],
- "args": {"direction": "forward"}
- },
-
- {
- "keys": ["p"], "command": "navigate_results",
- "context": [
- {"key": "setting.command_mode", "operand": true}
- // {"key": "setting.todo_results"}
- ],
- "args": {"direction": "backward"}
- },
-
- {
- "keys": ["up"], "command": "navigate_results",
- "context": [
- {"key": "setting.command_mode", "operand": true}
- //{"key": "setting.todo_results"}
- ],
- "args": {"direction": "backward"}
- },
-
- {
- "keys": ["k"], "command": "navigate_results",
- "context": [
- {"key": "setting.command_mode", "operand": true}
- //{"key": "setting.todo_results"}
- ],
- "args": {"direction": "backward"}
- },
-
- {
- "keys": ["c"], "command": "clear_selection",
- "context": [
- {"key": "setting.command_mode", "operand": true}
- // {"key": "setting.todo_results"}
- ]
- },
-
- {
- "keys": ["enter"], "command": "goto_comment",
- "context": [
- {"key": "setting.command_mode", "operand": true}
- // {"key": "setting.todo_results"}
- ]
- }
-
-]
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SublimeTODO/Default (Windows).sublime-mousemap b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SublimeTODO/Default (Windows).sublime-mousemap
deleted file mode 100644
index 41485cf..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SublimeTODO/Default (Windows).sublime-mousemap
+++ /dev/null
@@ -1,6 +0,0 @@
-[
- {
- "button": "button1", "count": 2, "modifiers": ["alt"],
- "command": "mouse_goto_comment"
- }
-]
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SublimeTODO/Default.sublime-commands b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SublimeTODO/Default.sublime-commands
deleted file mode 100644
index 8e033e9..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SublimeTODO/Default.sublime-commands
+++ /dev/null
@@ -1,10 +0,0 @@
-[
- {
- "caption": "Show TODOs: Project and open files",
- "command": "todo"
- },
- {
- "caption": "Show TODOs: Open files only",
- "command": "todo", "args": {"open_files_only": true}
- }
-]
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SublimeTODO/README.markdown b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SublimeTODO/README.markdown
deleted file mode 100644
index 509343b..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SublimeTODO/README.markdown
+++ /dev/null
@@ -1,117 +0,0 @@
-# Sublime TODOs
-
-A Sublime Text 2 plugin to extract and list TODO comments from open files and
-project folders.
-
-Take a look at [this screencast](http://webdesign.tutsplus.com/tutorials/applications/quick-tip-streamline-your-todo-lists-in-sublime-text-2/) (courtesy of Shannon Huffman) for an overview.
-
-
-# Install
-
-The preferred method is to use the [Sublime Package Manager](http://wbond.net/sublime_packages/package_control). Alternatively, checkout from github:
-
-```sh
-$ cd Sublime Text 2/Packages
-$ git clone https://robcowie@github.com/robcowie/SublimeTODO.git
-```
-
-# Config
-
-All plugin configuration must be placed in user or project-specific settings inside a `todo` object, for example;
-
-```javascript
-{
- // other user config ...
- "todo": {
- "patterns": {}
- }
-}
-```
-
-See an example user settings file [here](https://gist.github.com/2049887).
-
-
-## Adding comment patterns
-
-Extraction uses regular expressions that return one match group
-representing the message. Default patterns are provided for `TODO`, `NOTE`, `FIXME`
-and `CHANGED` comments.
-To override or provide more patterns, add `patterns` to user settings, e.g.
-
-```javascript
-"patterns": {
- "TODO": "TODO[\\s]*?:+(?P.*)$",
- "NOTE": "NOTE[\\s]*?:+(?P.*)$",
- "FIXME": "FIX ?ME[\\s]*?:+(?P\\S.*)$",
- "CHANGED": "CHANGED[\\s]*?:+(?P\\S.*)$"
-}
-```
-
-Note that the pattern _must_ provide at least one named group which will be used to group the comments in results.
-
-By default, searching is not case sensitive. You can change this behaviour by adding
-
- "case_sensitive": true
-
-to the todo settings object.
-
-
-## Excluding files and folders
-
-Global settings `folder_exclude_patterns`, `file_exclude_patterns` and `binary_file_patterns` are excluded from search results.
-
-To exclude further directories, add directory names (not glob pattern or regexp) to `folder_exclude_patterns` in todo settings:
-
-```javascript
-"todo": {
- "folder_exclude_patterns": [
- "vendor",
- "tmp"
- ]
-}
-```
-
-To add file excludes, add glob patterns to `file_exclude_patterns`:
-
-```javascript
-"file_exclude_patterns": [
- "*.css"
-]
-```
-
-
-## Results title
-
-Override the results view title by setting `result_title`
-
-```javascript
-"result_title": "TODO Results"
-```
-
-# Usage
-
-`Show TODOs: Project and open files` scans all files in your project
-`Show TODOs: Open files only` scans only open, saved files
-Both are triggered from the command palette. No default key bindings are provided.
-
-## Navigating results
-
-Results can be navigated by keyboard and mouse:
-
- * `n`ext, `p`revious, `c`lear, `enter`
- * `alt-double click` (`shift-double click` in Linux)
-
- Note that due to the lack of support for context in mousemaps right now,
- alt-double click will trigger in _any_ document, though it should be a no-op.
-
-# License
-
-All of SublimeTODO is licensed under the MIT license.
-
-Copyright (c) 2012 Rob Cowie
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SublimeTODO/messages.json b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SublimeTODO/messages.json
deleted file mode 100644
index ce3c122..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SublimeTODO/messages.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "1.1.0": "messages/1.1.0.txt"
-}
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SublimeTODO/messages/1.1.0.txt b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SublimeTODO/messages/1.1.0.txt
deleted file mode 100644
index 647fe56..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SublimeTODO/messages/1.1.0.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-SublimeTODO 1.1.0 Changelog:
-
- - Repo reorg to support explicit versioning and Package Control upgrade messages.
-
- - [LINUX] alt + dblclick is replaced by shift + dblclick to prevent clash
- with common alt+click+drag method of moving windows.
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SublimeTODO/package-metadata.json b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SublimeTODO/package-metadata.json
deleted file mode 100644
index 83e3860..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SublimeTODO/package-metadata.json
+++ /dev/null
@@ -1 +0,0 @@
-{"url": "https://github.com/robcowie/SublimeTODO", "version": "1.1.3", "description": "Extract TODO-type comments from open files and project folders"}
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SublimeTODO/packages.json b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SublimeTODO/packages.json
deleted file mode 100644
index 423b3cc..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SublimeTODO/packages.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "schema_version": "1.2",
- "packages": [
- {
- "name": "SublimeTODO",
- "description": "Extract TODO-type comments from open files and project folders",
- "author": "Rob Cowie",
- "homepage": "https://github.com/robcowie/SublimeTODO",
- "last_modified": "2012-11-12 10:16:00",
- "platforms": {
- "*": [
- {
- "version": "1.1.2",
- "url": "https://nodeload.github.com/robcowie/SublimeTODO/zipball/1.1.2"
- }
- ]
- }
- }
- ]
-}
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SublimeTODO/todo.py b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SublimeTODO/todo.py
deleted file mode 100644
index 40c15c0..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SublimeTODO/todo.py
+++ /dev/null
@@ -1,441 +0,0 @@
-# -*- coding: utf-8 -*-
-
-## TODO: Implement TODO_IGNORE setting (http://mdeering.com/posts/004-get-your-textmate-todos-and-fixmes-under-control)
-## TODO: Make the output clickable (å la find results)
-## TODO: Occasional NoneType bug
-## todo: Make the sections foldable (define them as regions?)
-
-""""""
-
-from collections import namedtuple
-from datetime import datetime
-import functools
-import fnmatch
-from itertools import groupby
-import logging
-from os import path, walk
-import re
-import threading
-
-import sublime
-import sublime_plugin
-
-
-DEBUG = True
-
-DEFAULT_SETTINGS = {
- 'result_title': 'TODO Results',
-
- 'core_patterns': {
- 'TODO': r'TODO[\s]*?:+(?P.*)$',
- 'NOTE': r'NOTE[\s]*?:+(?P.*)$',
- 'FIXME': r'FIX ?ME[\s]*?:+(?P.*)$',
- 'CHANGED': r'CHANGED[\s]*?:+(?P.*)$'
- },
-
- 'patterns': {}
-}
-
-Message = namedtuple('Message', 'type, msg')
-
-## LOGGING SETUP
-try:
- from logging import NullHandler
-except ImportError:
- class NullHandler(logging.Handler):
- def handle(self, record):
- pass
-
- def emit(self, record):
- pass
-
- def createLock(self):
- self.lock = None
-
-log = logging.getLogger('SublimeTODO')
-log.handlers = [] ## hack to prevent extraneous handlers on ST2 auto-reload
-log.addHandler(NullHandler())
-log.setLevel(logging.INFO)
-if DEBUG:
- log.addHandler(logging.StreamHandler())
- log.setLevel(logging.DEBUG)
-
-
-def do_when(conditional, callback, *args, **kwargs):
- if conditional():
- return callback(*args, **kwargs)
- sublime.set_timeout(functools.partial(do_when, conditional, callback, *args, **kwargs), 50)
-
-
-class Settings(dict):
- """Combine default and user settings"""
- def __init__(self, user_settings):
- settings = DEFAULT_SETTINGS.copy()
- settings.update(user_settings)
- ## Combine core_patterns and patterns
- settings['core_patterns'].update(settings['patterns'])
- settings['patterns'] = settings.pop('core_patterns')
- super(Settings, self).__init__(settings)
-
-
-class ThreadProgress(object):
- def __init__(self, thread, message, success_message, file_counter):
- self.thread = thread
- self.message = message
- self.success_message = success_message
- self.file_counter = file_counter
- self.addend = 1
- self.size = 8
- sublime.set_timeout(lambda: self.run(0), 100)
-
- def run(self, i):
- if not self.thread.is_alive():
- if hasattr(self.thread, 'result') and not self.thread.result:
- sublime.status_message('')
- return
- sublime.status_message(self.success_message)
- return
-
- before = i % self.size
- after = (self.size - 1) - before
- sublime.status_message('%s [%s=%s] (%s files scanned)' % \
- (self.message, ' ' * before, ' ' * after, self.file_counter))
- if not after:
- self.addend = -1
- if not before:
- self.addend = 1
- i += self.addend
- sublime.set_timeout(lambda: self.run(i), 100)
-
-
-
-class TodoExtractor(object):
- def __init__(self, settings, filepaths, dirpaths, ignored_dirs, ignored_file_patterns,
- file_counter):
- self.filepaths = filepaths
- self.dirpaths = dirpaths
- self.patterns = settings['patterns']
- self.settings = settings
- self.file_counter = file_counter
- self.ignored_dirs = ignored_dirs
- self.ignored_files = ignored_file_patterns
- self.log = logging.getLogger('SublimeTODO.extractor')
-
- def iter_files(self):
- """"""
- seen_paths_ = []
- files = self.filepaths
- dirs = self.dirpaths
- exclude_dirs = self.ignored_dirs
-
- for filepath in files:
- pth = path.realpath(path.abspath(filepath))
- if pth not in seen_paths_:
- seen_paths_.append(pth)
- yield pth
-
- for dirpath in dirs:
- dirpath = path.abspath(dirpath)
- for dirpath, dirnames, filenames in walk(dirpath):
- ## remove excluded dirs
- ## TODO: These are not patterns. Consider making them glob patterns
- for dir in exclude_dirs:
- if dir in dirnames:
- self.log.debug(u'Ignoring dir: {0}'.format(dir))
- dirnames.remove(dir)
-
- for filepath in filenames:
- pth = path.join(dirpath, filepath)
- pth = path.realpath(path.abspath(pth))
- if pth not in seen_paths_:
- seen_paths_.append(pth)
- yield pth
-
- def filter_files(self, files):
- """"""
- exclude_patterns = [re.compile(patt) for patt in self.ignored_files]
- for filepath in files:
- if any(patt.match(filepath) for patt in exclude_patterns):
- continue
- yield filepath
-
- def search_targets(self):
- """Yield filtered filepaths for message extraction"""
- return self.filter_files(self.iter_files())
-
- def extract(self):
- """"""
- message_patterns = '|'.join(self.patterns.values())
- case_sensitivity = 0 if self.settings.get('case_sensitive', False) else re.IGNORECASE
- patt = re.compile(message_patterns, case_sensitivity)
- for filepath in self.search_targets():
- try:
- f = open(filepath)
- self.log.debug(u'Scanning {0}'.format(filepath))
- for linenum, line in enumerate(f):
- for mo in patt.finditer(line):
- ## Remove the non-matched groups
- matches = [Message(msg_type, msg) for msg_type, msg in mo.groupdict().iteritems() if msg]
- for match in matches:
- yield {'filepath': filepath, 'linenum': linenum + 1, 'match': match}
- except IOError:
- ## Probably a broken symlink
- f = None
- finally:
- self.file_counter.increment()
- if f is not None:
- f.close()
-
-
-class TodoRenderer(object):
- def __init__(self, settings, window, file_counter):
- self.window = window
- self.settings = settings
- self.file_counter = file_counter
-
- @property
- def view_name(self):
- """The name of the new results view. Defined in settings."""
- return self.settings['result_title']
-
- @property
- def header(self):
- hr = u'+ {0} +'.format('-' * 76)
- return u'{hr}\n| TODOS @ {0:<68} |\n| {1:<76} |\n{hr}\n'.format(
- datetime.now().strftime('%A %d %B %Y %H:%M').decode("utf-8"),
- u'{0} files scanned'.format(self.file_counter),
- hr=hr)
-
- @property
- def view(self):
- existing_results = [v for v in self.window.views()
- if v.name() == self.view_name and v.is_scratch()]
- if existing_results:
- v = existing_results[0]
- else:
- v = self.window.new_file()
- v.set_name(self.view_name)
- v.set_scratch(True)
- v.settings().set('todo_results', True)
- return v
-
- def format(self, messages):
- """Yield lines for rendering into results view. Includes headers and
- blank lines.
- Lines are returned in the form (type, content, [data]) where type is either
- 'header', 'whitespace' or 'result'
- """
- key_func = lambda m: m['match'].type
- messages = sorted(messages, key=key_func)
-
- for message_type, matches in groupby(messages, key=key_func):
- matches = list(matches)
- if matches:
- yield ('header', u'\n## {0} ({1})'.format(message_type.upper().decode('utf8', 'ignore'), len(matches)), {})
- for idx, m in enumerate(matches, 1):
- msg = m['match'].msg.decode('utf8', 'ignore') ## Don't know the file encoding
- filepath = path.basename(m['filepath'])
- line = u"{idx}. {filepath}:{linenum} {msg}".format(
- idx=idx, filepath=filepath, linenum=m['linenum'], msg=msg)
- yield ('result', line, m)
-
- def render_to_view(self, formatted_results):
- """This blocks the main thread, so make it quick"""
- ## Header
- result_view = self.view
- edit = result_view.begin_edit()
- result_view.erase(edit, sublime.Region(0, result_view.size()))
- result_view.insert(edit, result_view.size(), self.header)
- result_view.end_edit(edit)
-
- ## Region : match_dicts
- regions = {}
-
- ## Result sections
- for linetype, line, data in formatted_results:
- edit = result_view.begin_edit()
- insert_point = result_view.size()
- result_view.insert(edit, insert_point, line)
- if linetype == 'result':
- rgn = sublime.Region(insert_point, result_view.size())
- regions[rgn] = data
- result_view.insert(edit, result_view.size(), u'\n')
- result_view.end_edit(edit)
-
- result_view.add_regions('results', regions.keys(), '')
-
- ## Store {Region : data} map in settings
- ## TODO: Abstract this out to a storage class Storage.get(region) ==> data dict
- ## Region() cannot be stored in settings, so convert to a primitive type
- # d_ = regions
- d_ = dict(('{0},{1}'.format(k.a, k.b), v) for k, v in regions.iteritems())
- result_view.settings().set('result_regions', d_)
-
- ## Set syntax and settings
- result_view.set_syntax_file('Packages/SublimeTODO/todo_results.hidden-tmLanguage')
- result_view.settings().set('line_padding_bottom', 2)
- result_view.settings().set('line_padding_top', 2)
- result_view.settings().set('word_wrap', False)
- result_view.settings().set('command_mode', True)
- self.window.focus_view(result_view)
-
-
-class WorkerThread(threading.Thread):
- def __init__(self, extractor, renderer):
- self.extractor = extractor
- self.renderer = renderer
- threading.Thread.__init__(self)
-
- def run(self):
- ## Extract in this thread
- todos = self.extractor.extract()
- rendered = list(self.renderer.format(todos))
-
- ## Render into new window in main thread
- def render():
- self.renderer.render_to_view(rendered)
- sublime.set_timeout(render, 10)
-
-
-class FileScanCounter(object):
- """Thread-safe counter used to update the status bar"""
- def __init__(self):
- self.ct = 0
- self.lock = threading.RLock()
- self.log = logging.getLogger('SublimeTODO')
-
- def __call__(self, filepath):
- self.log.debug(u'Scanning %s' % filepath)
- self.increment()
-
- def __str__(self):
- with self.lock:
- return '%d' % self.ct
-
- def increment(self):
- with self.lock:
- self.ct += 1
-
- def reset(self):
- with self.lock:
- self.ct = 0
-
-
-class TodoCommand(sublime_plugin.TextCommand):
-
- def search_paths(self, window, open_files_only=False):
- """Return (filepaths, dirpaths)"""
- return (
- [view.file_name() for view in window.views() if view.file_name()],
- window.folders() if not open_files_only else []
- )
-
- def run(self, edit, open_files_only=False):
- window = self.view.window()
- settings = Settings(self.view.settings().get('todo', {}))
-
-
- ## TODO: Cleanup this init code. Maybe move it to the settings object
- filepaths, dirpaths = self.search_paths(window, open_files_only=open_files_only)
-
- ignored_dirs = settings.get('folder_exclude_patterns', [])
- ## Get exclude patterns from global settings
- ## Is there really no better way to access global settings?
- global_settings = sublime.load_settings('Global.sublime-settings')
- ignored_dirs.extend(global_settings.get('folder_exclude_patterns', []))
-
- exclude_file_patterns = settings.get('file_exclude_patterns', [])
- exclude_file_patterns.extend(global_settings.get('file_exclude_patterns', []))
- exclude_file_patterns.extend(global_settings.get('binary_file_patterns', []))
- exclude_file_patterns = [fnmatch.translate(patt) for patt in exclude_file_patterns]
-
- file_counter = FileScanCounter()
- extractor = TodoExtractor(settings, filepaths, dirpaths, ignored_dirs,
- exclude_file_patterns, file_counter)
- renderer = TodoRenderer(settings, window, file_counter)
-
- worker_thread = WorkerThread(extractor, renderer)
- worker_thread.start()
- ThreadProgress(worker_thread, 'Finding TODOs', '', file_counter)
-
-
-class NavigateResults(sublime_plugin.TextCommand):
- DIRECTION = {'forward': 1, 'backward': -1}
- STARTING_POINT = {'forward': -1, 'backward': 0}
-
- def __init__(self, view):
- super(NavigateResults, self).__init__(view)
-
- def run(self, edit, direction):
- view = self.view
- settings = view.settings()
- results = self.view.get_regions('results')
- if not results:
- sublime.status_message('No results to navigate')
- return
-
- ##NOTE: numbers stored in settings are coerced to floats or longs
- selection = int(settings.get('selected_result', self.STARTING_POINT[direction]))
- selection = selection + self.DIRECTION[direction]
- try:
- target = results[selection]
- except IndexError:
- target = results[0]
- selection = 0
-
- settings.set('selected_result', selection)
- ## Create a new region for highlighting
- target = target.cover(target)
- view.add_regions('selection', [target], 'selected', 'dot')
- view.show(target)
-
-
-class ClearSelection(sublime_plugin.TextCommand):
- def run(self, edit):
- self.view.erase_regions('selection')
- self.view.settings().erase('selected_result')
-
-
-class GotoComment(sublime_plugin.TextCommand):
- def __init__(self, *args):
- self.log = logging.getLogger('SublimeTODO.nav')
- super(GotoComment, self).__init__(*args)
-
- def run(self, edit):
- ## Get the idx of selected result region
- selection = int(self.view.settings().get('selected_result', -1))
- ## Get the region
- selected_region = self.view.get_regions('results')[selection]
- ## Convert region to key used in result_regions (this is tedious, but
- ## there is no other way to store regions with associated data)
- data = self.view.settings().get('result_regions')['{0},{1}'.format(selected_region.a, selected_region.b)]
- self.log.debug(u'Goto comment at {filepath}:{linenum}'.format(**data))
- new_view = self.view.window().open_file(data['filepath'])
- do_when(lambda: not new_view.is_loading(), lambda: new_view.run_command("goto_line", {"line": data['linenum']}))
-
-
-class MouseGotoComment(sublime_plugin.TextCommand):
- def __init__(self, *args):
- self.log = logging.getLogger('SublimeTODO.nav')
- super(MouseGotoComment, self).__init__(*args)
-
- def highlight(self, region):
- target = region.cover(region)
- self.view.add_regions('selection', [target], 'selected', 'dot')
- self.view.show(target)
-
- def get_result_region(self, pos):
- line = self.view.line(pos)
- return line
-
- def run(self, edit):
- if not self.view.settings().get('result_regions'):
- return
- ## get selected line
- pos = self.view.sel()[0].end()
- result = self.get_result_region(pos)
- self.highlight(result)
- data = self.view.settings().get('result_regions')['{0},{1}'.format(result.a, result.b)]
- self.log.debug(u'Goto comment at {filepath}:{linenum}'.format(**data))
- new_view = self.view.window().open_file(data['filepath'])
- do_when(lambda: not new_view.is_loading(), lambda: new_view.run_command("goto_line", {"line": data['linenum']}))
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SublimeTODO/todo_results.hidden-tmLanguage b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SublimeTODO/todo_results.hidden-tmLanguage
deleted file mode 100644
index e0cd6b4..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/SublimeTODO/todo_results.hidden-tmLanguage
+++ /dev/null
@@ -1,49 +0,0 @@
-
-
-
-
- name
- TODO Results
-
- patterns
-
-
- match
-
- ^[\s]{0,2}([\d]+\.) ([^:]+)(:)([\d]+) (.*)$
- captures
-
- 1
-
- name
- constant.numeric.item-number.todo-list
-
- 2
-
- name
- entity.name.filename.todo-list
-
- 3
-
- name
- punctuation.definition.delimiter
-
- 4
-
- name
- constant.numeric.line-number.todo-list
-
- 5
-
- name
- entity.name.match.todo-list
-
-
-
-
- scopeName
- text.todo-list
- uuid
- 2ce8c28e-9c29-4f7f-bc65-7c5311732d29
-
-
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/TrailingSpaces/.gitignore b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/TrailingSpaces/.gitignore
deleted file mode 100644
index 3aa864b..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/TrailingSpaces/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-TODO.md
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/TrailingSpaces/Default.sublime-commands b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/TrailingSpaces/Default.sublime-commands
deleted file mode 100644
index dd4df34..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/TrailingSpaces/Default.sublime-commands
+++ /dev/null
@@ -1,10 +0,0 @@
-[
- {
- "caption": "Trailing Spaces: Toggle Trailing Spaces Highlighting",
- "command": "toggle_trailing_spaces"
- },
- {
- "caption": "Trailing Spaces: Delete Trailing Spaces",
- "command": "delete_trailing_spaces"
- }
-]
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/TrailingSpaces/MIT-LICENSE b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/TrailingSpaces/MIT-LICENSE
deleted file mode 100644
index 7104d54..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/TrailingSpaces/MIT-LICENSE
+++ /dev/null
@@ -1,20 +0,0 @@
-Copyright 2010 Jean-Denis Vauguet
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/TrailingSpaces/Main.sublime-menu b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/TrailingSpaces/Main.sublime-menu
deleted file mode 100644
index 3d966e3..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/TrailingSpaces/Main.sublime-menu
+++ /dev/null
@@ -1,123 +0,0 @@
-[
- {
- "id": "edit",
- "children":
- [
- {
- "caption": "Trailing Spaces",
- "id": "trailing-spaces",
- "children":
- [
- {
- "command": "delete_trailing_spaces",
- "caption": "Delete"
- },
- { "caption": "-" },
- {
- "command": "toggle_trailing_spaces_modified_lines_only",
- "caption": "Modified Lines Only",
- "checkbox": true
- },
- {
- "command": "toggle_trailing_spaces",
- "caption": "Highlight Regions",
- "checkbox": true
- }
- ]
- }
- ]
- },
- {
- "id": "preferences",
- "children":
- [
- {
- "caption": "Package Settings",
- "mnemonic": "P",
- "id": "package-settings",
- "children":
- [
- {
- "caption": "Trailing Spaces",
- "children":
- [
- {
- "command": "open_file",
- "args": {
- "file": "${packages}/TrailingSpaces/README.md",
- "platform": "Windows"
- },
- "caption": "Help"
- },
- {
- "command": "open_file",
- "args": {
- "file": "${packages}/TrailingSpaces/README.md",
- "platform": "OSX"
- },
- "caption": "Help"
- },
- {
- "command": "open_file",
- "args": {
- "file": "${packages}/TrailingSpaces/README.md",
- "platform": "Linux"
- },
- "caption": "Help"
- },
- { "caption": "-" },
- {
- "command": "open_file",
- "args": {
- "file": "${packages}/TrailingSpaces/trailing_spaces.sublime-settings",
- "platform": "Windows"
- },
- "caption": "Settings - Default"
- },
- {
- "command": "open_file",
- "args": {
- "file": "${packages}/TrailingSpaces/trailing_spaces.sublime-settings",
- "platform": "OSX"
- },
- "caption": "Settings - Default"
- },
- {
- "command": "open_file",
- "args": {
- "file": "${packages}/TrailingSpaces/trailing_spaces.sublime-settings",
- "platform": "Linux"
- },
- "caption": "Settings - Default"
- },
- {
- "command": "open_file",
- "args": {
- "file": "${packages}/User/trailing_spaces.sublime-settings",
- "platform": "Windows"
- },
- "caption": "Settings - User"
- },
- {
- "command": "open_file",
- "args": {
- "file": "${packages}/User/trailing_spaces.sublime-settings",
- "platform": "OSX"
- },
- "caption": "Settings - User"
- },
- {
- "command": "open_file",
- "args": {
- "file": "${packages}/User/trailing_spaces.sublime-settings",
- "platform": "Linux"
- },
- "caption": "Settings - User"
- }
- ]
- }
- ]
- }
- ]
- }
-]
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/TrailingSpaces/README.md b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/TrailingSpaces/README.md
deleted file mode 100644
index b5fb775..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/TrailingSpaces/README.md
+++ /dev/null
@@ -1,337 +0,0 @@
-Trailing Spaces
-===============
-
-A [Sublime Text 2](http://www.sublimetext.com/2) and
-[3](http://www.sublimetext.com/3) plugin that allows you to…
-
-**highlight trailing spaces and delete them in a flash!**
-
----
-
-- [Synopsis](#synopsis)
-- [Installation](#installation)
- - [Alternative installation methods](#alternative-installation-methods)
- - [From github](#from-github)
- - [Manually](#manually)
-- [Usage](#usage)
- - [Deletion](#deletion)
- - [Toggling highlighting](#toggling-highlighting)
-- [Options](#options)
- - [Changing the highlighting color](#changing-the-highlighting-color)
- - [Keeping trailing spaces invisible](#keeping-trailing-spaces-invisible)
- - [Include Current Line](#include-current-line)
- - [Include Empty Lines](#include-empty-lines)
- - [Modified Lines Only](#modified-lines-only)
- - [Trim On Save](#trim-on-save)
- - [Save After Trim](#save-after-trim)
- - [Live Matching vs On-demand Matching](#live-matching-vs-on-demand-matching)
- - [For power-users only!](#for-power-users-only)
- - [Disabled for large files](#disabled-for-large-files)
- - [The matching pattern](#the-matching-pattern)
-- [About Sublime Text's built-in features](#about-sublime-texts-built-in-features)
-
-Synopsis
---------
-
-Sublime Text provides a way to automate deletion of trailing spaces *upon file
-saving* (more on this at the end of this file). Depending on your settings, it
-may be more handy to just highlight them and/or delete them by hand, at any
-time. This plugin provides just that, and a *lot* of options to fine-tune the
-way you want to decimate trailing spaces.
-
-Installation
-------------
-
-It is available through
-[Sublime Package Contol](http://wbond.net/sublime_packages/package_control) and
-this is the recommended way of installation (brings configuration instructions,
-automatic updates with changelogs…).
-
-### Alternative installation methods
-
-#### From github
-
-You can install from github if you want, although Package Control automates
-just that. Go to your `Packages` subdirectory under ST2's data directory:
-
-* Windows: `%APPDATA%\Sublime Text 2`
-* OS X: `~/Library/Application Support/Sublime Text 2`
-* Linux: `~/.config/sublime-text-2`
-* Portable Installation: `Sublime Text 2/Data`
-
-Then clone this repository:
-
- git clone git://github.com/SublimeText/TrailingSpaces.git
-
-#### Manually
-
-[Download](https://github.com/SublimeText/TrailingSpaces/archive/master.zip)
-the plugin as a zip. Copy the *Trailing Spaces* directory to its location
-(see prior section).
-
-Usage
------
-
-### Deletion
-
-The main feature you gain from using this plugin is that of deleting all
-trailing spaces in the currently edited document. In order to use this
-deletion feature, you may either:
-
-* click on "Edit / Trailing Spaces / Delete";
-* bind the deletion command to a keyboard shortcut:
-
-To add a key binding, open "Preferences / Key Bindings - User" and add:
-
-``` js
-{ "keys": ["ctrl+shift+t"], "command": "delete_trailing_spaces" }
-```
-
-With this setting, pressing Ctrl + Shift + t will delete all
-trailing spaces at once in the current file! For OSX users, quoting wbond:
-"When porting a key binding across OSes, it is common for the ctrl key on
-Windows and Linux to be swapped out for super on OS X"
-(eg. use "super+ctrl+t" instead).
-
-*Beware*: the binding from this example overrides the default ST's mapping
-for reopening last closed file. You can look at the default bindings in
-"Preferences / Key Bindings - Default".
-
-### Toggling highlighting
-
-At any time, you can toggle highlighting on and off. You may either:
-
-- click on "Edit / Trailing Spaces / Highlight Regions"
-- bind the toggling command to a keyboard shortcut:
-
-``` js
-// I like "d", as in "detect" (overrides a default binding, though).
-{ "keys": ["ctrl+shift+d"], "command": "toggle_trailing_spaces" }
-```
-
-Options
--------
-
-Several options are available to customize the plugin's behavior. Those
-settings are stored in a configuration file, as JSON. You must use a specific
-file: Go to "Preferences / Package Settings / Trailing Spaces / Settings
-- User" to add you custom settings. You can look at the default values in
-"Settings - Default", in the same menu.
-
-A few of them are also accessible through the "Edit / Trailing Spaces" menu.
-Sometimes, editing a setting will require a fresh Sublime Text to be applied
-properly, so try relaunching ST before reporting an issue ;)
-
-All settings are global (ie. applied to all opened documents).
-
-### Changing the highlighting color
-
-*Default: "invalid"*
-
-You may change the highlighting color, providing a color scope name such as
- "error", "comment"… just like that:
-
-``` js
-{ "trailing_spaces_highlight_color": "comment" }
-```
-
-The scope should be defined in your current theme file. Here is a dummy,
-fully-fledged example (feel free to cut irrelevant pieces for your settings)
-of such a custom color scope:
-
-``` xml
-
- name
- Invalid - Illegal
- scope
- invalid.illegal
- settings
-
- background
- #F93232
- fontStyle
-
- foreground
- #F9F2CE
-
-
-```
-
-You would then use the value of "invalid.illegal".
-
-### Keeping trailing spaces invisible
-
-You can make trailing spaces "invisible" yet still rely on the deletion
-command. To do that, set the highlight scope to an empty string:
-
-``` js
-{ "trailing_spaces_highlight_color": "" }
-```
-
-Beware: this is **not** the same as *disabling* the highlighting (see "On-
-Demand Matching" below). With this setting, the plugin still runs when opening
-a file, and in the background afterwards; you just won't see the trailing
-spaces (they are being highlighted with a "transparent" color).
-
-### Include Current Line
-
-*Default: true*
-
-Highlighting of trailing spaces in the currently edited line can be annoying:
-each time you are about to start a new word, the space you type is matched as
-a trailing spaces. Currently edited line can thus be ignored:
-
-``` js
-{ "trailing_spaces_include_current_line": false }
-```
-
-Even though the trailing spaces are not highlighted on this line, they are
-still internally matched and will be delete when firing the deletion command.
-
-### Include Empty Lines
-
-*Default: true*
-
-When firing the deletion command, empty lines are matched as trailing regions,
-and end up being deleted. You can specifically ignore them:
-
-``` js
-{ "trailing_spaces_include_empty_lines": false }
-```
-
-They will not be highlighted either.
-
-### Modified Lines Only
-
-*Default: false (reopen ST to update)*
-
-When firing the deletion command, trailing regions *in the entire document* are
-deleted. There are some use-cases when deleting trailing spaces *only on lines
-you edited* is smarter; for instance when commiting changes to some third-party
-source code.
-
-At any time, you can change which area is covered when deleting trailing
-regions. You may either:
-
-- click on "Edit / Trailing Spaces / Modified Lines Only"
-- specify as a setting:
-
-``` js
-{ "trailing_spaces_modified_lines_only": true }
-```
-
-There is also a command to toggle this feature on and off. You may thus define
-a key binding:
-
-``` js
-{ "keys": ["pick+a+shortcut"], "command": "toggle_trailing_spaces_modified_lines_only" }
-```
-
-### Trim On Save
-
-*Default: false*
-
-Setting this to `true` will ensure trailing spaces are deleted when you save
-your document. It abides by the other settings, such as *Modified Lines Only*.
-
-``` js
-{ "trailing_spaces_trim_on_save": true }
-```
-
-### Save After Trim
-
-*Default: false*
-
-You may not want to always trim trailing spaces on save, but the other way
-around could prove useful. Setting this to `true` will automatically save your
-document after you fire the deletion command:
-
-``` js
-{ "trailing_spaces_save_after_trim": true }
-```
-
-It is obviously ignored if *Trim On Save* is on.
-
-### Live Matching vs On-demand Matching
-
-*Default: true (reopen ST to update)*
-
-By default, trailing regions are matched every time you edit the document, and
-when you open it.
-
-This feature is entirely optional and you may set it off: firing the deletion
-command will cause the trailing spaces to be deleted as expected even though
-they were not matched prior to your request. If you are afraid of the plugin
-to cause slowness (for instance, you already installed several *heavy*
-plugins), you can disable live matching:
-
-``` js
-{ "trailing_spaces_enabled": false }
-```
-
-In this case, for no trailing regions are matched until you request them to be
-deleted, no highlighting occurs—it is in fact disabled, regardless of your
-"scope" setting. If you want to check the trailing spaces regions, you can
-toggle highlighting on and off. In this case, it may come in handy to define
-a binding for the toggling command. When "On-demand Matching" is on and some
-trailing spaces are highlighted, added ones will obviously not be. Toggling
-highlight off and on will refresh them.
-
-### For power-users only!
-
-#### Disabled for large files
-
-The plugin is disabled altogether for large files, for it may cause slowness.
-The default threshold is around 1 million of characters. This is
-configurable (in "File Settings - User") and the unit is number of chars:
-
-``` js
-{ "trailing_spaces_file_max_size": 1000}
-```
-
-#### The matching pattern
-
-*Default: [ \t]+*
-
-Trailing spaces are line-ending regions containing at least one simple space,
-tabs, or both. This pattern should be all you ever need, but if you *do* want
-to abide by another definition to cover edge-cases, go ahead:
-
-``` js
-// *danger* will match newline chars and many other folks
-"trailing_spaces_regexp": "[\\s]+"
-```
-
-About Sublime Text's built-in features
---------------------------------------
-
-Trailing Spaces is designed to be a drop-in replacement of the limited
-*Trim Whitespace On Save* built-in feature. ST is indeed able to delete
-trailing spaces upon saving files, and maybe that's all you need!
-
-In order to enable this behavior, edit "Preferences / Settings - User"
-to add the following:
-
-``` js
-{ "trim_trailing_white_space_on_save": true }
-```
-
-As Trailing Spaces bypasses this setting, you will have to uninstall it to
-benefit from this setting.
-
-Made a little less obvious in the documentation are settings to showcase
-whitespaces (*not only trailing ones!*):
-
-``` js
-{ "draw_white_space": "all" }
-```
-
-and to ensure a newline is kept at end of file upon saving:
-
-``` js
-{ "ensure_newline_at_eof_on_save": true }
-```
-
-The former will display *all* whitespaces in your files. There is another value
-of "selection" which display whitespaces under (you got it) your current text
-selection.
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/TrailingSpaces/messages.json b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/TrailingSpaces/messages.json
deleted file mode 100644
index efaff86..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/TrailingSpaces/messages.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "install": "messages/install.txt",
- "v1.0.0": "messages/v1.0.0.txt"
-}
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/TrailingSpaces/messages/install.txt b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/TrailingSpaces/messages/install.txt
deleted file mode 100644
index 141f30c..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/TrailingSpaces/messages/install.txt
+++ /dev/null
@@ -1,40 +0,0 @@
-
-
- Thank you for installing Trailing Spaces
- ----------------------------------------
-
- You're now ready to give trailing spaces *a hard time*!
-
- Wait… I guess Package Control just introduced some of them :(
- Why don't you try clicking "Edit / Trailing Spaces / Delete"?
-
-
-
-Documentation
-=============
-
-Although the usage of this plugin is dead simple, it comes with several options. All
-details are available in the documentation, and you can read it by clicking on
-"Preferences / Package Settings / Trailing Spaces / Help", or in a prettier form, by
-browsing https://github.com/SublimeText/TrailingSpaces.
-
-Key Binding
-===========
-
-This plugin does not come with a default key binding for the deletion command. You can
-pick your own key binding and define it in "Preferences / Key Bindings - User", or just
-stick to using the menu entry under "Edit". Check the help for advice on this.
-
-Upgrades & Issues
-=================
-
-Package Control will automatically update all packages every time the editor is started,
-so there is nothing for you to worry about. If you however do find the plugin not to work
-as it used to, head to the issues tracker (see links below) to report the problem.
-
-Useful Links
-============
-
-* Documentation & Code: https://github.com/SublimeText/TrailingSpaces
-* Report issues / Request New Features / Roadmap: https://github.com/SublimeText/TrailingSpaces/issues
-* Follow me on twitter: @jdvauguet
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/TrailingSpaces/messages/v1.0.0.txt b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/TrailingSpaces/messages/v1.0.0.txt
deleted file mode 100644
index adb1f3b..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/TrailingSpaces/messages/v1.0.0.txt
+++ /dev/null
@@ -1,65 +0,0 @@
-
-
- Trailing Spaces update [v1.0.0]
- -------------------------------
-
- Hope you've been happy gaving trailin' a hard time so far.
-
- I added several features to help you in this honorable quest…
-
- All details accessible through:
-
- "Preferences / Package Settings / Trailing Spaces / Help"
-
-
-
-New feature: Modified Lines Only
-================================
-
-As proposed by a fellow user, it is now possible to target only the lines
-modified by You and You Only when deleting trailing spaces.
-
-This feature will certainly please coders who edit third-party code filled
-with trailing spaces but do not want to commit giant diffs, just their little
-fix, while keeping it clean.
-
-New feature: Trim On Save
-=========================
-
-This option allows for automatic deletion upon saving. No more lost trailing
-spaces! A perfect combo to the "Modified Lines Only" setting I guess.
-
-New feature: Save After Trim
-============================
-
-A different kind of automation: many users just want those trailings out and
-forget 'bout them. It is now made even easier with this auto-saving hook. Fire
-the deletion command, and your document is clean on the hard drive!
-
-At the current time, "Trim On Save" and "Save After Trim" cannot be both
-enabled (the former wins), but this is on the roadmap.
-
-New Menu
-========
-
-Some of the settings seemed a bit more important than the others. Along the
-deletion command, the toggling command/state and the "Modified Lines Only"
-setting have been elected first-class citizens of the new "Edit / Trailing
-Spaces" menu. Any change made by click here is live, persistent and reflected
-in the JSON settings file. Settings are global to all open documents.
-
-Improvements & Misc.
-====================
-
-- Support for custom matching patterns (danger!).
-- Performance improvements (reduced overhead, with some room for further
- improvements).
-- Better documentation (both code & user doc).
-- Lazy "On-demand" matching improved.
-
-Useful Links
-============
-
-* Documentation & Code: https://github.com/SublimeText/TrailingSpaces
-* Report issues / Request New Features / Roadmap: https://github.com/SublimeText/TrailingSpaces/issues
-* Follow me on twitter: @jdvauguet
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/TrailingSpaces/package-metadata.json b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/TrailingSpaces/package-metadata.json
deleted file mode 100644
index 38e6ff6..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/TrailingSpaces/package-metadata.json
+++ /dev/null
@@ -1 +0,0 @@
-{"url": "https://github.com/SublimeText/TrailingSpaces", "version": "2013.07.31.14.53.02", "description": "Highlight trailing spaces and delete them in a flash."}
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/TrailingSpaces/packages.json b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/TrailingSpaces/packages.json
deleted file mode 100644
index f7bb205..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/TrailingSpaces/packages.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "schema_version": "1.2",
- "packages": [
- {
- "name": "TrailingSpaces",
- "description": "Highlight trailing spaces and delete them in a flash.",
- "author": "Jean-Denis Vauguet",
- "homepage": "https://github.com/SublimeText/TrailingSpaces/",
- "last_modified": "2013-03-08 01:00:00",
- "platforms": {
- "*": [
- {
- "version": "1.0.0",
- "url": "https://nodeload.github.com/SublimeText/TrailingSpaces/zip/v1.0.0"
- }
- ]
- }
- }
- ]
-}
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/TrailingSpaces/trailing_spaces.py b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/TrailingSpaces/trailing_spaces.py
deleted file mode 100644
index 57a8902..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/TrailingSpaces/trailing_spaces.py
+++ /dev/null
@@ -1,453 +0,0 @@
-'''
-Provides both a trailing spaces highlighter and a deletion command.
-
-See README.md for details.
-
-@author: Jean-Denis Vauguet , Oktay Acikalin
-@license: MIT (http://www.opensource.org/licenses/mit-license.php)
-@since: 2011-02-25
-'''
-
-import sublime
-import sublime_plugin
-import difflib
-import codecs
-
-DEFAULT_MAX_FILE_SIZE = 1048576
-DEFAULT_IS_ENABLED = True
-DEFAULT_MODIFIED_LINES_ONLY = False
-
-# Global settings object and flags.
-# Flags duplicate some of the (core) JSON settings, in case the settings file has
-# been corrupted or is empty (ST2 really dislikes that!)
-ts_settings_filename = "trailing_spaces.sublime-settings"
-ts_settings = None
-trailing_spaces_live_matching = DEFAULT_IS_ENABLED
-trim_modified_lines_only = DEFAULT_MODIFIED_LINES_ONLY
-startup_queue = []
-on_disk = None
-
-
-# Private: Loads settings and sets whether the plugin (live matching) is enabled.
-#
-# Returns nothing.
-def plugin_loaded():
- global ts_settings_filename, ts_settings, trailing_spaces_live_matching
- global current_highlighting_scope, trim_modified_lines_only, startup_queue
- global DEFAULT_COLOR_SCOPE_NAME, on_disk
-
- ts_settings = sublime.load_settings(ts_settings_filename)
- trailing_spaces_live_matching = bool(ts_settings.get("trailing_spaces_enabled",
- DEFAULT_IS_ENABLED))
- current_highlighting_scope = ts_settings.get("trailing_spaces_highlight_color",
- "invalid")
- DEFAULT_COLOR_SCOPE_NAME = current_highlighting_scope
- trim_modified_lines_only = bool(ts_settings.get("trailing_spaces_modified_lines_only",
- DEFAULT_MODIFIED_LINES_ONLY))
-
- if trailing_spaces_live_matching:
- for view in startup_queue:
- match_trailing_spaces(view)
- else:
- current_highlighting_scope = ""
- if ts_settings.get("trailing_spaces_highlight_color") != current_highlighting_scope:
- persist_settings()
-
-
-# Private: Updates user's settings with in-memory values.
-#
-# Allows for persistent settings from the menu.
-#
-# Returns nothing.
-def persist_settings():
- sublime.save_settings(ts_settings_filename)
-
-
-# Private: Determine if the view is a "Find results" view.
-#
-# view - the view, you know
-#
-# Returns True or False.
-def is_find_results(view):
- return view.settings().get('syntax') and "Find Results" in view.settings().get('syntax')
-
-
-# Private: Get the regions matching trailing spaces.
-#
-# As the core regexp matches lines, the regions are, well, "per lines".
-#
-# view - the view, you know
-#
-# Returns both the list of regions which map to trailing spaces and the list of
-# regions which are to be highlighted, as a list [matched, highlightable].
-def find_trailing_spaces(view):
- sel = view.sel()[0]
- line = view.line(sel.b)
- include_empty_lines = bool(ts_settings.get("trailing_spaces_include_empty_lines",
- DEFAULT_IS_ENABLED))
- include_current_line = bool(ts_settings.get("trailing_spaces_include_current_line",
- DEFAULT_IS_ENABLED))
- regexp = ts_settings.get("trailing_spaces_regexp") + "$"
- no_empty_lines_regexp = "(?<=\S)%s$" % regexp
-
- offending_lines = view.find_all(regexp if include_empty_lines else no_empty_lines_regexp)
-
- if include_current_line:
- return [offending_lines, offending_lines]
- else:
- current_offender = view.find(regexp if include_empty_lines else no_empty_lines_regexp, line.a)
- removal = False if current_offender == None else line.intersects(current_offender)
- highlightable = [i for i in offending_lines if i != current_offender] if removal else offending_lines
- return [offending_lines, highlightable]
-
-
-# Private: Find the fraking trailing spaces in the view and flags them as such!
-#
-# It will refresh highlighted regions as well. Does not execute if the
-# document's size exceeds the file_max_size setting, or if the fired in a view
-# which is not a legacy document (helper/build views and so on).
-#
-# view - the view, you know
-#
-# Returns nothing.
-def match_trailing_spaces(view):
- if ts_settings is None:
- startup_queue.append(view)
- return
-
- # Silently pass if file is too big.
- if max_size_exceeded(view):
- return
-
- if not is_find_results(view):
- (matched, highlightable) = find_trailing_spaces(view)
- add_trailing_spaces_regions(view, matched)
- highlight_trailing_spaces_regions(view, highlightable)
-
-
-# Private: Checks whether the document is bigger than the max_size setting.
-#
-# view - the view, you know
-#
-# Returns True or False.
-def max_size_exceeded(view):
- return view.size() > ts_settings.get('trailing_spaces_file_max_size',
- DEFAULT_MAX_FILE_SIZE)
-
-
-# Private: Marks specified regions as trailing spaces.
-#
-# view - the view, you know
-# regions - regions qualified as trailing spaces
-#
-# Returns nothing.
-def add_trailing_spaces_regions(view, regions):
- view.erase_regions('TrailingSpacesMatchedRegions')
- view.add_regions('TrailingSpacesMatchedRegions',
- regions,
- "",
- "",
- sublime.HIDE_ON_MINIMAP)
-
-
-# Private: Highlights specified regions as trailing spaces.
-#
-# It will use the scope enforced by the state of the toggable highlighting.
-#
-# view - the view, you know
-# regions - regions qualified as trailing spaces
-#
-# Returns nothing.
-def highlight_trailing_spaces_regions(view, regions):
- view.erase_regions("TrailingSpacesHighlightedRegions")
- view.add_regions('TrailingSpacesHighlightedRegions',
- regions,
- current_highlighting_scope or "",
- "",
- sublime.HIDE_ON_MINIMAP)
-
-
-# Private: Toggles highlighting of all trailing spaces in the view.
-#
-# It has no effect is the plugin is disabled.
-#
-# view - the view, you know
-#
-# Returns True (highlighting was turned on) or False (turned off).
-def toggle_highlighting(view):
- global current_highlighting_scope
-
- # If the scope is that of an invisible, there is nothing to toggle.
- if DEFAULT_COLOR_SCOPE_NAME == "":
- return "disabled!"
-
- # If performing live, highlighted trailing regions must be updated
- # internally.
- if not trailing_spaces_live_matching:
- (matched, highlightable) = find_trailing_spaces(view)
- highlight_trailing_spaces_regions(view, highlightable)
-
- scope = DEFAULT_COLOR_SCOPE_NAME if current_highlighting_scope == "" else ""
- current_highlighting_scope = scope
- highlight_trailing_spaces_regions(view, view.get_regions('TrailingSpacesHighlightedRegions'))
- return "off" if current_highlighting_scope == "" else "on"
-
-
-# Clear all the highlighted regions in all views.
-#
-# FIXME: this is not used! Delete?
-#
-# window - the window, you know
-#
-# Returns nothing.
-def clear_trailing_spaces_highlight(window):
- for view in window.views():
- view.erase_regions('TrailingSpacesMatchedRegions')
-
-
-# Find edited lines since last save, as line numbers, based on diff.
-#
-# It uses a Differ object to compute the diff between the file as red on the
-# disk, and the current buffer (which may differ from the disk's state). See
-# http://docs.python.org/2/library/difflib.html for details about diff codes.
-#
-# It relies on a full diff, so it may be expensive computation for very large
-# files (diff generation + looping through all lines).
-#
-# old - a buffer of lines, as in "old version"
-# new - a buffer of lines, as in "new version"
-#
-# Returns the list of edited line numbers.
-def modified_lines_as_numbers(old, new):
- d = difflib.Differ()
- diffs = d.compare(old, new)
-
- # Pretty Naive Algorithm (tm):
- # - split off the "Differ code", to check whether:
- # - the line is in either in both files or just b: increment the line number
- # - the line is only in b: it qualifies as an edited line!
- # Starting from -1 as ST2 is internally 0-based for lines.
- lineNum = -1
- edited_lines = []
- for line in diffs:
- code = line[:2]
- # those lines with "? " are not real! watch out!
- if code in (" ", "+ "):
- lineNum += 1
- if code == "+ ":
- edited_lines.append(lineNum)
-
- return False if not edited_lines else edited_lines
-
-
-# Private: Find the dirty lines.
-#
-# view - the view, you know
-#
-# Returns the list of regions matching dirty lines.
-def get_modified_lines(view):
- try:
- on_disk
- on_buffer = view.substr(sublime.Region(0, view.size())).splitlines()
- except UnicodeDecodeError:
- sublime.status_message("File format incompatible with this feature (UTF-8 files only)")
- return
-
- lines = []
- line_numbers = modified_lines_as_numbers(on_disk, on_buffer)
- if line_numbers:
- lines = [view.full_line(view.text_point(number,0)) for number in line_numbers]
- return lines
-
-
-# Private: Finds the trailing spaces regions to be deleted.
-#
-# It abides by the user settings: while in mode "Only Modified Lines", it returns
-# the subset of trailing spaces regions which are within dirty lines; otherwise, it
-# returns all trailing spaces regions for the document.
-#
-# view - the view, you know
-#
-# Returns a list of regions to be deleted.
-def find_regions_to_delete(view):
- # If the plugin has been running in the background, regions have been matched.
- # Otherwise, we must find trailing spaces right now!
- if trailing_spaces_live_matching:
- regions = view.get_regions('TrailingSpacesMatchedRegions')
- else:
- (regions, highlightable) = find_trailing_spaces(view)
-
- # Filtering is required in case triming is restricted to dirty regions only.
- if trim_modified_lines_only:
- modified_lines = get_modified_lines(view)
-
- # If there are no dirty lines, don't do nothing.
- if not modified_lines:
- return
-
- # Super-private: filters trailing spaces regions to dirty lines only.
- #
- # As one cannot perform a smart find_all within arbitrary boundaries, we must do some
- # extra work:
- # - we want to loop through the modified lines set, not the whole trailing regions
- # - but we need a way to match modified lines with trailings to those very regions
- #
- # Hence the reversed dict on regions: keys are the text_point of the begining of
- # each region, values are the region's actual boundaries. As a Region is unhashable,
- # trailing regions are being recreated later on from those two values.
- #
- # We loop then loop through the modified lines: for each line, we get its begining
- # text_point, and check whether it matches a line with trailing spaces in the
- # reversed dict. If so, this is a match (a modified line with trailing spaces), so
- # we can re-create and store a Region for the relevant trailing spaces boundaries.
- #
- # Returns the filtered list of trailing spaces regions for the modified lines set.
- def only_those_with_trailing_spaces():
- regions_by_begin = {}
- matches = []
- for region in regions:
- begin = view.line(region).begin()
- regions_by_begin[begin] = (region.begin(), region.end())
-
- for line in modified_lines:
- text_point = line.begin()
- if text_point in regions_by_begin:
- matches.append(sublime.Region(regions_by_begin[text_point][0], regions_by_begin[text_point][1]))
-
- return matches
-
- regions = only_those_with_trailing_spaces()
-
- return regions
-
-# Private: Deletes the trailing spaces regions.
-#
-# view - the view, you know
-# edit - the Edit object spawned by the deletion command
-#
-# Returns the number of deleted regions.
-def delete_trailing_regions(view, edit):
- regions = find_regions_to_delete(view)
-
- if regions:
- # Trick: reversing the regions takes care of the growing offset while
- # deleting the successive regions.
- regions.reverse()
- for r in regions:
- view.erase(edit, r)
- return len(regions)
- else:
- return 0
-
-
-# Public: Toggles the highlighting on or off.
-class ToggleTrailingSpacesCommand(sublime_plugin.WindowCommand):
- def run(self):
- view = self.window.active_view()
- if max_size_exceeded(view):
- sublime.status_message("File is too big, trailing spaces handling disabled.")
- return
-
- state = toggle_highlighting(view)
- ts_settings.set("trailing_spaces_highlight_color", current_highlighting_scope)
- persist_settings()
- sublime.status_message('Highlighting of trailing spaces is %s' % state)
-
- def is_checked(self):
- return current_highlighting_scope != ""
-
-
-# Public: Toggles "Modified Lines Only" mode on or off.
-class ToggleTrailingSpacesModifiedLinesOnlyCommand(sublime_plugin.WindowCommand):
- def run(self):
- global trim_modified_lines_only
-
- was_on = ts_settings.get("trailing_spaces_modified_lines_only")
- ts_settings.set("trailing_spaces_modified_lines_only", not was_on)
- persist_settings()
-
- # TODO: use ts_settings.add_on_change() when it lands in ST3
- trim_modified_lines_only = ts_settings.get('trailing_spaces_modified_lines_only')
- message = "Let's trim trailing spaces everywhere" if was_on \
- else "Let's trim trailing spaces only on modified lines"
- sublime.status_message(message)
-
- def is_checked(self):
- return ts_settings.get("trailing_spaces_modified_lines_only")
-
-
-# Public: Matches and highlights trailing spaces on key events, according to the
-# current settings.
-class TrailingSpacesListener(sublime_plugin.EventListener):
- def on_modified(self, view):
- if trailing_spaces_live_matching:
- match_trailing_spaces(view)
-
- def on_activated(self, view):
- if trailing_spaces_live_matching:
- match_trailing_spaces(view)
-
- def on_selection_modified(self, view):
- if trailing_spaces_live_matching:
- match_trailing_spaces(view)
-
- def on_activated(self, view):
- self.freeze_last_version(view)
- if trailing_spaces_live_matching:
- match_trailing_spaces(view)
-
- def on_pre_save(self, view):
- self.freeze_last_version(view)
- if ts_settings.get("trailing_spaces_trim_on_save"):
- view.run_command("delete_trailing_spaces")
-
- # Toggling messes with what is red from the disk, and it breaks the diff
- # used when modified_lines_only is true. Honestly, I don't know why (yet).
- # Anyway, let's cache the persisted version of the document's buffer for
- # later use on specific event, so that we always have a decent version of
- # "what's on the disk" to work with.
- def freeze_last_version(self, view):
- global on_disk
-
- file_name = view.file_name()
- # For some reasons, the on_activated hook gets fired on a ghost document
- # from time to time.
- if file_name:
- on_disk = codecs.open(file_name, "r", "utf-8").read().splitlines()
-
-
-# Public: Deletes the trailing spaces.
-class DeleteTrailingSpacesCommand(sublime_plugin.TextCommand):
- def run(self, edit):
- if max_size_exceeded(self.view):
- sublime.status_message("File is too big, trailing spaces handling disabled.")
- return
-
- deleted = delete_trailing_regions(self.view, edit)
-
- if deleted:
- if ts_settings.get("trailing_spaces_save_after_trim") \
- and not ts_settings.get("trailing_spaces_trim_on_save"):
- sublime.set_timeout(lambda: self.save(self.view), 10)
-
- msg_parts = {"nbRegions": deleted,
- "plural": 's' if deleted > 1 else ''}
- message = "Deleted %(nbRegions)s trailing spaces region%(plural)s" % msg_parts
- else:
- message = "No trailing spaces to delete!"
-
- sublime.status_message(message)
-
- def save(self, view):
- if view.file_name() is None:
- view.run_command('prompt_save_as')
- else:
- view.run_command('save')
-
-
-# ST3 features a plugin_loaded hook which is called when ST's API is ready.
-#
-# We must therefore call our init callback manually on ST2. It must be the last
-# thing in this plugin (thanks, beloved contributors!).
-if not int(sublime.version()) > 3000:
- plugin_loaded()
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/TrailingSpaces/trailing_spaces.sublime-settings b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/TrailingSpaces/trailing_spaces.sublime-settings
deleted file mode 100644
index 235c739..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/TrailingSpaces/trailing_spaces.sublime-settings
+++ /dev/null
@@ -1,56 +0,0 @@
-// Trailing Spaces' default settings.
-//
-// In order to tweak the settings, you should NOT edit this file, but instead
-// the user-specific, empty-by-default version under "Preferences / Package
-// Settings / Trailing Spaces / Settings - User".
-//
-// See Trailing Spaces' README for detailled instructions.
-{
- // By default, Trailing Spaces is "live". It means the trailing spaces
- // regions will be matched in the background, and highlighted if a color
- // scope is defined, when the document is opened and edited.
- // Set to false to disable live matching and highlighting (the deletion
- // command remains available, so-called "lazy matching").
- "trailing_spaces_enabled" : true,
-
- // Highlight color is specified as a scope. You may define and use a custom
- // scope to better fit your colorscheme.
- "trailing_spaces_highlight_color" : "invalid",
-
- // By default, empty lines are cleared as well when calling the deletion
- // command.
- // Set to false to ignore empty lines upon deletion.
- "trailing_spaces_include_empty_lines" : true,
-
- // By default, the line being currently edited will have its trailing
- // spaces highlighted.
- // Set to false to ignore trailing spaces on the edited line.
- "trailing_spaces_include_current_line" : true,
-
- // By default, trailing spaces are deleted within the whole document.
- // Set to true to affect only the lines you edited since last save.
- // Trailing spaces will still be searched for and highlighted in the whole
- // document.
- "trailing_spaces_modified_lines_only": false,
-
- // By default, nothing happens on save.
- // Set to true to trim trailing spaces before saving, with respect to the
- // other settings.
- "trailing_spaces_trim_on_save": false,
-
- // By default, deleting trailing spaces does not cause the document to be
- // saved.
- // Set to true to force saving after trailing spaces have been deleted.
- // This setting is irrelevant and will be ignored if trim_on_save is true.
- "trailing_spaces_save_after_trim": false,
-
- // ---- NEXT SETTINGS ARE FOR POWER USERS ONLY! ----
-
- // Highlighting will be disabled if the edited file's size is larger than
- // this.
- // Adjust the value (in number of chars) to whatever fits your performance.
- "trailing_spaces_file_max_size" : 1048576,
-
- // By default, only simple spaces and tabs are matched as "trailing spaces".
- "trailing_spaces_regexp": "[ \t]+"
-}
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/ZZZ.EthanBrown.SublimeKeyMap.Editor/Default (OSX).sublime-keymap b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/ZZZ.EthanBrown.SublimeKeyMap.Editor/Default (OSX).sublime-keymap
deleted file mode 100644
index 54262bb..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/ZZZ.EthanBrown.SublimeKeyMap.Editor/Default (OSX).sublime-keymap
+++ /dev/null
@@ -1,442 +0,0 @@
- [
- // since we assign super+Shift+V to clipboard manager, use paste / indent with default super+v
- { "keys": ["super+v"], "command": "paste_and_indent" },
-
- //HACK: override the vertical column selections to use Ctrl+Shift in RDP
- { "keys": ["ctrl+shift+up"], "command": "select_lines", "args": {"forward": false} },
- { "keys": ["ctrl+shift+down"], "command": "select_lines", "args": {"forward": true} },
-
- //HACK: restore default shift+tab keybindings because SmartMarkdown messes with them too much
- { "keys": ["shift+tab"], "command": "insert", "args": {"characters": "\t"} },
- { "keys": ["shift+tab"], "command": "unindent", "context":
- [
- { "key": "setting.shift_tab_unindent", "operator": "equal", "operand": true }
- ]
- },
- { "keys": ["shift+tab"], "command": "unindent", "context":
- [
- { "key": "preceding_text", "operator": "regex_match", "operand": "^[\t ]*" }
- ]
- },
- { "keys": ["shift+tab"], "command": "unindent", "context":
- [
- { "key": "text", "operator": "regex_contains", "operand": "\n" }
- ]
- },
- { "keys": ["shift+tab"], "command": "prev_field", "context":
- [
- { "key": "has_prev_field", "operator": "equal", "operand": true }
- ]
- },
-
- //Abacus - https://github.com/khiltd/Abacus
- { "keys": ["ctrl+alt+\\"], "command": "abacus" },
-
- // Bracketeer - https://github.com/colinta/SublimeBracketeer
- { "keys": ["super+]"], "command": "bracketeer_indent" },
- { "keys": ["ctrl+shift+["], "command": "bracketeer_select" },
- { "keys": ["ctrl+["], "command": "bracketeer_goto", "args": { "goto": "left" } },
- { "keys": ["ctrl+]"], "command": "bracketeer_goto", "args": { "goto": "right" } },
- { "keys": ["ctrl+alt+["], "command": "bracketeer_goto", "args": { "goto": "both" } },
- { "keys": ["ctrl+alt+]"], "command": "bracketeer_goto", "args": { "goto": "both" } },
- //|
- //| BRACKETEER
- //|
- { "keys": ["{"], "command": "bracketeer", "args": { "braces": "{}", "unindent": true } },
- { "keys": ["}"], "command": "bracketeer", "args": { "braces": "{}", "pressed": "}", "unindent": true } },
- { "keys": ["["], "command": "bracketeer", "args": { "braces": "[]" } },
- { "keys": ["]"], "command": "bracketeer", "args": { "braces": "[]", "pressed": "]" } },
- { "keys": ["("], "command": "bracketeer", "args": { "braces": "()" } },
- { "keys": [")"], "command": "bracketeer", "args": { "braces": "()", "pressed": ")" } },
- //| reStructured Text
- { "keys": ["alt+`"], "command": "bracketeer", "args": { "braces": "````", "pressed": "``" }, "context":
- [
- { "key": "selector", "operator": "equal", "operand": "text.restructuredtext" }
- ]
- },
- { "keys": ["*"], "command": "bracketeer", "args": { "braces": "**", "pressed": "*" }, "context":
- [
- { "key": "selector", "operator": "equal", "operand": "text.restructuredtext" }
- ]
- },
- //| DJANGO CURLIES
- // For django, liquid, jinja. All the grammars *I* have list 'source.smarty' as
- // when the cursor is inside "{}"s
- { "keys": ["{"], "command": "bracketeer", "args": { "braces": "{ }" }, "context":
- [{ "key": "selector", "operator": "equal", "operand": "source.smarty" }]
- },
- { "keys": ["{"], "command": "bracketeer", "args": { "braces": "{ }" }, "context":
- [{ "key": "selector", "operator": "equal", "operand": "meta.brace.curly" }]
- },
- { "keys": ["%"], "command": "bracketeer", "args": { "braces": "% %" }, "context":
- [{ "key": "selector", "operator": "equal", "operand": "source.smarty" }]
- },
- { "keys": ["%"], "command": "bracketeer", "args": { "braces": "% %" }, "context":
- [
- { "key": "selector", "operator": "equal", "operand": "meta.brace.curly" },
- { "key": "preceding_text", "operator": "regex_contains", "operand": "<$", "match_all": true }
- ]
- },
- { "keys": ["%"], "command": "insert_snippet", "args": { "contents": " $1 %>$0" }, "context":
- [
- { "key": "selector", "operator": "equal", "operand": "source.ruby" },
- { "key": "preceding_text", "operator": "regex_contains", "operand": "<%$", "match_all": true }
- ]
- },
- { "keys": [">"], "command": "insert_snippet", "args": { "contents": ">$1<% $0" }, "context":
- [
- { "key": "selector", "operator": "equal", "operand": "source.ruby" },
- { "key": "preceding_text", "operator": "regex_contains", "operand": "%$", "match_all": true }
- ]
- },
- { "keys": ["="], "command": "insert_snippet", "args": { "contents": "= $1 %>$0" }, "context":
- [
- { "key": "selector", "operator": "equal", "operand": "source.ruby" },
- { "key": "preceding_text", "operator": "regex_contains", "operand": "<%$", "match_all": true }
- ]
- },
- { "keys": ["-"], "command": "insert_snippet", "args": { "contents": "- $1 %>$0" }, "context":
- [
- { "key": "selector", "operator": "equal", "operand": "source.ruby" },
- { "key": "preceding_text", "operator": "regex_contains", "operand": "<%$", "match_all": true }
- ]
- },
- { "keys": ["#"], "command": "bracketeer", "args": { "braces": "# #" }, "context":
- [{ "key": "selector", "operator": "equal", "operand": "source.smarty" }]
- },
- //| QUOTES
- { "keys": ["\""], "command": "bracketeer", "args": { "braces": "\"\"", "pressed": "\"" } },
- { "keys": ["ctrl+'","ctrl+'"], "command": "bracketeer", "args": { "braces": "\"\"\"\n\n\"\"\"" } },
- { "keys": ["'"], "command": "bracketeer", "args": { "braces": "''", "pressed": "'" } },
- { "keys": ["ctrl+'","'"], "command": "bracketeer", "args": { "braces": "'''\n\n'''" } },
- { "keys": ["`"], "command": "bracketeer", "args": { "braces": "``", "pressed": "`" } },
- { "keys": ["ctrl+'","`"], "command": "insert_snippet", "args": { "contents": "```${1:syntax}\n$0\n```" } },
- { "keys": ["«"], "command": "bracketeer", "args": { "braces": "«»" } },
- { "keys": ["»"], "command": "bracketeer", "args": { "braces": "«»", "pressed": "»" } },
- { "keys": ["‹"], "command": "bracketeer", "args": { "braces": "‹›" } },
- { "keys": ["›"], "command": "bracketeer", "args": { "braces": "‹›", "pressed": "›" } },
- { "keys": ["“"], "command": "bracketeer", "args": { "braces": "“”" } },
- { "keys": ["”"], "command": "bracketeer", "args": { "braces": "“”", "pressed": "”" } },
- { "keys": ["‘"], "command": "bracketeer", "args": { "braces": "‘’" } },
- { "keys": ["’"], "command": "bracketeer", "args": { "braces": "‘’", "pressed": "’" } },
- //|
- //| AUTO DELETE MATCHING '', "", [], etc.
- //|
- { "keys": ["backspace"], "command": "run_macro_file", "args": {"file": "Packages/Default/Delete Left Right.sublime-macro"}, "context":
- [
- { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
- { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
- { "key": "preceding_text", "operator": "regex_contains", "operand": "\"$" },
- { "key": "following_text", "operator": "regex_contains", "operand": "^\"" }
- ]
- },
- { "keys": ["backspace"], "command": "run_macro_file", "args": {"file": "Packages/Default/Delete Left Right.sublime-macro"}, "context":
- [
- { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
- { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
- { "key": "preceding_text", "operator": "regex_contains", "operand": "'$" },
- { "key": "following_text", "operator": "regex_contains", "operand": "^'" }
- ]
- },
- { "keys": ["backspace"], "command": "run_macro_file", "args": {"file": "Packages/Default/Delete Left Right.sublime-macro"}, "context":
- [
- { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
- { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
- { "key": "preceding_text", "operator": "regex_contains", "operand": "`$" },
- { "key": "following_text", "operator": "regex_contains", "operand": "^`" }
- ]
- },
- { "keys": ["backspace"], "command": "run_macro_file", "args": {"file": "Packages/Default/Delete Left Right.sublime-macro"}, "context":
- [
- { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
- { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
- { "key": "preceding_text", "operator": "regex_contains", "operand": "«$" },
- { "key": "following_text", "operator": "regex_contains", "operand": "^»" }
- ]
- },
- { "keys": ["backspace"], "command": "run_macro_file", "args": {"file": "Packages/Default/Delete Left Right.sublime-macro"}, "context":
- [
- { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
- { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
- { "key": "preceding_text", "operator": "regex_contains", "operand": "‹$" },
- { "key": "following_text", "operator": "regex_contains", "operand": "^›" }
- ]
- },
- { "keys": ["backspace"], "command": "run_macro_file", "args": {"file": "Packages/Default/Delete Left Right.sublime-macro"}, "context":
- [
- { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
- { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
- { "key": "preceding_text", "operator": "regex_contains", "operand": "“$" },
- { "key": "following_text", "operator": "regex_contains", "operand": "^”" }
- ]
- },
- { "keys": ["backspace"], "command": "run_macro_file", "args": {"file": "Packages/Default/Delete Left Right.sublime-macro"}, "context":
- [
- { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
- { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
- { "key": "preceding_text", "operator": "regex_contains", "operand": "‘$" },
- { "key": "following_text", "operator": "regex_contains", "operand": "^’" }
- ]
- },
- { "keys": ["backspace"], "command": "run_macro_file", "args": {"file": "Packages/Default/Delete Left Right.sublime-macro"}, "context":
- [
- { "key": "selector", "operator": "equal", "operand": "text.restructuredtext" },
- { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
- { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
- { "key": "preceding_text", "operator": "regex_contains", "operand": "\\*$" },
- { "key": "following_text", "operator": "regex_contains", "operand": "^\\*" }
- ]
- },
- //|
- //| Bracket and select
- //|
- { "keys": ["ctrl+alt+[", "backspace"], "command": "bracketeer", "args": { "braces": "", "select": true, "replace": true }, "context":
- [{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }]
- },
- { "keys": ["ctrl+[", "{"], "command": "bracketeer", "args": { "braces": "{}", "select": true }, "context":
- [{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }]
- },
- { "keys": ["ctrl+alt+[", "{"], "command": "bracketeer", "args": { "braces": "{}", "select": true, "replace": true }, "context":
- [{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }]
- },
- { "keys": ["ctrl+[", " "], "command": "bracketeer", "args": { "braces": " ", "select": true }, "context":
- [{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }]
- },
- { "keys": ["ctrl+alt+[", " "], "command": "bracketeer", "args": { "braces": " ", "select": true, "replace": true }, "context":
- [{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }]
- },
- { "keys": ["ctrl+[", "["], "command": "bracketeer", "args": { "braces": "[]", "select": true }, "context":
- [{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }]
- },
- { "keys": ["ctrl+alt+[", "["], "command": "bracketeer", "args": { "braces": "[]", "select": true, "replace": true }, "context":
- [{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }]
- },
- { "keys": ["ctrl+[", "("], "command": "bracketeer", "args": { "braces": "()", "select": true }, "context":
- [{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }]
- },
- { "keys": ["ctrl+alt+[", "("], "command": "bracketeer", "args": { "braces": "()", "select": true, "replace": true }, "context":
- [{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }]
- },
- { "keys": ["ctrl+[", "\""], "command": "bracketeer", "args": { "braces": "\"\"", "select": true }, "context":
- [{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }]
- },
- { "keys": ["ctrl+alt+[", "\""], "command": "bracketeer", "args": { "braces": "\"\"", "select": true, "replace": true }, "context":
- [{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }]
- },
- { "keys": ["ctrl+[", "ctrl+shift+'"], "command": "bracketeer", "args": { "braces": "\"\"\"\"\"\"", "select": true }, "context":
- [{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }]
- },
- { "keys": ["ctrl+alt+[", "ctrl+shift+'"], "command": "bracketeer", "args": { "braces": "\"\"\"\"\"\"", "select": true, "replace": true }, "context":
- [{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }]
- },
- { "keys": ["ctrl+[", "'"], "command": "bracketeer", "args": { "braces": "''", "select": true }, "context":
- [{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }]
- },
- { "keys": ["ctrl+alt+[", "'"], "command": "bracketeer", "args": { "braces": "''", "select": true, "replace": true }, "context":
- [{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }]
- },
- { "keys": ["ctrl+[", "ctrl+'"], "command": "bracketeer", "args": { "braces": "''''''", "select": true }, "context":
- [{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }]
- },
- { "keys": ["ctrl+alt+[", "ctrl+'"], "command": "bracketeer", "args": { "braces": "''''''", "select": true, "replace": true }, "context":
- [{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }]
- },
- { "keys": ["ctrl+[", "`"], "command": "bracketeer", "args": { "braces": "``", "select": true }, "context":
- [{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }]
- },
- { "keys": ["ctrl+alt+[", "`"], "command": "bracketeer", "args": { "braces": "``", "select": true, "replace": true }, "context":
- [{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }]
- },
- { "keys": ["ctrl+[", "ctrl+`"], "command": "bracketeer", "args": { "braces": "``````", "select": true }, "context":
- [{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }]
- },
- { "keys": ["ctrl+alt+[", "ctrl+`"], "command": "bracketeer", "args": { "braces": "``````", "select": true, "replace": true }, "context":
- [{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }]
- },
- { "keys": ["ctrl+[", "«"], "command": "bracketeer", "args": { "braces": "«»", "select": true }, "context":
- [{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }]
- },
- { "keys": ["ctrl+alt+[", "«"], "command": "bracketeer", "args": { "braces": "«»", "select": true, "replace": true }, "context":
- [{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }]
- },
- { "keys": ["ctrl+[", "‹"], "command": "bracketeer", "args": { "braces": "‹›", "select": true }, "context":
- [{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }]
- },
- { "keys": ["ctrl+alt+[", "‹"], "command": "bracketeer", "args": { "braces": "‹›", "select": true, "replace": true }, "context":
- [{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }]
- },
- { "keys": ["ctrl+[", "“"], "command": "bracketeer", "args": { "braces": "“”", "select": true }, "context":
- [{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }]
- },
- { "keys": ["ctrl+alt+[", "“"], "command": "bracketeer", "args": { "braces": "“”", "select": true, "replace": true }, "context":
- [{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }]
- },
- { "keys": ["ctrl+[", "‘"], "command": "bracketeer", "args": { "braces": "‘’", "select": true }, "context":
- [{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }]
- },
- { "keys": ["ctrl+alt+[", "‘"], "command": "bracketeer", "args": { "braces": "‘’", "select": true, "replace": true }, "context":
- [{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }]
- },
- { "keys": ["ctrl+[", "alt+`"], "command": "bracketeer", "args": { "braces": "````", "select": true }, "context":
- [{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }]
- },
- { "keys": ["ctrl+alt+[", "alt+`"], "command": "bracketeer", "args": { "braces": "````", "select": true, "replace": true }, "context":
- [{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }]
- },
- { "keys": ["ctrl+[", "*"], "command": "bracketeer", "args": { "braces": "**", "select": true }, "context":
- [
- { "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true },
- { "key": "selector", "operator": "equal", "operand": "text.restructuredtext" }
- ]
- },
- { "keys": ["ctrl+alt+[", "*"], "command": "bracketeer", "args": { "braces": "**", "select": true, "replace": true }, "context":
- [
- { "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true },
- { "key": "selector", "operator": "equal", "operand": "text.restructuredtext" }
- ]
- },
-
- //BracketHighlighter - https://github.com/facelessuser/BracketHighlighter/
-
- // ClipboardManager - https://github.com/colinta/SublimeClipboardManager
- { "keys": ["super+x"], "command": "clipboard_manager_cut" },
- { "keys": ["super+c"], "command": "clipboard_manager_copy" },
- { "keys": ["super+v"], "command": "clipboard_manager_paste", "args": { "indent": true } },
- { "keys": ["super+alt+v"], "command": "clipboard_manager_next_and_paste" },
- { "keys": ["super+shift+alt+v"], "command": "clipboard_manager_previous_and_paste" },
- //{ "keys": ["super+pageup"], "command": "clipboard_manager_next" },
- //{ "keys": ["super+pagedown"], "command": "clipboard_manager_previous" },
- //{ "keys": ["super+home"], "command": "clipboard_manager_show" },
- { "keys": ["super+shift+v"], "command": "clipboard_manager_choose_and_paste" },
-
- // EasyMotion - https://github.com/tednaleid/sublime-EasyMotion
- {
- "keys": ["super+;", ""],
- "command": "easy_motion",
- "args": {"select_text": false}
- },
- {
- "keys": ["super+;", "enter"],
- "command": "easy_motion",
- "args": {"select_text": false, "character": "enter"}
- },
- {
- "keys": ["super+shift+;", ""],
- "command": "easy_motion",
- "args": {"select_text": true}
- },
- {
- "keys": ["super+shift+;", "enter"],
- "command": "easy_motion",
- "args": {"select_text": true, "character": "enter"}
- }
-
- // ExportHTML - https://github.com/facelessuser/ExportHtml
- // use defaults
-
- // FileDiffs - https://github.com/colinta/SublimeFileDiffs
- { "keys": ["ctrl+shift+d"], "command": "file_diff_menu" },
-
- // Smart Markdown - https://github.com/demon386/SmartMarkdown
- // accept all the defaults for building lists and tables
- { "keys": ["tab"], "command": "smart_folding", "context":
- [{ "key": "selector", "operator": "equal", "operand": "markup.heading.markdown" }]
- },
- { "keys": ["shift+tab"], "command": "global_folding", "context":
- [{ "key": "selector", "operator": "equal", "operand": "text.html.markdown" }]
- },
- { "keys": ["enter"], "command": "smart_list", "context": [
- { "key": "selector", "operator": "equal", "operand": "text.html.markdown" },
- { "key": "preceding_text", "operator": "regex_contains", "operand": "^\\s*([-+\\**]|\\d+\\.+)\\s+" }
- ]},
- { "keys": ["enter"], "command": "smart_list", "context": [
- { "key": "selector", "operator": "equal", "operand": "text.html.markdown" },
- { "key": "selector", "operator": "equal", "operand": "markup.list" }
- ]},
- { "keys": ["tab"], "command": "smart_table", "args": {"forward": true}, "context": [
- { "key": "selector", "operator": "equal", "operand": "text.html.markdown" },
- { "key": "preceding_text", "operator": "regex_contains", "operand": "^\\s*(\\||\\+[-=])", "match_all": true}
- ]},
- { "keys": ["tab"], "command": "smart_table", "args": {"forward": true}, "context": [
- { "key": "selector", "operator": "equal", "operand": "text.html.markdown" },
- { "key": "preceding_text", "operator": "regex_contains", "operand": "^\\s*" },
- { "key": "following_text", "operator": "regex_contains", "operand": "\\s*(\\||\\+[-=])", "match_all": true}
- ]},
- { "keys": ["shift+tab"], "command": "smart_table", "args": {"forward": false}, "context": [
- { "key": "selector", "operator": "equal", "operand": "text.html.markdown" },
- { "key": "preceding_text", "operator": "regex_contains", "operand": "^\\s*(\\||\\+[-=])",
- "match_all": true}
- ]},
- { "keys": ["shift+tab"], "command": "smart_table", "args": {"forward": false}, "context": [
- { "key": "selector", "operator": "equal", "operand": "text.html.markdown" },
- { "key": "preceding_text", "operator": "regex_contains", "operand": "^\\s*" },
- { "key": "following_text", "operator": "regex_contains", "operand": "\\s*(\\||\\+[-=])", "match_all": true}
- ]},
- {
- "keys": ["super+shift+."], "command": "change_heading_level", "args": {"up": true}, "context": [
- {"key": "selector", "operator": "equal", "operand": "text.html.markdown"}
- ]},
- {
- "keys": ["super+shift+,"], "command": "change_heading_level", "args": {"up": false}, "context": [
- {"key": "selector", "operator": "equal", "operand": "text.html.markdown"}
- ]},
-
- //Sublime Text 2 - Related Files - https://github.com/fabiokr/sublime-related-files
- { "keys": ["ctrl+alt+t"], "command": "related_files" },
-
- //SublimeTODO - https://github.com/robcowie/SublimeTODO
- // {
- // "keys": ["n"], "command": "goto_next_result",
- // "context": [{ "key": "setting.todo_results", "operator": "equal", "operand": true }]
- // }
- {
- "keys": ["n"], "command": "navigate_results",
- //// {"key": "setting.todo_results"}
- "context": [ {"key": "setting.command_mode", "operand": true}],
- "args": {"direction": "forward"}
- },
- {
- "keys": ["down"], "command": "navigate_results",
- // {"key": "setting.todo_results"}
- "context": [{"key": "setting.command_mode", "operand": true}],
- "args": {"direction": "forward"}
- },
- {
- "keys": ["j"], "command": "navigate_results",
- "context": [{"key": "setting.command_mode", "operand": true}],
- // {"key": "setting.todo_results"}
- "args": {"direction": "forward"}
- },
- {
- "keys": ["p"], "command": "navigate_results",
- // {"key": "setting.todo_results"}
- "context": [{"key": "setting.command_mode", "operand": true}],
- "args": {"direction": "backward"}
- },
- {
- "keys": ["up"], "command": "navigate_results",
- //{"key": "setting.todo_results"}
- "context": [{"key": "setting.command_mode", "operand": true}],
- "args": {"direction": "backward"}
- },
- {
- "keys": ["k"], "command": "navigate_results",
- "context": [{"key": "setting.command_mode", "operand": true}],
- //{"key": "setting.todo_results"}
- "args": {"direction": "backward"}
- },
- {
- "keys": ["c"], "command": "clear_selection",
- // {"key": "setting.todo_results"}
- "context": [{"key": "setting.command_mode", "operand": true}]
- },
- {
- "keys": ["enter"], "command": "goto_comment",
- // {"key": "setting.todo_results"}
- "context": [{"key": "setting.command_mode", "operand": true}]
- },
-
- //Snippet Browsing Keybindings
- { "keys": ["shift+f1"], "command": "show_overlay",
- "args": {"overlay": "command_palette", "text": "snippet"} }
-]
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/ZZZ.EthanBrown.SublimeKeyMap.Editor/Default (Windows).sublime-keymap b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/ZZZ.EthanBrown.SublimeKeyMap.Editor/Default (Windows).sublime-keymap
deleted file mode 100644
index 42196a3..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/ZZZ.EthanBrown.SublimeKeyMap.Editor/Default (Windows).sublime-keymap
+++ /dev/null
@@ -1,438 +0,0 @@
- [
- // since we assign Ctrl+Shift+V to clipboard manager, use paste / indent with default Ctrl+v
- { "keys": ["ctrl+v"], "command": "paste_and_indent" },
-
- //HACK: override the vertical column selections to use Ctrl+Shift in RDP
- { "keys": ["ctrl+shift+up"], "command": "select_lines", "args": {"forward": false} },
- { "keys": ["ctrl+shift+down"], "command": "select_lines", "args": {"forward": true} },
-
- //HACK: restore default shift+tab keybindings because SmartMarkdown messes with them too much
- { "keys": ["shift+tab"], "command": "insert", "args": {"characters": "\t"} },
- { "keys": ["shift+tab"], "command": "unindent", "context":
- [
- { "key": "setting.shift_tab_unindent", "operator": "equal", "operand": true }
- ]
- },
- { "keys": ["shift+tab"], "command": "unindent", "context":
- [
- { "key": "preceding_text", "operator": "regex_match", "operand": "^[\t ]*" }
- ]
- },
- { "keys": ["shift+tab"], "command": "unindent", "context":
- [
- { "key": "text", "operator": "regex_contains", "operand": "\n" }
- ]
- },
- { "keys": ["shift+tab"], "command": "prev_field", "context":
- [
- { "key": "has_prev_field", "operator": "equal", "operand": true }
- ]
- },
-
- //Abacus - https://github.com/khiltd/Abacus
- { "keys": ["ctrl+alt+\\"], "command": "abacus" },
-
- // Bracketeer - https://github.com/colinta/SublimeBracketeer
- { "keys": ["super+]"], "command": "bracketeer_indent" },
- { "keys": ["ctrl+shift+["], "command": "bracketeer_select" },
- { "keys": ["ctrl+["], "command": "bracketeer_goto", "args": { "goto": "left" } },
- { "keys": ["ctrl+]"], "command": "bracketeer_goto", "args": { "goto": "right" } },
- { "keys": ["ctrl+alt+["], "command": "bracketeer_goto", "args": { "goto": "both" } },
- { "keys": ["ctrl+alt+]"], "command": "bracketeer_goto", "args": { "goto": "both" } },
- //|
- //| BRACKETEER
- //|
- { "keys": ["{"], "command": "bracketeer", "args": { "braces": "{}", "unindent": true } },
- { "keys": ["}"], "command": "bracketeer", "args": { "braces": "{}", "pressed": "}", "unindent": true } },
- { "keys": ["["], "command": "bracketeer", "args": { "braces": "[]" } },
- { "keys": ["]"], "command": "bracketeer", "args": { "braces": "[]", "pressed": "]" } },
- { "keys": ["("], "command": "bracketeer", "args": { "braces": "()" } },
- { "keys": [")"], "command": "bracketeer", "args": { "braces": "()", "pressed": ")" } },
- //| reStructured Text
- { "keys": ["alt+`"], "command": "bracketeer", "args": { "braces": "````", "pressed": "``" }, "context":
- [
- { "key": "selector", "operator": "equal", "operand": "text.restructuredtext" }
- ]
- },
- { "keys": ["*"], "command": "bracketeer", "args": { "braces": "**", "pressed": "*" }, "context":
- [
- { "key": "selector", "operator": "equal", "operand": "text.restructuredtext" }
- ]
- },
- //| DJANGO CURLIES
- // For django, liquid, jinja. All the grammars *I* have list 'source.smarty' as
- // when the cursor is inside "{}"s
- { "keys": ["{"], "command": "bracketeer", "args": { "braces": "{ }" }, "context":
- [{ "key": "selector", "operator": "equal", "operand": "source.smarty" }]
- },
- { "keys": ["{"], "command": "bracketeer", "args": { "braces": "{ }" }, "context":
- [{ "key": "selector", "operator": "equal", "operand": "meta.brace.curly" }]
- },
- { "keys": ["%"], "command": "bracketeer", "args": { "braces": "% %" }, "context":
- [{ "key": "selector", "operator": "equal", "operand": "source.smarty" }]
- },
- { "keys": ["%"], "command": "bracketeer", "args": { "braces": "% %" }, "context":
- [
- { "key": "selector", "operator": "equal", "operand": "meta.brace.curly" },
- { "key": "preceding_text", "operator": "regex_contains", "operand": "<$", "match_all": true }
- ]
- },
- { "keys": ["%"], "command": "insert_snippet", "args": { "contents": " $1 %>$0" }, "context":
- [
- { "key": "selector", "operator": "equal", "operand": "source.ruby" },
- { "key": "preceding_text", "operator": "regex_contains", "operand": "<%$", "match_all": true }
- ]
- },
- { "keys": [">"], "command": "insert_snippet", "args": { "contents": ">$1<% $0" }, "context":
- [
- { "key": "selector", "operator": "equal", "operand": "source.ruby" },
- { "key": "preceding_text", "operator": "regex_contains", "operand": "%$", "match_all": true }
- ]
- },
- { "keys": ["="], "command": "insert_snippet", "args": { "contents": "= $1 %>$0" }, "context":
- [
- { "key": "selector", "operator": "equal", "operand": "source.ruby" },
- { "key": "preceding_text", "operator": "regex_contains", "operand": "<%$", "match_all": true }
- ]
- },
- { "keys": ["-"], "command": "insert_snippet", "args": { "contents": "- $1 %>$0" }, "context":
- [
- { "key": "selector", "operator": "equal", "operand": "source.ruby" },
- { "key": "preceding_text", "operator": "regex_contains", "operand": "<%$", "match_all": true }
- ]
- },
- { "keys": ["#"], "command": "bracketeer", "args": { "braces": "# #" }, "context":
- [{ "key": "selector", "operator": "equal", "operand": "source.smarty" }]
- },
- //| QUOTES
- { "keys": ["\""], "command": "bracketeer", "args": { "braces": "\"\"", "pressed": "\"" } },
- { "keys": ["ctrl+'","ctrl+'"], "command": "bracketeer", "args": { "braces": "\"\"\"\n\n\"\"\"" } },
- { "keys": ["'"], "command": "bracketeer", "args": { "braces": "''", "pressed": "'" } },
- { "keys": ["ctrl+'","'"], "command": "bracketeer", "args": { "braces": "'''\n\n'''" } },
- { "keys": ["`"], "command": "bracketeer", "args": { "braces": "``", "pressed": "`" } },
- { "keys": ["ctrl+'","`"], "command": "insert_snippet", "args": { "contents": "```${1:syntax}\n$0\n```" } },
- { "keys": ["«"], "command": "bracketeer", "args": { "braces": "«»" } },
- { "keys": ["»"], "command": "bracketeer", "args": { "braces": "«»", "pressed": "»" } },
- { "keys": ["‹"], "command": "bracketeer", "args": { "braces": "‹›" } },
- { "keys": ["›"], "command": "bracketeer", "args": { "braces": "‹›", "pressed": "›" } },
- { "keys": ["“"], "command": "bracketeer", "args": { "braces": "“”" } },
- { "keys": ["”"], "command": "bracketeer", "args": { "braces": "“”", "pressed": "”" } },
- { "keys": ["‘"], "command": "bracketeer", "args": { "braces": "‘’" } },
- { "keys": ["’"], "command": "bracketeer", "args": { "braces": "‘’", "pressed": "’" } },
- //|
- //| AUTO DELETE MATCHING '', "", [], etc.
- //|
- { "keys": ["backspace"], "command": "run_macro_file", "args": {"file": "Packages/Default/Delete Left Right.sublime-macro"}, "context":
- [
- { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
- { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
- { "key": "preceding_text", "operator": "regex_contains", "operand": "\"$" },
- { "key": "following_text", "operator": "regex_contains", "operand": "^\"" }
- ]
- },
- { "keys": ["backspace"], "command": "run_macro_file", "args": {"file": "Packages/Default/Delete Left Right.sublime-macro"}, "context":
- [
- { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
- { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
- { "key": "preceding_text", "operator": "regex_contains", "operand": "'$" },
- { "key": "following_text", "operator": "regex_contains", "operand": "^'" }
- ]
- },
- { "keys": ["backspace"], "command": "run_macro_file", "args": {"file": "Packages/Default/Delete Left Right.sublime-macro"}, "context":
- [
- { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
- { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
- { "key": "preceding_text", "operator": "regex_contains", "operand": "`$" },
- { "key": "following_text", "operator": "regex_contains", "operand": "^`" }
- ]
- },
- { "keys": ["backspace"], "command": "run_macro_file", "args": {"file": "Packages/Default/Delete Left Right.sublime-macro"}, "context":
- [
- { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
- { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
- { "key": "preceding_text", "operator": "regex_contains", "operand": "«$" },
- { "key": "following_text", "operator": "regex_contains", "operand": "^»" }
- ]
- },
- { "keys": ["backspace"], "command": "run_macro_file", "args": {"file": "Packages/Default/Delete Left Right.sublime-macro"}, "context":
- [
- { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
- { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
- { "key": "preceding_text", "operator": "regex_contains", "operand": "‹$" },
- { "key": "following_text", "operator": "regex_contains", "operand": "^›" }
- ]
- },
- { "keys": ["backspace"], "command": "run_macro_file", "args": {"file": "Packages/Default/Delete Left Right.sublime-macro"}, "context":
- [
- { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
- { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
- { "key": "preceding_text", "operator": "regex_contains", "operand": "“$" },
- { "key": "following_text", "operator": "regex_contains", "operand": "^”" }
- ]
- },
- { "keys": ["backspace"], "command": "run_macro_file", "args": {"file": "Packages/Default/Delete Left Right.sublime-macro"}, "context":
- [
- { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
- { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
- { "key": "preceding_text", "operator": "regex_contains", "operand": "‘$" },
- { "key": "following_text", "operator": "regex_contains", "operand": "^’" }
- ]
- },
- { "keys": ["backspace"], "command": "run_macro_file", "args": {"file": "Packages/Default/Delete Left Right.sublime-macro"}, "context":
- [
- { "key": "selector", "operator": "equal", "operand": "text.restructuredtext" },
- { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
- { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
- { "key": "preceding_text", "operator": "regex_contains", "operand": "\\*$" },
- { "key": "following_text", "operator": "regex_contains", "operand": "^\\*" }
- ]
- },
- //|
- //| Bracket and select
- //|
- { "keys": ["ctrl+alt+[", "backspace"], "command": "bracketeer", "args": { "braces": "", "select": true, "replace": true }, "context":
- [{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }]
- },
- { "keys": ["ctrl+[", "{"], "command": "bracketeer", "args": { "braces": "{}", "select": true }, "context":
- [{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }]
- },
- { "keys": ["ctrl+alt+[", "{"], "command": "bracketeer", "args": { "braces": "{}", "select": true, "replace": true }, "context":
- [{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }]
- },
- { "keys": ["ctrl+[", " "], "command": "bracketeer", "args": { "braces": " ", "select": true }, "context":
- [{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }]
- },
- { "keys": ["ctrl+alt+[", " "], "command": "bracketeer", "args": { "braces": " ", "select": true, "replace": true }, "context":
- [{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }]
- },
- { "keys": ["ctrl+[", "["], "command": "bracketeer", "args": { "braces": "[]", "select": true }, "context":
- [{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }]
- },
- { "keys": ["ctrl+alt+[", "["], "command": "bracketeer", "args": { "braces": "[]", "select": true, "replace": true }, "context":
- [{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }]
- },
- { "keys": ["ctrl+[", "("], "command": "bracketeer", "args": { "braces": "()", "select": true }, "context":
- [{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }]
- },
- { "keys": ["ctrl+alt+[", "("], "command": "bracketeer", "args": { "braces": "()", "select": true, "replace": true }, "context":
- [{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }]
- },
- { "keys": ["ctrl+[", "\""], "command": "bracketeer", "args": { "braces": "\"\"", "select": true }, "context":
- [{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }]
- },
- { "keys": ["ctrl+alt+[", "\""], "command": "bracketeer", "args": { "braces": "\"\"", "select": true, "replace": true }, "context":
- [{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }]
- },
- { "keys": ["ctrl+[", "ctrl+shift+'"], "command": "bracketeer", "args": { "braces": "\"\"\"\"\"\"", "select": true }, "context":
- [{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }]
- },
- { "keys": ["ctrl+alt+[", "ctrl+shift+'"], "command": "bracketeer", "args": { "braces": "\"\"\"\"\"\"", "select": true, "replace": true }, "context":
- [{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }]
- },
- { "keys": ["ctrl+[", "'"], "command": "bracketeer", "args": { "braces": "''", "select": true }, "context":
- [{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }]
- },
- { "keys": ["ctrl+alt+[", "'"], "command": "bracketeer", "args": { "braces": "''", "select": true, "replace": true }, "context":
- [{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }]
- },
- { "keys": ["ctrl+[", "ctrl+'"], "command": "bracketeer", "args": { "braces": "''''''", "select": true }, "context":
- [{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }]
- },
- { "keys": ["ctrl+alt+[", "ctrl+'"], "command": "bracketeer", "args": { "braces": "''''''", "select": true, "replace": true }, "context":
- [{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }]
- },
- { "keys": ["ctrl+[", "`"], "command": "bracketeer", "args": { "braces": "``", "select": true }, "context":
- [{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }]
- },
- { "keys": ["ctrl+alt+[", "`"], "command": "bracketeer", "args": { "braces": "``", "select": true, "replace": true }, "context":
- [{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }]
- },
- { "keys": ["ctrl+[", "ctrl+`"], "command": "bracketeer", "args": { "braces": "``````", "select": true }, "context":
- [{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }]
- },
- { "keys": ["ctrl+alt+[", "ctrl+`"], "command": "bracketeer", "args": { "braces": "``````", "select": true, "replace": true }, "context":
- [{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }]
- },
- { "keys": ["ctrl+[", "«"], "command": "bracketeer", "args": { "braces": "«»", "select": true }, "context":
- [{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }]
- },
- { "keys": ["ctrl+alt+[", "«"], "command": "bracketeer", "args": { "braces": "«»", "select": true, "replace": true }, "context":
- [{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }]
- },
- { "keys": ["ctrl+[", "‹"], "command": "bracketeer", "args": { "braces": "‹›", "select": true }, "context":
- [{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }]
- },
- { "keys": ["ctrl+alt+[", "‹"], "command": "bracketeer", "args": { "braces": "‹›", "select": true, "replace": true }, "context":
- [{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }]
- },
- { "keys": ["ctrl+[", "“"], "command": "bracketeer", "args": { "braces": "“”", "select": true }, "context":
- [{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }]
- },
- { "keys": ["ctrl+alt+[", "“"], "command": "bracketeer", "args": { "braces": "“”", "select": true, "replace": true }, "context":
- [{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }]
- },
- { "keys": ["ctrl+[", "‘"], "command": "bracketeer", "args": { "braces": "‘’", "select": true }, "context":
- [{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }]
- },
- { "keys": ["ctrl+alt+[", "‘"], "command": "bracketeer", "args": { "braces": "‘’", "select": true, "replace": true }, "context":
- [{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }]
- },
- { "keys": ["ctrl+[", "alt+`"], "command": "bracketeer", "args": { "braces": "````", "select": true }, "context":
- [{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }]
- },
- { "keys": ["ctrl+alt+[", "alt+`"], "command": "bracketeer", "args": { "braces": "````", "select": true, "replace": true }, "context":
- [{ "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }]
- },
- { "keys": ["ctrl+[", "*"], "command": "bracketeer", "args": { "braces": "**", "select": true }, "context":
- [
- { "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true },
- { "key": "selector", "operator": "equal", "operand": "text.restructuredtext" }
- ]
- },
- { "keys": ["ctrl+alt+[", "*"], "command": "bracketeer", "args": { "braces": "**", "select": true, "replace": true }, "context":
- [
- { "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true },
- { "key": "selector", "operator": "equal", "operand": "text.restructuredtext" }
- ]
- },
-
- //BracketHighlighter - https://github.com/facelessuser/BracketHighlighter/
-
- // ClipboardManager - https://github.com/colinta/SublimeClipboardManager
- { "keys": ["ctrl+x"], "command": "clipboard_manager_cut" },
- { "keys": ["ctrl+c"], "command": "clipboard_manager_copy" },
- { "keys": ["ctrl+v"], "command": "clipboard_manager_paste", "args": { "indent": true } },
- { "keys": ["ctrl+alt+v"], "command": "clipboard_manager_next_and_paste" },
- { "keys": ["ctrl+shift+alt+v"], "command": "clipboard_manager_previous_and_paste" },
- //{ "keys": ["ctrl+pageup"], "command": "clipboard_manager_next" },
- //{ "keys": ["ctrl+pagedown"], "command": "clipboard_manager_previous" },
- //{ "keys": ["ctrl+home"], "command": "clipboard_manager_show" },
- { "keys": ["ctrl+shift+v"], "command": "clipboard_manager_choose_and_paste" },
-
- // EasyMotion - https://github.com/tednaleid/sublime-EasyMotion
- {
- "keys": ["ctrl+.", ""],
- "command": "easy_motion", "args": {"select_text": false}
- },
- {
- "keys": ["ctrl+.", "enter"],
- "command": "easy_motion", "args": {"select_text": false, "character": "enter"}
- },
- {
- "keys": ["ctrl+shift+.", ""],
- "command": "easy_motion", "args": {"select_text": true}
- },
- {
- "keys": ["ctrl+shift+.", "enter"],
- "command": "easy_motion", "args": {"select_text": true, "character": "enter"}
- },
-
- // ExportHTML - https://github.com/facelessuser/ExportHtml
- // use defaults
-
- // FileDiffs - https://github.com/colinta/SublimeFileDiffs
- { "keys": ["ctrl+shift+d"], "command": "file_diff_menu" },
-
- // Smart Markdown - https://github.com/demon386/SmartMarkdown
- // accept all the defaults for building lists and tables
- { "keys": ["tab"], "command": "smart_folding", "context":
- [{ "key": "selector", "operator": "equal", "operand": "markup.heading.markdown" }]
- },
- { "keys": ["shift+tab"], "command": "global_folding", "context":
- [{ "key": "selector", "operator": "equal", "operand": "text.html.markdown" }]
- },
- { "keys": ["enter"], "command": "smart_list", "context": [
- { "key": "selector", "operator": "equal", "operand": "text.html.markdown" },
- { "key": "preceding_text", "operator": "regex_contains", "operand": "^\\s*([-+\\**]|\\d+\\.+)\\s+" }
- ]},
- { "keys": ["enter"], "command": "smart_list", "context": [
- { "key": "selector", "operator": "equal", "operand": "text.html.markdown" },
- { "key": "selector", "operator": "equal", "operand": "markup.list" }
- ]},
- { "keys": ["tab"], "command": "smart_table", "args": {"forward": true}, "context": [
- { "key": "selector", "operator": "equal", "operand": "text.html.markdown" },
- { "key": "preceding_text", "operator": "regex_contains", "operand": "^\\s*(\\||\\+[-=])", "match_all": true}
- ]},
- { "keys": ["tab"], "command": "smart_table", "args": {"forward": true}, "context": [
- { "key": "selector", "operator": "equal", "operand": "text.html.markdown" },
- { "key": "preceding_text", "operator": "regex_contains", "operand": "^\\s*" },
- { "key": "following_text", "operator": "regex_contains", "operand": "\\s*(\\||\\+[-=])", "match_all": true}
- ]},
- { "keys": ["shift+tab"], "command": "smart_table", "args": {"forward": false}, "context": [
- { "key": "selector", "operator": "equal", "operand": "text.html.markdown" },
- { "key": "preceding_text", "operator": "regex_contains", "operand": "^\\s*(\\||\\+[-=])",
- "match_all": true}
- ]},
- { "keys": ["shift+tab"], "command": "smart_table", "args": {"forward": false}, "context": [
- { "key": "selector", "operator": "equal", "operand": "text.html.markdown" },
- { "key": "preceding_text", "operator": "regex_contains", "operand": "^\\s*" },
- { "key": "following_text", "operator": "regex_contains", "operand": "\\s*(\\||\\+[-=])", "match_all": true}
- ]},
- {
- "keys": ["super+shift+."], "command": "change_heading_level", "args": {"up": true}, "context": [
- {"key": "selector", "operator": "equal", "operand": "text.html.markdown"}
- ]},
- {
- "keys": ["super+shift+,"], "command": "change_heading_level", "args": {"up": false}, "context": [
- {"key": "selector", "operator": "equal", "operand": "text.html.markdown"}
- ]},
-
- //Sublime Text 2 - Related Files - https://github.com/fabiokr/sublime-related-files
- { "keys": ["ctrl+alt+t"], "command": "related_files" },
-
- //SublimeTODO - https://github.com/robcowie/SublimeTODO
- // {
- // "keys": ["n"], "command": "goto_next_result",
- // "context": [{ "key": "setting.todo_results", "operator": "equal", "operand": true }]
- // }
- {
- "keys": ["n"], "command": "navigate_results",
- //// {"key": "setting.todo_results"}
- "context": [ {"key": "setting.command_mode", "operand": true}],
- "args": {"direction": "forward"}
- },
- {
- "keys": ["down"], "command": "navigate_results",
- // {"key": "setting.todo_results"}
- "context": [{"key": "setting.command_mode", "operand": true}],
- "args": {"direction": "forward"}
- },
- {
- "keys": ["j"], "command": "navigate_results",
- "context": [{"key": "setting.command_mode", "operand": true}],
- // {"key": "setting.todo_results"}
- "args": {"direction": "forward"}
- },
- {
- "keys": ["p"], "command": "navigate_results",
- // {"key": "setting.todo_results"}
- "context": [{"key": "setting.command_mode", "operand": true}],
- "args": {"direction": "backward"}
- },
- {
- "keys": ["up"], "command": "navigate_results",
- //{"key": "setting.todo_results"}
- "context": [{"key": "setting.command_mode", "operand": true}],
- "args": {"direction": "backward"}
- },
- {
- "keys": ["k"], "command": "navigate_results",
- "context": [{"key": "setting.command_mode", "operand": true}],
- //{"key": "setting.todo_results"}
- "args": {"direction": "backward"}
- },
- {
- "keys": ["c"], "command": "clear_selection",
- // {"key": "setting.todo_results"}
- "context": [{"key": "setting.command_mode", "operand": true}]
- },
- {
- "keys": ["enter"], "command": "goto_comment",
- // {"key": "setting.todo_results"}
- "context": [{"key": "setting.command_mode", "operand": true}]
- },
-
- //Snippet Browsing Keybindings
- { "keys": ["shift+f1"], "command": "show_overlay",
- "args": {"overlay": "command_palette", "text": "snippet"} }
-]
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/ZZZ.EthanBrown.SublimeKeyMap.Editor/README.md b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/ZZZ.EthanBrown.SublimeKeyMap.Editor/README.md
deleted file mode 100644
index 94d0340..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/ZZZ.EthanBrown.SublimeKeyMap.Editor/README.md
+++ /dev/null
@@ -1,38 +0,0 @@
-SublimeKeyMap.Editor
-====================
-
-A simple repository used to host / share my customized Sublime Text 2 key bindings for Sublime editor enhancement plugins
-
-Designed to be incorporated into `Package Control.sublime-settings` like:
-
-```json
-{
- "installed_packages":
- [
- "Abacus",
- "Block Cursor Everywhere",
- "Bracketeer",
- "BracketHighlighter",
- "Clipboard Manager",
- "EasyMotion",
- "ExportHtml",
- "FileDiffs",
- "Markdown Preview",
- "Missing Palette Commands",
- "Related Files",
- "SmartMarkdown",
- "Solarized Color Scheme",
- "StringEncode",
- "SublimeTODO",
- "TrailingSpaces",
- ],
- "package_name_map": {
- "SublimeKeyMap.Editor": "ZZZ.EthanBrown.SublimeKeyMap.Editor"
- },
- "repositories":
- [
- "https://github.com/abrookins/OpenSearchResult",
- "https://github.com/Iristyle/SublimeKeyMap.Editor"
- ]
-}
-```
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/ZZZ.EthanBrown.SublimeKeyMap.Editor/package-metadata.json b/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/ZZZ.EthanBrown.SublimeKeyMap.Editor/package-metadata.json
deleted file mode 100644
index 2e40fc5..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/PackageCache/ZZZ.EthanBrown.SublimeKeyMap.Editor/package-metadata.json
+++ /dev/null
@@ -1 +0,0 @@
-{"url": "https://github.com/Iristyle/SublimeKeyMap.Editor", "version": "2013.09.17.02.08.40", "description": "A simple repository used to host / share my customized Sublime Text 2 key bindings for Sublime editor enhancement plugins"}
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/Preferences.sublime-settings b/EthanBrown.SublimeText2.EditorPackages/tools/Preferences.sublime-settings
deleted file mode 100644
index 07d2821..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/Preferences.sublime-settings
+++ /dev/null
@@ -1,58 +0,0 @@
-{
- "auto_complete_commit_on_tab": true,
- "caret_style": "phase",
- "color_scheme": "Packages/Solarized Color Scheme/Solarized (dark).tmTheme",
- "draw_white_space": "all",
- "ensure_newline_at_eof_on_save": true,
- "font_face": "Source Code Pro",
- "font_size": 14,
- "highlight_line": true,
- "ignored_packages":
- [
- "Vintage",
- "HTML Export",
- "TrailingSpaces"
- ],
- "indent_guide_options":
- [
- "draw_active",
- "draw_normal"
- ],
- "rulers":
- [
- 50,
- 72,
- 80,
- 120
- ],
- "tab_size": 2,
- "todo":
- {
- "case_sensitive": true,
- "file_exclude_patterns":
- [
- "*.css",
- "*.po",
- "*.mo"
- ],
- "folder_exclude_patterns":
- [
- "generated",
- "static",
- "vendor",
- "tmp"
- ],
- "patterns":
- {
- "BUG": "BUG[\\s]*?:+(?P.*)$",
- "FIXME": "FIX ?ME[\\s]*?:+(?P\\S.*)$",
- "HACK": "HACK[\\s]*?:+(?P.*)$",
- "NOTE": "NOTE[\\s]*?:+(?P.*)$",
- "TODO": "TODO[\\s]*?:+(?P.*)$"
- },
- "result_title": "TODO Results"
- },
- "translate_tabs_to_spaces": true,
- "trim_trailing_white_space_on_save": true,
- "wide_caret": true
-}
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/bh_core.sublime-settings b/EthanBrown.SublimeText2.EditorPackages/tools/bh_core.sublime-settings
deleted file mode 100644
index ed3d2b1..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/bh_core.sublime-settings
+++ /dev/null
@@ -1,72 +0,0 @@
-{
- // Define region highlight styles
- "bracket_styles": {
- // "default" and "unmatched" styles are special
- // styles. If they are not defined here,
- // they will be generated internally with
- // internal defaults.
-
- // "default" style defines attributes that
- // will be used for any style that does not
- // explicitly define that attribute. So if
- // a style does not define a color, it will
- // use the color from the "default" style.
- "default": {
- "icon": "dot",
- // BH1's original default color for reference
- // "color": "entity.name.class",
- "color": "brackethighlighter.all",
- "style": "underline"
- },
-
- // This particular style is used to highlight
- // unmatched bracekt pairs. It is a special
- // style.
- "unmatched": {
- "icon": "question",
- // "color": "brackethighlighter.unmatched",
- "style": "outline"
- },
- // User defined region styles
- "curly": {
- "icon": "curly_bracket"
- // "color": "brackethighlighter.curly",
- // "style": "underline"
- },
- "round": {
- "icon": "round_bracket"
- // "color": "brackethighlighter.round",
- // "style": "underline"
- },
- "square": {
- "icon": "square_bracket"
- // "color": "brackethighlighter.square",
- // "style": "underline"
- },
- "angle": {
- "icon": "angle_bracket"
- // "color": "brackethighlighter.angle",
- // "style": "underline"
- },
- "tag": {
- "icon": "tag",
- // "color": "brackethighlighter.tag",
- "style": "outline"
- },
- "single_quote": {
- "icon": "single_quote"
- // "color": "brackethighlighter.quote",
- // "style": "underline"
- },
- "double_quote": {
- "icon": "double_quote"
- // "color": "brackethighlighter.quote",
- // "style": "underline"
- },
- "regex": {
- "icon": "regex"
- // "color": "brackethighlighter.quote",
- // "style": "underline"
- }
- }
-}
diff --git a/EthanBrown.SublimeText2.EditorPackages/tools/chocolateyInstall.ps1 b/EthanBrown.SublimeText2.EditorPackages/tools/chocolateyInstall.ps1
deleted file mode 100644
index 44e9567..0000000
--- a/EthanBrown.SublimeText2.EditorPackages/tools/chocolateyInstall.ps1
+++ /dev/null
@@ -1,48 +0,0 @@
-$package = 'EthanBrown.SublimeText2.EditorPackages'
-
-function Get-CurrentDirectory
-{
- $thisName = $MyInvocation.MyCommand.Name
- [IO.Path]::GetDirectoryName((Get-Content function:$thisName).File)
-}
-
-try {
- $current = Get-CurrentDirectory
-
- . (Join-Path $current 'JsonHelpers.ps1')
- . (Join-Path $current 'SublimeHelpers.ps1')
-
- $sublimeUserDataPath = Get-SublimeUserPath
-
- #straight file copies
- 'bh_core.sublime-settings',
- 'EasyMotion.sublime-settings',
- 'MarkdownPreview.sublime-settings' |
- % {
- $params = @{
- Path = Join-Path $current $_;
- Destination = Join-Path $sublimeUserDataPath $_;
- Force = $true
- }
- Copy-Item @params
- }
-
- $packageCache = Join-Path (Get-CurrentDirectory) 'PackageCache'
- Install-SublimePackagesFromCache -Directory $packageCache -Version 2
- Install-SublimePackageControl -PreRelease -Version 2
- $packageControl = Join-Path $current 'Package Control.sublime-settings'
- Merge-PackageControlSettings -FilePath $packageControl
-
- $preferences = Join-Path $current 'Preferences.sublime-settings'
- Merge-Preferences -FilePath $preferences
-
- if (Get-Process -Name sublime_text -ErrorAction SilentlyContinue)
- {
- Write-Warning 'Please close and re-open Sublime Text to force packages to update'
- }
-
- Write-ChocolateySuccess $package
-} catch {
- Write-ChocolateyFailure $package "$($_.Exception.Message)"
- throw
-}
diff --git a/EthanBrown.SublimeText2.GitPackages/EthanBrown.SublimeText2.GitPackages.nuspec b/EthanBrown.SublimeText2.GitPackages/EthanBrown.SublimeText2.GitPackages.nuspec
deleted file mode 100644
index 019e10b..0000000
--- a/EthanBrown.SublimeText2.GitPackages/EthanBrown.SublimeText2.GitPackages.nuspec
+++ /dev/null
@@ -1,71 +0,0 @@
-
-
-
- EthanBrown.SublimeText2.GitPackages
- Sublime Text 2 - Git Integration Packages
- 0.2.2
- Various
- Ethan Brown
- A number of packages helpful for increased editor productivity when using Git.
- Includes a number of very useful packages for Sublime Text 2.
-
- Included
- ===========================================================================
-
- - EditorConfig
- https://github.com/sindresorhus/editorconfig-sublime
-
- - Git
- https://github.com/kemayo/sublime-text-2-git
-
- - GitHubinator
- https://github.com/ehamiter/ST2-GitHubinator
-
- - Modific
- https://github.com/gornostal/Modific
-
- - SideBarGit
- https://github.com/SublimeText/SideBarGit
-
- - sublime-github (Github Gists)
- https://github.com/bgreenlee/sublime-github
-
- Customized Key Bindings
- ===========================================================================
- https://github.com/Iristyle/SublimeKeyMap.Git
-
- Additional Package Preferences
- ===========================================================================
- Git - Commit message rules
- Github Gists - Generates an OAuth token automatically
- SideBarGit - disables branch since Git already supplies it
-
- Additional User Preferences
- ===========================================================================
- Rules for
- - drawing whitespace
- - ensuring newline at eof
- - rulers at 50, 72, 80 and 120
- - use spaces everywhere
- - trim whitespace on save
-
- http://github.com/Iristyle/ChocolateyPackages/
- SublimeText package editor
-
- false
- https://raw.github.com/Iristyle/ChocolateyPackages/master/SublimeText2.app/Sublime_Text.png
- * Use a local package cache to prevent first-time package restore / load errors
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/Git Commit Message.sublime-settings b/EthanBrown.SublimeText2.GitPackages/tools/Git Commit Message.sublime-settings
deleted file mode 100644
index efd3a4c..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/Git Commit Message.sublime-settings
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "rulers": [50, 72]
-}
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/GitHub.sublime-settings b/EthanBrown.SublimeText2.GitPackages/tools/GitHub.sublime-settings
deleted file mode 100644
index d0dc0cf..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/GitHub.sublime-settings
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "accounts": {
- "GitHub": {
- "base_uri": "https://api.github.com",
- "github_token": ""
- }
- }
-}
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/Package Control.sublime-settings b/EthanBrown.SublimeText2.GitPackages/tools/Package Control.sublime-settings
deleted file mode 100644
index f53395e..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/Package Control.sublime-settings
+++ /dev/null
@@ -1,19 +0,0 @@
-{
- "installed_packages":
- [
- "EditorConfig",
- "Git",
- "GitHubinator",
- "Modific",
- "SideBarGit",
- "sublime-github",
- "ZZZ.EthanBrown.SublimeKeyMap.Git"
- ],
- "package_name_map": {
- "SublimeKeyMap.Git": "ZZZ.EthanBrown.SublimeKeyMap.Git"
- },
- "repositories":
- [
- "https://github.com/Iristyle/SublimeKeyMap.Git"
- ]
-}
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/EditorConfig/.editorconfig b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/EditorConfig/.editorconfig
deleted file mode 100644
index b0d7fd9..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/EditorConfig/.editorconfig
+++ /dev/null
@@ -1,12 +0,0 @@
-# editorconfig.org
-root = true
-
-[*]
-indent_style = tab
-end_of_line = lf
-charset = utf-8
-trim_trailing_whitespace = true
-insert_final_newline = true
-
-[*.md]
-trim_trailing_whitespace = false
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/EditorConfig/.gitattributes b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/EditorConfig/.gitattributes
deleted file mode 100644
index 176a458..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/EditorConfig/.gitattributes
+++ /dev/null
@@ -1 +0,0 @@
-* text=auto
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/EditorConfig/EditorConfig.py b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/EditorConfig/EditorConfig.py
deleted file mode 100644
index 57ef4af..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/EditorConfig/EditorConfig.py
+++ /dev/null
@@ -1,79 +0,0 @@
-import sublime_plugin
-
-try:
- import os, sys
- # stupid python module system
- sys.path.append(os.path.dirname(os.path.realpath(__file__)))
- from .editorconfig import get_properties, EditorConfigError
-except:
- # Python 2
- from editorconfig import get_properties, EditorConfigError
-
-
-LINE_ENDINGS = {
- 'lf': 'unix',
- 'crlf': 'windows',
- 'cr': 'cr'
-}
-
-CHARSETS = {
- 'latin1': 'Western (ISO 8859-1)',
- 'utf-8': 'utf-8',
- 'utf-8-bom': 'utf-8 with bom',
- 'utf-16be': 'utf-16 be',
- 'utf-16le': 'utf-16 le'
-}
-
-class EditorConfig(sublime_plugin.EventListener):
- def on_load(self, view):
- self.init(view, False)
-
- def on_pre_save(self, view):
- self.init(view, True)
-
- def init(self, view, pre_save):
- path = view.file_name()
- if not path:
- return
- try:
- config = get_properties(path)
- except EditorConfigError:
- print('Error occurred while getting EditorConfig properties')
- else:
- if config:
- if pre_save:
- self.apply_charset(view, config)
- else:
- self.apply_config(view, config)
-
- def apply_charset(self, view, config):
- charset = config.get('charset')
- if charset in CHARSETS:
- view.set_encoding(CHARSETS[charset])
-
- def apply_config(self, view, config):
- settings = view.settings()
- indent_style = config.get('indent_style')
- indent_size = config.get('indent_size')
- end_of_line = config.get('end_of_line')
- trim_trailing_whitespace = config.get('trim_trailing_whitespace')
- insert_final_newline = config.get('insert_final_newline')
- if indent_style == 'space':
- settings.set('translate_tabs_to_spaces', True)
- elif indent_style == 'tab':
- settings.set('translate_tabs_to_spaces', False)
- if indent_size:
- try:
- settings.set('tab_size', int(indent_size))
- except ValueError:
- pass
- if end_of_line in LINE_ENDINGS:
- view.set_line_endings(LINE_ENDINGS[end_of_line])
- if trim_trailing_whitespace == 'true':
- settings.set('trim_trailing_white_space_on_save', True)
- elif trim_trailing_whitespace == 'false':
- settings.set('trim_trailing_white_space_on_save', False)
- if insert_final_newline == 'true':
- settings.set('ensure_newline_at_eof_on_save', True)
- elif insert_final_newline == 'false':
- settings.set('ensure_newline_at_eof_on_save', False)
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/EditorConfig/editorconfig/__init__.py b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/EditorConfig/editorconfig/__init__.py
deleted file mode 100644
index 2dd8408..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/EditorConfig/editorconfig/__init__.py
+++ /dev/null
@@ -1,19 +0,0 @@
-"""EditorConfig Python Core"""
-
-from editorconfig.versiontools import join_version
-
-VERSION = (0, 11, 3, "final")
-
-__all__ = ['get_properties', 'EditorConfigError', 'exceptions']
-
-__version__ = join_version(VERSION)
-
-
-def get_properties(filename):
- """Locate and parse EditorConfig files for the given filename"""
- handler = EditorConfigHandler(filename)
- return handler.get_configurations()
-
-
-from editorconfig.handler import EditorConfigHandler
-from editorconfig.exceptions import *
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/EditorConfig/editorconfig/compat.py b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/EditorConfig/editorconfig/compat.py
deleted file mode 100644
index ebd0405..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/EditorConfig/editorconfig/compat.py
+++ /dev/null
@@ -1,18 +0,0 @@
-"""EditorConfig Python2/Python3/Jython compatibility utilities"""
-import sys
-import types
-
-__all__ = ['slice', 'u']
-
-
-if sys.version_info[0] == 2:
- slice = types.SliceType
-else:
- slice = slice
-
-
-if sys.version_info[0] == 2:
- import codecs
- u = lambda s: codecs.unicode_escape_decode(s)[0]
-else:
- u = lambda s: s
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/EditorConfig/editorconfig/exceptions.py b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/EditorConfig/editorconfig/exceptions.py
deleted file mode 100644
index 545732b..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/EditorConfig/editorconfig/exceptions.py
+++ /dev/null
@@ -1,27 +0,0 @@
-"""EditorConfig exception classes
-
-Licensed under PSF License (see LICENSE.txt file).
-
-"""
-
-
-class EditorConfigError(Exception):
- """Parent class of all exceptions raised by EditorConfig"""
-
-
-try:
- from ConfigParser import ParsingError as _ParsingError
-except:
- from configparser import ParsingError as _ParsingError
-
-
-class ParsingError(_ParsingError, EditorConfigError):
- """Error raised if an EditorConfig file could not be parsed"""
-
-
-class PathError(ValueError, EditorConfigError):
- """Error raised if invalid filepath is specified"""
-
-
-class VersionError(ValueError, EditorConfigError):
- """Error raised if invalid version number is specified"""
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/EditorConfig/editorconfig/fnmatch.py b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/EditorConfig/editorconfig/fnmatch.py
deleted file mode 100644
index a1d5f10..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/EditorConfig/editorconfig/fnmatch.py
+++ /dev/null
@@ -1,126 +0,0 @@
-"""Filename matching with shell patterns.
-
-fnmatch(FILENAME, PATTERN) matches according to the local convention.
-fnmatchcase(FILENAME, PATTERN) always takes case in account.
-
-The functions operate by translating the pattern into a regular
-expression. They cache the compiled regular expressions for speed.
-
-The function translate(PATTERN) returns a regular expression
-corresponding to PATTERN. (It does not compile it.)
-
-Based on code from fnmatch.py file distributed with Python 2.6.
-
-Licensed under PSF License (see LICENSE.txt file).
-
-Changes to original fnmatch module:
-- translate function supports ``*`` and ``**`` similarly to fnmatch C library
-"""
-
-import os
-import re
-
-__all__ = ["fnmatch", "fnmatchcase", "translate"]
-
-_cache = {}
-
-
-def fnmatch(name, pat):
- """Test whether FILENAME matches PATTERN.
-
- Patterns are Unix shell style:
-
- - ``*`` matches everything except path separator
- - ``**`` matches everything
- - ``?`` matches any single character
- - ``[seq]`` matches any character in seq
- - ``[!seq]`` matches any char not in seq
- - ``{s1,s2,s3}`` matches any of the strings given (separated by commas)
-
- An initial period in FILENAME is not special.
- Both FILENAME and PATTERN are first case-normalized
- if the operating system requires it.
- If you don't want this, use fnmatchcase(FILENAME, PATTERN).
- """
-
- name = os.path.normcase(name).replace(os.sep, "/")
- return fnmatchcase(name, pat)
-
-
-def fnmatchcase(name, pat):
- """Test whether FILENAME matches PATTERN, including case.
-
- This is a version of fnmatch() which doesn't case-normalize
- its arguments.
- """
-
- if not pat in _cache:
- res = translate(pat)
- _cache[pat] = re.compile(res)
- return _cache[pat].match(name) is not None
-
-
-def translate(pat):
- """Translate a shell PATTERN to a regular expression.
-
- There is no way to quote meta-characters.
- """
-
- i, n = 0, len(pat)
- res = ''
- escaped = False
- while i < n:
- c = pat[i]
- i = i + 1
- if c == '*':
- j = i
- if j < n and pat[j] == '*':
- res = res + '.*'
- else:
- res = res + '[^/]*'
- elif c == '?':
- res = res + '.'
- elif c == '[':
- j = i
- if j < n and pat[j] == '!':
- j = j + 1
- if j < n and pat[j] == ']':
- j = j + 1
- while j < n and (pat[j] != ']' or escaped):
- escaped = pat[j] == '\\' and not escaped
- j = j + 1
- if j >= n:
- res = res + '\\['
- else:
- stuff = pat[i:j]
- i = j + 1
- if stuff[0] == '!':
- stuff = '^' + stuff[1:]
- elif stuff[0] == '^':
- stuff = '\\' + stuff
- res = '%s[%s]' % (res, stuff)
- elif c == '{':
- j = i
- groups = []
- while j < n and pat[j] != '}':
- k = j
- while k < n and (pat[k] not in (',', '}') or escaped):
- escaped = pat[k] == '\\' and not escaped
- k = k + 1
- group = pat[j:k]
- for char in (',', '}', '\\'):
- group = group.replace('\\' + char, char)
- groups.append(group)
- j = k
- if j < n and pat[j] == ',':
- j = j + 1
- if j < n and pat[j] == '}':
- groups.append('')
- if j >= n or len(groups) < 2:
- res = res + '\\{'
- else:
- res = '%s(%s)' % (res, '|'.join(map(re.escape, groups)))
- i = j + 1
- else:
- res = res + re.escape(c)
- return res + '\Z(?ms)'
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/EditorConfig/editorconfig/handler.py b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/EditorConfig/editorconfig/handler.py
deleted file mode 100644
index 72d99bd..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/EditorConfig/editorconfig/handler.py
+++ /dev/null
@@ -1,126 +0,0 @@
-"""EditorConfig file handler
-
-Provides ``EditorConfigHandler`` class for locating and parsing
-EditorConfig files relevant to a given filepath.
-
-Licensed under PSF License (see LICENSE.txt file).
-
-"""
-
-import os
-
-from editorconfig import VERSION
-from editorconfig.ini import EditorConfigParser
-from editorconfig.exceptions import PathError, VersionError
-
-
-__all__ = ['EditorConfigHandler']
-
-
-def get_filenames(path, filename):
- """Yield full filepath for filename in each directory in and above path"""
- path_list = []
- while True:
- path_list.append(os.path.join(path, filename))
- newpath = os.path.dirname(path)
- if path == newpath:
- break
- path = newpath
- return path_list
-
-
-class EditorConfigHandler(object):
-
- """
- Allows locating and parsing of EditorConfig files for given filename
-
- In addition to the constructor a single public method is provided,
- ``get_configurations`` which returns the EditorConfig options for
- the ``filepath`` specified to the constructor.
-
- """
-
- def __init__(self, filepath, conf_filename='.editorconfig',
- version=VERSION):
- """Create EditorConfigHandler for matching given filepath"""
- self.filepath = filepath
- self.conf_filename = conf_filename
- self.version = version
- self.options = None
-
- def get_configurations(self):
-
- """
- Find EditorConfig files and return all options matching filepath
-
- Special exceptions that may be raised by this function include:
-
- - ``VersionError``: self.version is invalid EditorConfig version
- - ``PathError``: self.filepath is not a valid absolute filepath
- - ``ParsingError``: improperly formatted EditorConfig file found
-
- """
-
- self.check_assertions()
- path, filename = os.path.split(self.filepath)
- conf_files = get_filenames(path, self.conf_filename)
-
- # Attempt to find and parse every EditorConfig file in filetree
- for filename in conf_files:
- parser = EditorConfigParser(self.filepath)
- parser.read(filename)
-
- # Merge new EditorConfig file's options into current options
- old_options = self.options
- self.options = parser.options
- if old_options:
- self.options.update(old_options)
-
- # Stop parsing if parsed file has a ``root = true`` option
- if parser.root_file:
- break
-
- self.preprocess_values()
- return self.options
-
- def check_assertions(self):
-
- """Raise error if filepath or version have invalid values"""
-
- # Raise ``PathError`` if filepath isn't an absolute path
- if not os.path.isabs(self.filepath):
- raise PathError("Input file must be a full path name.")
-
- # Raise ``VersionError`` if version specified is greater than current
- if self.version is not None and self.version[:3] > VERSION[:3]:
- raise VersionError(
- "Required version is greater than the current version.")
-
- def preprocess_values(self):
-
- """Preprocess option values for consumption by plugins"""
-
- opts = self.options
-
- # Lowercase option value for certain options
- for name in ["end_of_line", "indent_style", "indent_size",
- "insert_final_newline", "trim_trailing_whitespace", "charset"]:
- if name in opts:
- opts[name] = opts[name].lower()
-
- # Set indent_size to "tab" if indent_size is unspecified and
- # indent_style is set to "tab".
- if (opts.get("indent_style") == "tab" and
- not "indent_size" in opts and self.version >= (0, 10, 0)):
- opts["indent_size"] = "tab"
-
- # Set tab_width to indent_size if indent_size is specified and
- # tab_width is unspecified
- if ("indent_size" in opts and "tab_width" not in opts and
- opts["indent_size"] != "tab"):
- opts["tab_width"] = opts["indent_size"]
-
- # Set indent_size to tab_width if indent_size is "tab"
- if ("indent_size" in opts and "tab_width" in opts and
- opts["indent_size"] == "tab"):
- opts["indent_size"] = opts["tab_width"]
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/EditorConfig/editorconfig/ini.py b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/EditorConfig/editorconfig/ini.py
deleted file mode 100644
index 3f58fed..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/EditorConfig/editorconfig/ini.py
+++ /dev/null
@@ -1,150 +0,0 @@
-"""EditorConfig file parser
-
-Based on code from ConfigParser.py file distributed with Python 2.6.
-
-Licensed under PSF License (see LICENSE.txt file).
-
-Changes to original ConfigParser:
-
-- Special characters can be used in section names
-- Octothorpe can be used for comments (not just at beginning of line)
-- Only track INI options in sections that match target filename
-- Stop parsing files with when ``root = true`` is found
-
-"""
-
-import re
-from codecs import open
-import posixpath
-from os import sep
-from os.path import normcase, dirname
-
-from editorconfig.exceptions import ParsingError
-from editorconfig.fnmatch import fnmatch
-from editorconfig.odict import OrderedDict
-from editorconfig.compat import u
-
-
-__all__ = ["ParsingError", "EditorConfigParser"]
-
-
-class EditorConfigParser(object):
-
- """Parser for EditorConfig-style configuration files
-
- Based on RawConfigParser from ConfigParser.py in Python 2.6.
- """
-
- # Regular expressions for parsing section headers and options.
- # Allow ``]`` and escaped ``;`` and ``#`` characters in section headers
- SECTCRE = re.compile(
- r'\s*\[' # [
- r'(?P([^#;]|\\#|\\;)+)' # very permissive!
- r'\]' # ]
- )
- # Regular expression for parsing option name/values.
- # Allow any amount of whitespaces, followed by separator
- # (either ``:`` or ``=``), followed by any amount of whitespace and then
- # any characters to eol
- OPTCRE = re.compile(
- r'\s*(?P[^:=\s][^:=]*)'
- r'\s*(?P[:=])\s*'
- r'(?P.*)$'
- )
-
- def __init__(self, filename):
- self.filename = filename
- self.options = OrderedDict()
- self.root_file = False
-
- def matches_filename(self, config_filename, glob):
- """Return True if section glob matches filename"""
- config_dirname = normcase(dirname(config_filename)).replace(sep, '/')
- glob = glob.replace("\\#", "#")
- glob = glob.replace("\\;", ";")
- if '/' in glob:
- if glob.find('/') == 0:
- glob = glob[1:]
- glob = posixpath.join(config_dirname, glob)
- else:
- glob = posixpath.join('**/', glob)
- return fnmatch(self.filename, glob)
-
- def read(self, filename):
- """Read and parse single EditorConfig file"""
- try:
- fp = open(filename, encoding='utf-8')
- except IOError:
- return
- self._read(fp, filename)
- fp.close()
-
- def _read(self, fp, fpname):
- """Parse a sectioned setup file.
-
- The sections in setup file contains a title line at the top,
- indicated by a name in square brackets (`[]'), plus key/value
- options lines, indicated by `name: value' format lines.
- Continuations are represented by an embedded newline then
- leading whitespace. Blank lines, lines beginning with a '#',
- and just about everything else are ignored.
- """
- in_section = False
- matching_section = False
- optname = None
- lineno = 0
- e = None # None, or an exception
- while True:
- line = fp.readline()
- if not line:
- break
- if lineno == 0 and line.startswith(u('\ufeff')):
- line = line[1:] # Strip UTF-8 BOM
- lineno = lineno + 1
- # comment or blank line?
- if line.strip() == '' or line[0] in '#;':
- continue
- # a section header or option header?
- else:
- # is it a section header?
- mo = self.SECTCRE.match(line)
- if mo:
- sectname = mo.group('header')
- in_section = True
- matching_section = self.matches_filename(fpname, sectname)
- # So sections can't start with a continuation line
- optname = None
- # an option line?
- else:
- mo = self.OPTCRE.match(line)
- if mo:
- optname, vi, optval = mo.group('option', 'vi', 'value')
- if ';' in optval or '#' in optval:
- # ';' and '#' are comment delimiters only if
- # preceeded by a spacing character
- m = re.search('(.*?) [;#]', optval)
- if m:
- optval = m.group(1)
- optval = optval.strip()
- # allow empty values
- if optval == '""':
- optval = ''
- optname = self.optionxform(optname.rstrip())
- if not in_section and optname == 'root':
- self.root_file = (optval.lower() == 'true')
- if matching_section:
- self.options[optname] = optval
- else:
- # a non-fatal parsing error occurred. set up the
- # exception but keep going. the exception will be
- # raised at the end of the file and will contain a
- # list of all bogus lines
- if not e:
- e = ParsingError(fpname)
- e.append(lineno, repr(line))
- # if any parsing errors occurred, raise an exception
- if e:
- raise e
-
- def optionxform(self, optionstr):
- return optionstr.lower()
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/EditorConfig/editorconfig/main.py b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/EditorConfig/editorconfig/main.py
deleted file mode 100644
index cd12356..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/EditorConfig/editorconfig/main.py
+++ /dev/null
@@ -1,76 +0,0 @@
-"""EditorConfig command line interface
-
-Licensed under PSF License (see LICENSE.txt file).
-
-"""
-
-import getopt
-import sys
-
-from editorconfig import __version__, VERSION
-from editorconfig.versiontools import split_version
-from editorconfig.handler import EditorConfigHandler
-from editorconfig.exceptions import ParsingError, PathError, VersionError
-
-
-def version():
- print("EditorConfig Python Core Version %s" % __version__)
-
-
-def usage(command, error=False):
- if error:
- out = sys.stderr
- else:
- out = sys.stdout
- out.write("%s [OPTIONS] FILENAME\n" % command)
- out.write('-f '
- 'Specify conf filename other than ".editorconfig".\n')
- out.write("-b "
- "Specify version (used by devs to test compatibility).\n")
- out.write("-h OR --help Print this help message.\n")
- out.write("-v OR --version Display version information.\n")
-
-
-def main():
- command_name = sys.argv[0]
- try:
- opts, args = getopt.getopt(sys.argv[1:], "vhb:f:", ["version", "help"])
- except getopt.GetoptError:
- print(str(sys.exc_info()[1])) # For Python 2/3 compatibility
- usage(command_name, error=True)
- sys.exit(2)
-
- version_tuple = VERSION
- conf_filename = '.editorconfig'
-
- for option, arg in opts:
- if option in ('-h', '--help'):
- usage(command_name)
- sys.exit()
- if option in ('-v', '--version'):
- version()
- sys.exit()
- if option == '-f':
- conf_filename = arg
- if option == '-b':
- version_tuple = split_version(arg)
- if version_tuple is None:
- sys.exit("Invalid version number: %s" % arg)
-
- if len(args) < 1:
- usage(command_name, error=True)
- sys.exit(2)
- filenames = args
- multiple_files = len(args) > 1
-
- for filename in filenames:
- handler = EditorConfigHandler(filename, conf_filename, version_tuple)
- try:
- options = handler.get_configurations()
- except (ParsingError, PathError, VersionError):
- print(str(sys.exc_info()[1])) # For Python 2/3 compatibility
- sys.exit(2)
- if multiple_files:
- print("[%s]" % filename)
- for key, value in options.items():
- print("%s=%s" % (key, value))
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/EditorConfig/editorconfig/odict.py b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/EditorConfig/editorconfig/odict.py
deleted file mode 100644
index 949e585..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/EditorConfig/editorconfig/odict.py
+++ /dev/null
@@ -1,899 +0,0 @@
-"""odict.py: An Ordered Dictionary object"""
-# Copyright (C) 2005 Nicola Larosa, Michael Foord
-# E-mail: nico AT tekNico DOT net, fuzzyman AT voidspace DOT org DOT uk
-# Copyright (c) 2003-2010, Michael Foord
-# E-mail : fuzzyman AT voidspace DOT org DOT uk
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are
-# met:
-#
-#
-# * Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-#
-# * Redistributions in binary form must reproduce the above
-# copyright notice, this list of conditions and the following
-# disclaimer in the documentation and/or other materials provided
-# with the distribution.
-#
-# * Neither the name of Michael Foord nor the name of Voidspace
-# may be used to endorse or promote products derived from this
-# software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-
-from __future__ import generators
-import sys
-import warnings
-
-from editorconfig.compat import slice
-
-
-__docformat__ = "restructuredtext en"
-__all__ = ['OrderedDict']
-
-
-INTP_VER = sys.version_info[:2]
-if INTP_VER < (2, 2):
- raise RuntimeError("Python v.2.2 or later required")
-
-
-class OrderedDict(dict):
- """
- A class of dictionary that keeps the insertion order of keys.
-
- All appropriate methods return keys, items, or values in an ordered way.
-
- All normal dictionary methods are available. Update and comparison is
- restricted to other OrderedDict objects.
-
- Various sequence methods are available, including the ability to explicitly
- mutate the key ordering.
-
- __contains__ tests:
-
- >>> d = OrderedDict(((1, 3),))
- >>> 1 in d
- 1
- >>> 4 in d
- 0
-
- __getitem__ tests:
-
- >>> OrderedDict(((1, 3), (3, 2), (2, 1)))[2]
- 1
- >>> OrderedDict(((1, 3), (3, 2), (2, 1)))[4]
- Traceback (most recent call last):
- KeyError: 4
-
- __len__ tests:
-
- >>> len(OrderedDict())
- 0
- >>> len(OrderedDict(((1, 3), (3, 2), (2, 1))))
- 3
-
- get tests:
-
- >>> d = OrderedDict(((1, 3), (3, 2), (2, 1)))
- >>> d.get(1)
- 3
- >>> d.get(4) is None
- 1
- >>> d.get(4, 5)
- 5
- >>> d
- OrderedDict([(1, 3), (3, 2), (2, 1)])
-
- has_key tests:
-
- >>> d = OrderedDict(((1, 3), (3, 2), (2, 1)))
- >>> d.has_key(1)
- 1
- >>> d.has_key(4)
- 0
- """
-
- def __init__(self, init_val=(), strict=False):
- """
- Create a new ordered dictionary. Cannot init from a normal dict,
- nor from kwargs, since items order is undefined in those cases.
-
- If the ``strict`` keyword argument is ``True`` (``False`` is the
- default) then when doing slice assignment - the ``OrderedDict`` you are
- assigning from *must not* contain any keys in the remaining dict.
-
- >>> OrderedDict()
- OrderedDict([])
- >>> OrderedDict({1: 1})
- Traceback (most recent call last):
- TypeError: undefined order, cannot get items from dict
- >>> OrderedDict({1: 1}.items())
- OrderedDict([(1, 1)])
- >>> d = OrderedDict(((1, 3), (3, 2), (2, 1)))
- >>> d
- OrderedDict([(1, 3), (3, 2), (2, 1)])
- >>> OrderedDict(d)
- OrderedDict([(1, 3), (3, 2), (2, 1)])
- """
- self.strict = strict
- dict.__init__(self)
- if isinstance(init_val, OrderedDict):
- self._sequence = init_val.keys()
- dict.update(self, init_val)
- elif isinstance(init_val, dict):
- # we lose compatibility with other ordered dict types this way
- raise TypeError('undefined order, cannot get items from dict')
- else:
- self._sequence = []
- self.update(init_val)
-
-### Special methods ###
-
- def __delitem__(self, key):
- """
- >>> d = OrderedDict(((1, 3), (3, 2), (2, 1)))
- >>> del d[3]
- >>> d
- OrderedDict([(1, 3), (2, 1)])
- >>> del d[3]
- Traceback (most recent call last):
- KeyError: 3
- >>> d[3] = 2
- >>> d
- OrderedDict([(1, 3), (2, 1), (3, 2)])
- >>> del d[0:1]
- >>> d
- OrderedDict([(2, 1), (3, 2)])
- """
- if isinstance(key, slice):
- # FIXME: efficiency?
- keys = self._sequence[key]
- for entry in keys:
- dict.__delitem__(self, entry)
- del self._sequence[key]
- else:
- # do the dict.__delitem__ *first* as it raises
- # the more appropriate error
- dict.__delitem__(self, key)
- self._sequence.remove(key)
-
- def __eq__(self, other):
- """
- >>> d = OrderedDict(((1, 3), (3, 2), (2, 1)))
- >>> d == OrderedDict(d)
- True
- >>> d == OrderedDict(((1, 3), (2, 1), (3, 2)))
- False
- >>> d == OrderedDict(((1, 0), (3, 2), (2, 1)))
- False
- >>> d == OrderedDict(((0, 3), (3, 2), (2, 1)))
- False
- >>> d == dict(d)
- False
- >>> d == False
- False
- """
- if isinstance(other, OrderedDict):
- # FIXME: efficiency?
- # Generate both item lists for each compare
- return (self.items() == other.items())
- else:
- return False
-
- def __lt__(self, other):
- """
- >>> d = OrderedDict(((1, 3), (3, 2), (2, 1)))
- >>> c = OrderedDict(((0, 3), (3, 2), (2, 1)))
- >>> c < d
- True
- >>> d < c
- False
- >>> d < dict(c)
- Traceback (most recent call last):
- TypeError: Can only compare with other OrderedDicts
- """
- if not isinstance(other, OrderedDict):
- raise TypeError('Can only compare with other OrderedDicts')
- # FIXME: efficiency?
- # Generate both item lists for each compare
- return (self.items() < other.items())
-
- def __le__(self, other):
- """
- >>> d = OrderedDict(((1, 3), (3, 2), (2, 1)))
- >>> c = OrderedDict(((0, 3), (3, 2), (2, 1)))
- >>> e = OrderedDict(d)
- >>> c <= d
- True
- >>> d <= c
- False
- >>> d <= dict(c)
- Traceback (most recent call last):
- TypeError: Can only compare with other OrderedDicts
- >>> d <= e
- True
- """
- if not isinstance(other, OrderedDict):
- raise TypeError('Can only compare with other OrderedDicts')
- # FIXME: efficiency?
- # Generate both item lists for each compare
- return (self.items() <= other.items())
-
- def __ne__(self, other):
- """
- >>> d = OrderedDict(((1, 3), (3, 2), (2, 1)))
- >>> d != OrderedDict(d)
- False
- >>> d != OrderedDict(((1, 3), (2, 1), (3, 2)))
- True
- >>> d != OrderedDict(((1, 0), (3, 2), (2, 1)))
- True
- >>> d == OrderedDict(((0, 3), (3, 2), (2, 1)))
- False
- >>> d != dict(d)
- True
- >>> d != False
- True
- """
- if isinstance(other, OrderedDict):
- # FIXME: efficiency?
- # Generate both item lists for each compare
- return not (self.items() == other.items())
- else:
- return True
-
- def __gt__(self, other):
- """
- >>> d = OrderedDict(((1, 3), (3, 2), (2, 1)))
- >>> c = OrderedDict(((0, 3), (3, 2), (2, 1)))
- >>> d > c
- True
- >>> c > d
- False
- >>> d > dict(c)
- Traceback (most recent call last):
- TypeError: Can only compare with other OrderedDicts
- """
- if not isinstance(other, OrderedDict):
- raise TypeError('Can only compare with other OrderedDicts')
- # FIXME: efficiency?
- # Generate both item lists for each compare
- return (self.items() > other.items())
-
- def __ge__(self, other):
- """
- >>> d = OrderedDict(((1, 3), (3, 2), (2, 1)))
- >>> c = OrderedDict(((0, 3), (3, 2), (2, 1)))
- >>> e = OrderedDict(d)
- >>> c >= d
- False
- >>> d >= c
- True
- >>> d >= dict(c)
- Traceback (most recent call last):
- TypeError: Can only compare with other OrderedDicts
- >>> e >= d
- True
- """
- if not isinstance(other, OrderedDict):
- raise TypeError('Can only compare with other OrderedDicts')
- # FIXME: efficiency?
- # Generate both item lists for each compare
- return (self.items() >= other.items())
-
- def __repr__(self):
- """
- Used for __repr__ and __str__
-
- >>> r1 = repr(OrderedDict((('a', 'b'), ('c', 'd'), ('e', 'f'))))
- >>> r1
- "OrderedDict([('a', 'b'), ('c', 'd'), ('e', 'f')])"
- >>> r2 = repr(OrderedDict((('a', 'b'), ('e', 'f'), ('c', 'd'))))
- >>> r2
- "OrderedDict([('a', 'b'), ('e', 'f'), ('c', 'd')])"
- >>> r1 == str(OrderedDict((('a', 'b'), ('c', 'd'), ('e', 'f'))))
- True
- >>> r2 == str(OrderedDict((('a', 'b'), ('e', 'f'), ('c', 'd'))))
- True
- """
- return '%s([%s])' % (self.__class__.__name__, ', '.join(
- ['(%r, %r)' % (key, self[key]) for key in self._sequence]))
-
- def __setitem__(self, key, val):
- """
- Allows slice assignment, so long as the slice is an OrderedDict
- >>> d = OrderedDict()
- >>> d['a'] = 'b'
- >>> d['b'] = 'a'
- >>> d[3] = 12
- >>> d
- OrderedDict([('a', 'b'), ('b', 'a'), (3, 12)])
- >>> d[:] = OrderedDict(((1, 2), (2, 3), (3, 4)))
- >>> d
- OrderedDict([(1, 2), (2, 3), (3, 4)])
- >>> d[::2] = OrderedDict(((7, 8), (9, 10)))
- >>> d
- OrderedDict([(7, 8), (2, 3), (9, 10)])
- >>> d = OrderedDict(((0, 1), (1, 2), (2, 3), (3, 4)))
- >>> d[1:3] = OrderedDict(((1, 2), (5, 6), (7, 8)))
- >>> d
- OrderedDict([(0, 1), (1, 2), (5, 6), (7, 8), (3, 4)])
- >>> d = OrderedDict(((0, 1), (1, 2), (2, 3), (3, 4)), strict=True)
- >>> d[1:3] = OrderedDict(((1, 2), (5, 6), (7, 8)))
- >>> d
- OrderedDict([(0, 1), (1, 2), (5, 6), (7, 8), (3, 4)])
-
- >>> a = OrderedDict(((0, 1), (1, 2), (2, 3)), strict=True)
- >>> a[3] = 4
- >>> a
- OrderedDict([(0, 1), (1, 2), (2, 3), (3, 4)])
- >>> a[::1] = OrderedDict([(0, 1), (1, 2), (2, 3), (3, 4)])
- >>> a
- OrderedDict([(0, 1), (1, 2), (2, 3), (3, 4)])
- >>> a[:2] = OrderedDict([(0, 1), (1, 2), (2, 3), (3, 4), (4, 5)])
- Traceback (most recent call last):
- ValueError: slice assignment must be from unique keys
- >>> a = OrderedDict(((0, 1), (1, 2), (2, 3)))
- >>> a[3] = 4
- >>> a
- OrderedDict([(0, 1), (1, 2), (2, 3), (3, 4)])
- >>> a[::1] = OrderedDict([(0, 1), (1, 2), (2, 3), (3, 4)])
- >>> a
- OrderedDict([(0, 1), (1, 2), (2, 3), (3, 4)])
- >>> a[:2] = OrderedDict([(0, 1), (1, 2), (2, 3), (3, 4)])
- >>> a
- OrderedDict([(0, 1), (1, 2), (2, 3), (3, 4)])
- >>> a[::-1] = OrderedDict([(0, 1), (1, 2), (2, 3), (3, 4)])
- >>> a
- OrderedDict([(3, 4), (2, 3), (1, 2), (0, 1)])
-
- >>> d = OrderedDict([(0, 1), (1, 2), (2, 3), (3, 4)])
- >>> d[:1] = 3
- Traceback (most recent call last):
- TypeError: slice assignment requires an OrderedDict
-
- >>> d = OrderedDict([(0, 1), (1, 2), (2, 3), (3, 4)])
- >>> d[:1] = OrderedDict([(9, 8)])
- >>> d
- OrderedDict([(9, 8), (1, 2), (2, 3), (3, 4)])
- """
- if isinstance(key, slice):
- if not isinstance(val, OrderedDict):
- # FIXME: allow a list of tuples?
- raise TypeError('slice assignment requires an OrderedDict')
- keys = self._sequence[key]
- # NOTE: Could use ``range(*key.indices(len(self._sequence)))``
- indexes = range(len(self._sequence))[key]
- if key.step is None:
- # NOTE: new slice may not be the same size as the one being
- # overwritten !
- # NOTE: What is the algorithm for an impossible slice?
- # e.g. d[5:3]
- pos = key.start or 0
- del self[key]
- newkeys = val.keys()
- for k in newkeys:
- if k in self:
- if self.strict:
- raise ValueError('slice assignment must be from '
- 'unique keys')
- else:
- # NOTE: This removes duplicate keys *first*
- # so start position might have changed?
- del self[k]
- self._sequence = (self._sequence[:pos] + newkeys +
- self._sequence[pos:])
- dict.update(self, val)
- else:
- # extended slice - length of new slice must be the same
- # as the one being replaced
- if len(keys) != len(val):
- raise ValueError('attempt to assign sequence of size %s '
- 'to extended slice of size %s' % (len(val), len(keys)))
- # FIXME: efficiency?
- del self[key]
- item_list = zip(indexes, val.items())
- # smallest indexes first - higher indexes not guaranteed to
- # exist
- item_list.sort()
- for pos, (newkey, newval) in item_list:
- if self.strict and newkey in self:
- raise ValueError('slice assignment must be from unique'
- ' keys')
- self.insert(pos, newkey, newval)
- else:
- if key not in self:
- self._sequence.append(key)
- dict.__setitem__(self, key, val)
-
- def __getitem__(self, key):
- """
- Allows slicing. Returns an OrderedDict if you slice.
- >>> b = OrderedDict([(7, 0), (6, 1), (5, 2), (4, 3), (3, 4), (2, 5), (1, 6)])
- >>> b[::-1]
- OrderedDict([(1, 6), (2, 5), (3, 4), (4, 3), (5, 2), (6, 1), (7, 0)])
- >>> b[2:5]
- OrderedDict([(5, 2), (4, 3), (3, 4)])
- >>> type(b[2:4])
-
- """
- if isinstance(key, slice):
- # FIXME: does this raise the error we want?
- keys = self._sequence[key]
- # FIXME: efficiency?
- return OrderedDict([(entry, self[entry]) for entry in keys])
- else:
- return dict.__getitem__(self, key)
-
- __str__ = __repr__
-
- def __setattr__(self, name, value):
- """
- Implemented so that accesses to ``sequence`` raise a warning and are
- diverted to the new ``setkeys`` method.
- """
- if name == 'sequence':
- warnings.warn('Use of the sequence attribute is deprecated.'
- ' Use the keys method instead.', DeprecationWarning)
- # NOTE: doesn't return anything
- self.setkeys(value)
- else:
- # FIXME: do we want to allow arbitrary setting of attributes?
- # Or do we want to manage it?
- object.__setattr__(self, name, value)
-
- def __getattr__(self, name):
- """
- Implemented so that access to ``sequence`` raises a warning.
-
- >>> d = OrderedDict()
- >>> d.sequence
- []
- """
- if name == 'sequence':
- warnings.warn('Use of the sequence attribute is deprecated.'
- ' Use the keys method instead.', DeprecationWarning)
- # NOTE: Still (currently) returns a direct reference. Need to
- # because code that uses sequence will expect to be able to
- # mutate it in place.
- return self._sequence
- else:
- # raise the appropriate error
- raise AttributeError("OrderedDict has no '%s' attribute" % name)
-
- def __deepcopy__(self, memo):
- """
- To allow deepcopy to work with OrderedDict.
-
- >>> from copy import deepcopy
- >>> a = OrderedDict([(1, 1), (2, 2), (3, 3)])
- >>> a['test'] = {}
- >>> b = deepcopy(a)
- >>> b == a
- True
- >>> b is a
- False
- >>> a['test'] is b['test']
- False
- """
- from copy import deepcopy
- return self.__class__(deepcopy(self.items(), memo), self.strict)
-
-### Read-only methods ###
-
- def copy(self):
- """
- >>> OrderedDict(((1, 3), (3, 2), (2, 1))).copy()
- OrderedDict([(1, 3), (3, 2), (2, 1)])
- """
- return OrderedDict(self)
-
- def items(self):
- """
- ``items`` returns a list of tuples representing all the
- ``(key, value)`` pairs in the dictionary.
-
- >>> d = OrderedDict(((1, 3), (3, 2), (2, 1)))
- >>> d.items()
- [(1, 3), (3, 2), (2, 1)]
- >>> d.clear()
- >>> d.items()
- []
- """
- return zip(self._sequence, self.values())
-
- def keys(self):
- """
- Return a list of keys in the ``OrderedDict``.
-
- >>> d = OrderedDict(((1, 3), (3, 2), (2, 1)))
- >>> d.keys()
- [1, 3, 2]
- """
- return self._sequence[:]
-
- def values(self, values=None):
- """
- Return a list of all the values in the OrderedDict.
-
- Optionally you can pass in a list of values, which will replace the
- current list. The value list must be the same len as the OrderedDict.
-
- >>> d = OrderedDict(((1, 3), (3, 2), (2, 1)))
- >>> d.values()
- [3, 2, 1]
- """
- return [self[key] for key in self._sequence]
-
- def iteritems(self):
- """
- >>> ii = OrderedDict(((1, 3), (3, 2), (2, 1))).iteritems()
- >>> ii.next()
- (1, 3)
- >>> ii.next()
- (3, 2)
- >>> ii.next()
- (2, 1)
- >>> ii.next()
- Traceback (most recent call last):
- StopIteration
- """
- def make_iter(self=self):
- keys = self.iterkeys()
- while True:
- key = keys.next()
- yield (key, self[key])
- return make_iter()
-
- def iterkeys(self):
- """
- >>> ii = OrderedDict(((1, 3), (3, 2), (2, 1))).iterkeys()
- >>> ii.next()
- 1
- >>> ii.next()
- 3
- >>> ii.next()
- 2
- >>> ii.next()
- Traceback (most recent call last):
- StopIteration
- """
- return iter(self._sequence)
-
- __iter__ = iterkeys
-
- def itervalues(self):
- """
- >>> iv = OrderedDict(((1, 3), (3, 2), (2, 1))).itervalues()
- >>> iv.next()
- 3
- >>> iv.next()
- 2
- >>> iv.next()
- 1
- >>> iv.next()
- Traceback (most recent call last):
- StopIteration
- """
- def make_iter(self=self):
- keys = self.iterkeys()
- while True:
- yield self[keys.next()]
- return make_iter()
-
-### Read-write methods ###
-
- def clear(self):
- """
- >>> d = OrderedDict(((1, 3), (3, 2), (2, 1)))
- >>> d.clear()
- >>> d
- OrderedDict([])
- """
- dict.clear(self)
- self._sequence = []
-
- def pop(self, key, *args):
- """
- No dict.pop in Python 2.2, gotta reimplement it
-
- >>> d = OrderedDict(((1, 3), (3, 2), (2, 1)))
- >>> d.pop(3)
- 2
- >>> d
- OrderedDict([(1, 3), (2, 1)])
- >>> d.pop(4)
- Traceback (most recent call last):
- KeyError: 4
- >>> d.pop(4, 0)
- 0
- >>> d.pop(4, 0, 1)
- Traceback (most recent call last):
- TypeError: pop expected at most 2 arguments, got 3
- """
- if len(args) > 1:
- raise TypeError('pop expected at most 2 arguments, got %s' %
- (len(args) + 1))
- if key in self:
- val = self[key]
- del self[key]
- else:
- try:
- val = args[0]
- except IndexError:
- raise KeyError(key)
- return val
-
- def popitem(self, i=-1):
- """
- Delete and return an item specified by index, not a random one as in
- dict. The index is -1 by default (the last item).
-
- >>> d = OrderedDict(((1, 3), (3, 2), (2, 1)))
- >>> d.popitem()
- (2, 1)
- >>> d
- OrderedDict([(1, 3), (3, 2)])
- >>> d.popitem(0)
- (1, 3)
- >>> OrderedDict().popitem()
- Traceback (most recent call last):
- KeyError: 'popitem(): dictionary is empty'
- >>> d.popitem(2)
- Traceback (most recent call last):
- IndexError: popitem(): index 2 not valid
- """
- if not self._sequence:
- raise KeyError('popitem(): dictionary is empty')
- try:
- key = self._sequence[i]
- except IndexError:
- raise IndexError('popitem(): index %s not valid' % i)
- return (key, self.pop(key))
-
- def setdefault(self, key, defval=None):
- """
- >>> d = OrderedDict(((1, 3), (3, 2), (2, 1)))
- >>> d.setdefault(1)
- 3
- >>> d.setdefault(4) is None
- True
- >>> d
- OrderedDict([(1, 3), (3, 2), (2, 1), (4, None)])
- >>> d.setdefault(5, 0)
- 0
- >>> d
- OrderedDict([(1, 3), (3, 2), (2, 1), (4, None), (5, 0)])
- """
- if key in self:
- return self[key]
- else:
- self[key] = defval
- return defval
-
- def update(self, from_od):
- """
- Update from another OrderedDict or sequence of (key, value) pairs
-
- >>> d = OrderedDict(((1, 0), (0, 1)))
- >>> d.update(OrderedDict(((1, 3), (3, 2), (2, 1))))
- >>> d
- OrderedDict([(1, 3), (0, 1), (3, 2), (2, 1)])
- >>> d.update({4: 4})
- Traceback (most recent call last):
- TypeError: undefined order, cannot get items from dict
- >>> d.update((4, 4))
- Traceback (most recent call last):
- TypeError: cannot convert dictionary update sequence element "4" to a 2-item sequence
- """
- if isinstance(from_od, OrderedDict):
- for key, val in from_od.items():
- self[key] = val
- elif isinstance(from_od, dict):
- # we lose compatibility with other ordered dict types this way
- raise TypeError('undefined order, cannot get items from dict')
- else:
- # FIXME: efficiency?
- # sequence of 2-item sequences, or error
- for item in from_od:
- try:
- key, val = item
- except TypeError:
- raise TypeError('cannot convert dictionary update'
- ' sequence element "%s" to a 2-item sequence' % item)
- self[key] = val
-
- def rename(self, old_key, new_key):
- """
- Rename the key for a given value, without modifying sequence order.
-
- For the case where new_key already exists this raise an exception,
- since if new_key exists, it is ambiguous as to what happens to the
- associated values, and the position of new_key in the sequence.
-
- >>> od = OrderedDict()
- >>> od['a'] = 1
- >>> od['b'] = 2
- >>> od.items()
- [('a', 1), ('b', 2)]
- >>> od.rename('b', 'c')
- >>> od.items()
- [('a', 1), ('c', 2)]
- >>> od.rename('c', 'a')
- Traceback (most recent call last):
- ValueError: New key already exists: 'a'
- >>> od.rename('d', 'b')
- Traceback (most recent call last):
- KeyError: 'd'
- """
- if new_key == old_key:
- # no-op
- return
- if new_key in self:
- raise ValueError("New key already exists: %r" % new_key)
- # rename sequence entry
- value = self[old_key]
- old_idx = self._sequence.index(old_key)
- self._sequence[old_idx] = new_key
- # rename internal dict entry
- dict.__delitem__(self, old_key)
- dict.__setitem__(self, new_key, value)
-
- def setitems(self, items):
- """
- This method allows you to set the items in the dict.
-
- It takes a list of tuples - of the same sort returned by the ``items``
- method.
-
- >>> d = OrderedDict()
- >>> d.setitems(((3, 1), (2, 3), (1, 2)))
- >>> d
- OrderedDict([(3, 1), (2, 3), (1, 2)])
- """
- self.clear()
- # FIXME: this allows you to pass in an OrderedDict as well :-)
- self.update(items)
-
- def setkeys(self, keys):
- """
- ``setkeys`` all ows you to pass in a new list of keys which will
- replace the current set. This must contain the same set of keys, but
- need not be in the same order.
-
- If you pass in new keys that don't match, a ``KeyError`` will be
- raised.
-
- >>> d = OrderedDict(((1, 3), (3, 2), (2, 1)))
- >>> d.keys()
- [1, 3, 2]
- >>> d.setkeys((1, 2, 3))
- >>> d
- OrderedDict([(1, 3), (2, 1), (3, 2)])
- >>> d.setkeys(['a', 'b', 'c'])
- Traceback (most recent call last):
- KeyError: 'Keylist is not the same as current keylist.'
- """
- # FIXME: Efficiency? (use set for Python 2.4 :-)
- # NOTE: list(keys) rather than keys[:] because keys[:] returns
- # a tuple, if keys is a tuple.
- kcopy = list(keys)
- kcopy.sort()
- self._sequence.sort()
- if kcopy != self._sequence:
- raise KeyError('Keylist is not the same as current keylist.')
- # NOTE: This makes the _sequence attribute a new object, instead
- # of changing it in place.
- # FIXME: efficiency?
- self._sequence = list(keys)
-
- def setvalues(self, values):
- """
- You can pass in a list of values, which will replace the
- current list. The value list must be the same len as the OrderedDict.
-
- (Or a ``ValueError`` is raised.)
-
- >>> d = OrderedDict(((1, 3), (3, 2), (2, 1)))
- >>> d.setvalues((1, 2, 3))
- >>> d
- OrderedDict([(1, 1), (3, 2), (2, 3)])
- >>> d.setvalues([6])
- Traceback (most recent call last):
- ValueError: Value list is not the same length as the OrderedDict.
- """
- if len(values) != len(self):
- # FIXME: correct error to raise?
- raise ValueError('Value list is not the same length as the '
- 'OrderedDict.')
- self.update(zip(self, values))
-
-### Sequence Methods ###
-
- def index(self, key):
- """
- Return the position of the specified key in the OrderedDict.
-
- >>> d = OrderedDict(((1, 3), (3, 2), (2, 1)))
- >>> d.index(3)
- 1
- >>> d.index(4)
- Traceback (most recent call last):
- ValueError: 4 is not in list
- """
- return self._sequence.index(key)
-
- def insert(self, index, key, value):
- """
- Takes ``index``, ``key``, and ``value`` as arguments.
-
- Sets ``key`` to ``value``, so that ``key`` is at position ``index`` in
- the OrderedDict.
-
- >>> d = OrderedDict(((1, 3), (3, 2), (2, 1)))
- >>> d.insert(0, 4, 0)
- >>> d
- OrderedDict([(4, 0), (1, 3), (3, 2), (2, 1)])
- >>> d.insert(0, 2, 1)
- >>> d
- OrderedDict([(2, 1), (4, 0), (1, 3), (3, 2)])
- >>> d.insert(8, 8, 1)
- >>> d
- OrderedDict([(2, 1), (4, 0), (1, 3), (3, 2), (8, 1)])
- """
- if key in self:
- # FIXME: efficiency?
- del self[key]
- self._sequence.insert(index, key)
- dict.__setitem__(self, key, value)
-
- def reverse(self):
- """
- Reverse the order of the OrderedDict.
-
- >>> d = OrderedDict(((1, 3), (3, 2), (2, 1)))
- >>> d.reverse()
- >>> d
- OrderedDict([(2, 1), (3, 2), (1, 3)])
- """
- self._sequence.reverse()
-
- def sort(self, *args, **kwargs):
- """
- Sort the key order in the OrderedDict.
-
- This method takes the same arguments as the ``list.sort`` method on
- your version of Python.
-
- >>> d = OrderedDict(((4, 1), (2, 2), (3, 3), (1, 4)))
- >>> d.sort()
- >>> d
- OrderedDict([(1, 4), (2, 2), (3, 3), (4, 1)])
- """
- self._sequence.sort(*args, **kwargs)
-
-
-if __name__ == '__main__':
- # turn off warnings for tests
- warnings.filterwarnings('ignore')
- # run the code tests in doctest format
- import doctest
- m = sys.modules.get('__main__')
- globs = m.__dict__.copy()
- globs.update({
- 'INTP_VER': INTP_VER,
- })
- doctest.testmod(m, globs=globs)
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/EditorConfig/editorconfig/versiontools.py b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/EditorConfig/editorconfig/versiontools.py
deleted file mode 100644
index 01744f8..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/EditorConfig/editorconfig/versiontools.py
+++ /dev/null
@@ -1,35 +0,0 @@
-"""EditorConfig version tools
-
-Provides ``join_version`` and ``split_version`` classes for converting
-__version__ strings to VERSION tuples and vice versa.
-
-"""
-
-import re
-
-
-__all__ = ['join_version', 'split_version']
-
-
-_version_re = re.compile(r'^(\d+)\.(\d+)\.(\d+)(\..*)?$', re.VERBOSE)
-
-
-def join_version(version_tuple):
- """Return a string representation of version from given VERSION tuple"""
- version = "%s.%s.%s" % version_tuple[:3]
- if version_tuple[3] != "final":
- version += "-%s" % version_tuple[3]
- return version
-
-
-def split_version(version):
- """Return VERSION tuple for given string representation of version"""
- match = _version_re.search(version)
- if not match:
- return None
- else:
- split_version = list(match.groups())
- if split_version[3] is None:
- split_version[3] = "final"
- split_version = list(map(int, split_version[:3])) + split_version[3:]
- return tuple(split_version)
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/EditorConfig/package-metadata.json b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/EditorConfig/package-metadata.json
deleted file mode 100644
index 63ea465..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/EditorConfig/package-metadata.json
+++ /dev/null
@@ -1 +0,0 @@
-{"url": "https://github.com/sindresorhus/editorconfig-sublime", "version": "2013.08.26.21.50.33", "description": "EditorConfig - helps developers define and maintain consistent coding styles between different editors and IDEs - Sublime plugin"}
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/EditorConfig/readme.md b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/EditorConfig/readme.md
deleted file mode 100644
index ac4aeee..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/EditorConfig/readme.md
+++ /dev/null
@@ -1,64 +0,0 @@
-# EditorConfig - Sublime Text plugin
-
-> [EditorConfig](http://editorconfig.org) helps developers define and maintain consistent coding styles between different editors and IDEs. The EditorConfig project consists of a file format for defining coding styles and a collection of text editor plugins that enable editors to read the file format and adhere to defined styles. EditorConfig files are easily readibly and they work nicely with version control systems.
-
-
-## Install
-
-Install `EditorConfig` with [Package Control](https://sublime.wbond.net) and restart Sublime.
-
-
-## Getting started
-
-See the [EditorConfig site][] for documentation.
-
-
-## Supported properties
-
-- root
-- indent_style
-- indent_size
-- end\_of\_line
-- charset
-- trim_trailing_whitespace
-- insert_final_newline
-
-Explanation of the properties can be found on the [EditorConfig site][].
-
-
-## Example file
-
-*My recommended default settings*
-
-```ini
-# editorconfig.org
-root = true
-
-[*]
-indent_style = tab
-end_of_line = lf
-charset = utf-8
-trim_trailing_whitespace = true
-insert_final_newline = true
-```
-
-
-## Tips
-
-### Trailing whitespace
-
-Even though there is a `trim_trailing_whitespace` property. I would still recommend you set `"draw_white_space": "all"` in your Sublime preferences to prevent you from accidentally committing whitespace garbage whenever a project is missing a .editorconfig file.
-
-
-### Show changes
-
-This plugin does its changes transparently in the background. I would recommend the excellent [Modific](https://github.com/gornostal/Modific) plugin if you would like to see what changed.
-
-
-## License
-
-MIT License • © [Sindre Sorhus](http://sindresorhus.com)
-
-
-
-[EditorConfig site]: http://editorconfig.org
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/.gitignore b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/.gitignore
deleted file mode 100644
index b591a13..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/.gitignore
+++ /dev/null
@@ -1,4 +0,0 @@
-*.pyc
-*.tmLanguage.cache
-.DS_Store
-package-metadata.json
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/CONTRIBUTORS b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/CONTRIBUTORS
deleted file mode 100644
index 90be6f7..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/CONTRIBUTORS
+++ /dev/null
@@ -1,28 +0,0 @@
-These are the people who helped make this plugin:
-
-David Lynch
-Sheldon Els
-Nick Fisher
-Can Yilmaz
-Stefan Buhrmester
-Rafal Chlodnicki
-Daniël de Kok
-David Baumgold
-Iuri de Silvio
-joshuacc
-misfo
-Kevin Smith
-Κώστας Καραχάλιος
-Dominique Wahli
-Fraser Graham
-Hamid Nazari
-Jeff Sandberg
-Joshua Clanton
-Maxim Sukharev
-Niklas Hambüchen
-Patrik Ring
-Scott Bowers
-Weslly Honorato
-brcooley
-jdc0589
-Adam Venturella
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/Default.sublime-commands b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/Default.sublime-commands
deleted file mode 100644
index 85f740c..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/Default.sublime-commands
+++ /dev/null
@@ -1,213 +0,0 @@
-[
- { "caption": "Git: Init",
- "command": "git_init"
- }
- ,{
- "caption": "Git: Blame",
- "command": "git_blame"
- }
- ,{
- "caption": "Git: New Tag",
- "command": "git_new_tag"
- }
- ,{
- "caption": "Git: Show Tags",
- "command": "git_show_tags"
- }
- ,{
- "caption": "Git: Push Tags",
- "command": "git_push_tags"
- }
- ,{
- "caption": "Git: Log Current File",
- "command": "git_log"
- }
- ,{
- "caption": "Git: Log All",
- "command": "git_log_all"
- }
- ,{
- "caption": "Git: Graph Current File",
- "command": "git_graph"
- }
- ,{
- "caption": "Git: Graph All",
- "command": "git_graph_all"
- }
- ,{
- "caption": "Git: Diff Current File",
- "command": "git_diff"
- }
- ,{
- "caption": "Git: Diff All",
- "command": "git_diff_all"
- }
- ,{
- "caption": "Git: Diff Staged",
- "command": "git_diff_commit"
- }
- ,{
- "caption": "Git: Diff Tool Current File",
- "command": "git_diff_tool"
- }
- ,{
- "caption": "Git: Diff Tool All",
- "command": "git_diff_tool_all"
- }
- ,{
- "caption": "Git: Commit",
- "command": "git_commit"
- }
- ,{
- "caption": "Git: Amend Commit",
- "command": "git_commit_amend"
- }
- ,{
- "caption": "Git: Quick Commit",
- "command": "git_quick_commit"
- }
- ,{
- "caption": "Git: Status",
- "command": "git_status"
- }
- ,{
- "caption": "Git: Open Modified Files",
- "command": "git_open_modified_files"
- }
- ,{
- "caption": "Git: New Branch",
- "command": "git_new_branch"
- }
- ,{
- "caption": "Git: Change Branch",
- "command": "git_branch"
- }
- ,{
- "caption": "Git: Merge Branch",
- "command": "git_merge"
- }
- ,{
- "caption": "Git: Delete Branch",
- "command": "git_delete_branch"
- }
- ,{
- "caption": "Git: Stash Changes",
- "command": "git_stash"
- }
- ,{
- "caption": "Git: Stash Pop",
- "command": "git_stash_pop"
- }
- ,{
- "caption": "Git: Stash Apply",
- "command": "git_stash_apply"
- }
- ,{
- "caption": "Git: Stash Drop",
- "command": "git_stash_drop"
- }
- ,{
- "caption": "Git: Add Current File",
- "command": "git_add"
- }
- ,{
- "caption": "Git: Add...",
- "command": "git_add_choice"
- }
- ,{
- "caption": "Git: Checkout Current File",
- "command": "git_checkout"
- }
- ,{
- "caption": "Git: Fetch",
- "command": "git_fetch"
- }
- ,{
- "caption": "Git: Pull",
- "command": "git_pull"
- }
- ,{
- "caption": "Git: Pull Current Branch",
- "command": "git_pull_current_branch"
- }
- ,{
- "caption": "Git: Push",
- "command": "git_push"
- }
- ,{
- "caption": "Git: Push Current Branch",
- "command": "git_push_current_branch"
- }
- ,{
- "caption": "Git: Show Current File",
- "command": "git_show"
- }
- ,{
- "caption": "Git: Toggle Annotations",
- "command": "git_toggle_annotations"
- }
- ,{
- "caption": "Git: Custom Command",
- "command": "git_custom"
- }
- ,{
- "caption": "Git Flow: Feature Start",
- "command": "git_flow_feature_start"
- }
- ,{
- "caption": "Git Flow: Feature Finish",
- "command": "git_flow_feature_finish"
- }
- ,{
- "caption": "Git Flow: Release Start",
- "command": "git_flow_release_start"
- }
- ,{
- "caption": "Git Flow: Release Finish",
- "command": "git_flow_release_finish"
- }
- ,{
- "caption": "Git Flow: Hotfix Start",
- "command": "git_flow_hotfix_start"
- }
- ,{
- "caption": "Git Flow: Hotfix Finish",
- "command": "git_flow_hotfix_finish"
- }
- ,{
- "caption": "Git: Open...",
- "command": "git_open_file"
- }
- ,{
- "caption": "Git: Reset (unstage) Current File",
- "command": "git_reset_head"
- }
- ,{
- "caption": "Git: Reset (unstage) All",
- "command": "git_reset_head_all"
- }
- ,{
- "caption": "Git: Reset (hard) HEAD",
- "command": "git_reset_hard_head"
- }
- ,{
- "caption": "Git: Add Selected Hunk",
- "command": "git_add_selected_hunk"
- }
- ,{
- "caption": "Git: Commit Selected Hunk",
- "command": "git_commit_selected_hunk"
- }
- ,{
- "caption": "Git: Gui",
- "command": "git_gui"
- }
- ,{
- "caption": "Git: Gitk",
- "command": "git_gitk"
- }
- ,{
- "caption": "Git: Commit history",
- "command": "git_commit_history"
- }
-]
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/Default.sublime-keymap b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/Default.sublime-keymap
deleted file mode 100644
index 92ee9df..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/Default.sublime-keymap
+++ /dev/null
@@ -1,6 +0,0 @@
-[
- {"keys": ["enter"], "command": "git_goto_diff",
- "context": [{"key": "selector", "operand": "markup.inserted.diff"}]},
- {"keys": ["enter"], "command": "git_goto_diff",
- "context": [{"key": "selector", "operand": "markup.deleted.diff"}]}
-]
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/Git Commit Message.sublime-settings b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/Git Commit Message.sublime-settings
deleted file mode 100644
index ba5b690..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/Git Commit Message.sublime-settings
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "rulers": [70]
-}
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/Git.sublime-settings b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/Git.sublime-settings
deleted file mode 100644
index b0aa30a..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/Git.sublime-settings
+++ /dev/null
@@ -1,42 +0,0 @@
-{
- // save before running commands
- "save_first": true
-
- // if present, use this command instead of plain "git"
- // e.g. "/Users/kemayo/bin/git" or "C:\bin\git.exe"
- ,"git_command": false
-
- // point this the installation location of git-flow
- ,"git_flow_command": "/usr/local/bin/git-flow"
-
- // use the panel for diff output, rather than a new scratch window (new tab)
- ,"diff_panel": false
-
- // affects blame command when no selection is made
- // true: blame whole file
- // false: blame only current line
- ,"blame_whole_file": true
-
- // If you'd rather have your status command open files instead of show you a
- // diff, set this to true. You can still do `Git: Status` followed by
- // 'Git: Diff Current File' to get a file diff
- ,"status_opens_file": false
-
- // Use --verbose flag for commit messages
- ,"verbose_commits": true
-
- // How many commit messages to store in the history. Set to 0 to disable.
- ,"history_size": 5
-
- // Show git flow commands
- ,"flow": false
-
- // Annotations default to being on for all files. Can be slow in some cases.
- ,"annotations": false
-
- // statusbar
- ,"statusbar_branch": true
- // Symbols for quick git status in status bar
- ,"statusbar_status": true
- ,"statusbar_status_symbols" : {"modified": "≠", "added": "+", "deleted": "×", "untracked": "?", "conflicts": "‼", "renamed":"R", "copied":"C", "clean": "√", "separator": " "}
-}
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/Main.sublime-menu b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/Main.sublime-menu
deleted file mode 100644
index ec4b358..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/Main.sublime-menu
+++ /dev/null
@@ -1,125 +0,0 @@
-[
- {
- "id": "tools",
- "children":
- [
- {
- "caption": "Git",
- "children":
- [
- {
- "caption": "This file",
- "children":
- [
- { "caption": "Log", "command": "git_log" }
- ,{ "caption": "Graph", "command": "git_graph" }
- ,{ "caption": "-" }
- ,{ "caption": "Diff", "command": "git_diff" }
- ,{ "caption": "DiffTool", "command": "git_diff_tool" }
- ,{ "caption": "-" }
- ,{ "caption": "Add", "command": "git_add" }
- ,{ "caption": "Add Selected Hunk", "command": "git_add_selected_hunk" }
- ,{ "caption": "-" }
- ,{ "caption": "Reset", "command": "git_reset_head" }
- ,{ "caption": "Checkout (Discard Changes)", "command": "git_checkout" }
- ,{ "caption": "-" }
- ,{ "caption": "Quick Commit Current File", "command": "git_quick_commit" }
- ,{ "caption": "Commit Selected Hunk", "command": "git_commit_selected_hunk" }
- ,{ "caption": "-" }
- ,{ "caption": "Blame", "command": "git_blame" }
- ,{ "caption": "-" }
- ,{ "caption": "Toggle Annotations", "command": "git_toggle_annotations" }
- ]
- }
- ,{
- "caption": "Whole repo",
- "children":
- [
- { "caption": "Log", "command": "git_log_all" }
- ,{ "caption": "Graph", "command": "git_graph_all" }
- ,{ "caption": "-" }
- ,{ "caption": "Diff", "command": "git_diff_all" }
- ,{ "caption": "Diff Staged", "command": "git_diff_commit" }
- ,{ "caption": "Diff Tool", "command": "git_diff_tool_all" }
- ,{ "caption": "Reset Hard", "command": "git_reset_hard_head" }
- ,{ "caption": "-" }
- ,{ "caption": "Add...", "command": "git_add_choice" }
- ,{ "caption": "-" }
- ,{ "caption": "Reset", "command": "git_reset_head_all" }
- ,{ "caption": "-" }
- ,{ "caption": "Commit", "command": "git_commit" }
- ,{ "caption": "Amend Last Commit", "command": "git_commit_amend" }
- ,{ "caption": "-" }
- ,{ "caption": "Open...", "command": "git_open_file" }
- ]
- }
- ,{
- "caption": "Stash",
- "children":
- [
- { "caption": "Save", "command": "git_stash" }
- ,{ "caption": "Pop", "command": "git_stash_pop" }
- ,{ "caption": "Apply", "command": "git_stash_apply" }
- ,{ "caption": "Drop", "command": "git_stash_drop" }
- ]
- }
- ,{ "caption": "-" }
- ,{
- "caption": "Flow",
- "children":
- [
- { "caption": "Feature Start", "command": "git_flow_feature_start"}
- ,{ "caption": "Feature Finish", "command": "git_flow_feature_finish"}
- ,{ "caption": "-"}
- ,{ "caption": "Release Start", "command": "git_flow_release_start"}
- ,{ "caption": "Release Finish", "command": "git_flow_release_finish"}
- ,{ "caption": "-"}
- ,{ "caption": "Hotfix Start", "command": "git_flow_hotfix_start"}
- ,{ "caption": "Hotfix Finish", "command": "git_flow_hotfix_finish"}
- ]
- }
- ,{ "caption": "-" }
- ,{ "caption": "Init", "command": "git_init"}
- ,{ "caption": "Status...", "command": "git_status" }
- ,{ "caption": "Branches...", "command": "git_branch" }
- ,{ "caption": "Merge...", "command": "git_merge" }
- ,{ "caption": "See commit history...", "command": "git_commit_history"}
- ]
- }
- ]
- }
-
- ,{
- "caption": "Preferences",
- "mnemonic": "n",
- "id": "preferences",
- "children":
- [
- {
- "caption": "Package Settings",
- "mnemonic": "P",
- "id": "package-settings",
- "children":
- [
- {
- "caption": "Git",
- "children":
- [
- {
- "command": "open_file",
- "args": {"file": "${packages}/Git/Git.sublime-settings"},
- "caption": "Settings – Default"
- },
- {
- "command": "open_file",
- "args": {"file": "${packages}/User/Git.sublime-settings"},
- "caption": "Settings – User"
- },
- { "caption": "-" }
- ]
- }
- ]
- }
- ]
- }
-]
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/README.markdown b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/README.markdown
deleted file mode 100644
index 908e756..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/README.markdown
+++ /dev/null
@@ -1,22 +0,0 @@
-# Sublime Text 2 plugin: git
-
-Git integration: it's pretty handy. Who knew, right?
-
-For more information about what's supported, and how to install this, [check the wiki](https://github.com/kemayo/sublime-text-2-git/wiki).
-
-## Install
-
-### Package Control
-
-The easiest way to install this is with [Package Control](http://wbond.net/sublime\_packages/package\_control).
-
- * If you just went and installed Package Control, you probably need to restart Sublime Text 2 before doing this next bit.
- * Bring up the Command Palette (Command+Shift+p on OS X, Control+Shift+p on Linux/Windows).
- * Select "Package Control: Install Package" (it'll take a few seconds)
- * Select Git when the list appears.
-
-Package Control will automatically keep Git up to date with the latest version.
-
-### The rest
-
-If you don't want to use Package Control, [check the wiki](https://github.com/kemayo/sublime-text-2-git/wiki) for other installation methods on various platforms.
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/add.py b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/add.py
deleted file mode 100644
index 6c0b3ad..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/add.py
+++ /dev/null
@@ -1,115 +0,0 @@
-import os
-import re
-
-import sublime
-from git import GitTextCommand, GitWindowCommand, git_root
-import status
-
-
-class GitAddChoiceCommand(status.GitStatusCommand):
- def status_filter(self, item):
- return super(GitAddChoiceCommand, self).status_filter(item) and not item[1].isspace()
-
- def show_status_list(self):
- self.results = [[" + All Files", "apart from untracked files"], [" + All Files", "including untracked files"]] + self.results
- return super(GitAddChoiceCommand, self).show_status_list()
-
- def panel_followup(self, picked_status, picked_file, picked_index):
- working_dir = git_root(self.get_working_dir())
-
- if picked_index == 0:
- command = ['git', 'add', '--update']
- elif picked_index == 1:
- command = ['git', 'add', '--all']
- else:
- command = ['git']
- picked_file = picked_file.strip('"')
- if os.path.isfile(working_dir + "/" + picked_file):
- command += ['add']
- else:
- command += ['rm']
- command += ['--', picked_file]
-
- self.run_command(command, self.rerun,
- working_dir=working_dir)
-
- def rerun(self, result):
- self.run()
-
-
-class GitAdd(GitTextCommand):
- def run(self, edit):
- self.run_command(['git', 'add', self.get_file_name()])
-
-
-class GitAddSelectedHunkCommand(GitTextCommand):
- def run(self, edit):
- self.run_command(['git', 'diff', '--no-color', '-U1', self.get_file_name()], self.cull_diff)
-
- def cull_diff(self, result):
- selection = []
- for sel in self.view.sel():
- selection.append({
- "start": self.view.rowcol(sel.begin())[0] + 1,
- "end": self.view.rowcol(sel.end())[0] + 1,
- })
-
- hunks = [{"diff":""}]
- i = 0
- matcher = re.compile('^@@ -([0-9]*)(?:,([0-9]*))? \+([0-9]*)(?:,([0-9]*))? @@')
- for line in result.splitlines():
- if line.startswith('@@'):
- i += 1
- match = matcher.match(line)
- start = int(match.group(3))
- end = match.group(4)
- if end:
- end = start + int(end)
- else:
- end = start
- hunks.append({"diff": "", "start": start, "end": end})
- hunks[i]["diff"] += line + "\n"
-
- diffs = hunks[0]["diff"]
- hunks.pop(0)
- selection_is_hunky = False
- for hunk in hunks:
- for sel in selection:
- if sel["end"] < hunk["start"]:
- continue
- if sel["start"] > hunk["end"]:
- continue
- diffs += hunk["diff"] # + "\n\nEND OF HUNK\n\n"
- selection_is_hunky = True
-
- if selection_is_hunky:
- self.run_command(['git', 'apply', '--cached'], stdin=diffs)
- else:
- sublime.status_message("No selected hunk")
-
-
-# Also, sometimes we want to undo adds
-
-
-class GitResetHead(object):
- def run(self, edit=None):
- self.run_command(['git', 'reset', 'HEAD', self.get_file_name()])
-
- def generic_done(self, result):
- pass
-
-
-class GitResetHeadCommand(GitResetHead, GitTextCommand):
- pass
-
-
-class GitResetHeadAllCommand(GitResetHead, GitWindowCommand):
- pass
-
-
-class GitResetHardHeadCommand(GitWindowCommand):
- may_change_files = True
-
- def run(self):
- if sublime.ok_cancel_dialog("Warning: this will reset your index and revert all files, throwing away all your uncommitted changes with no way to recover. Consider stashing your changes instead if you'd like to set them aside safely.", "Continue"):
- self.run_command(['git', 'reset', '--hard', 'HEAD'])
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/annotate.py b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/annotate.py
deleted file mode 100644
index 8466745..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/annotate.py
+++ /dev/null
@@ -1,130 +0,0 @@
-import tempfile
-import re
-import os
-
-import sublime
-import sublime_plugin
-from git import git_root, GitTextCommand
-
-
-class GitClearAnnotationCommand(GitTextCommand):
- def run(self, view):
- self.active_view().settings().set('live_git_annotations', False)
- self.view.erase_regions('git.changes.x')
- self.view.erase_regions('git.changes.+')
- self.view.erase_regions('git.changes.-')
-
-
-class GitToggleAnnotationsCommand(GitTextCommand):
- def run(self, view):
- if self.active_view().settings().get('live_git_annotations'):
- self.view.run_command('git_clear_annotation')
- else:
- self.view.run_command('git_annotate')
-
-
-class GitAnnotationListener(sublime_plugin.EventListener):
- def on_modified(self, view):
- if not view.settings().get('live_git_annotations'):
- return
- view.run_command('git_annotate')
-
- def on_load(self, view):
- s = sublime.load_settings("Git.sublime-settings")
- if s.get('annotations'):
- view.run_command('git_annotate')
-
-
-class GitAnnotateCommand(GitTextCommand):
- # Unfortunately, git diff does not support text from stdin, making a *live*
- # annotation difficult. Therefore I had to resort to the system diff
- # command.
- # This works as follows:
- # 1. When the command is run for the first time for this file, a temporary
- # file with the current state of the HEAD is being pulled from git.
- # 2. All consecutive runs will pass the current buffer into diffs stdin.
- # The resulting output is then parsed and regions are set accordingly.
- def run(self, view):
- # If the annotations are already running, we dont have to create a new
- # tmpfile
- if hasattr(self, "tmp"):
- self.compare_tmp(None)
- return
- self.tmp = tempfile.NamedTemporaryFile()
- self.active_view().settings().set('live_git_annotations', True)
- root = git_root(self.get_working_dir())
- repo_file = os.path.relpath(self.view.file_name(), root)
- self.run_command(['git', 'show', 'HEAD:{0}'.format(repo_file)], show_status=False, no_save=True, callback=self.compare_tmp, stdout=self.tmp)
-
- def compare_tmp(self, result, stdout=None):
- all_text = self.view.substr(sublime.Region(0, self.view.size())).encode("utf-8")
- self.run_command(['diff', '-u', self.tmp.name, '-'], stdin=all_text, no_save=True, show_status=False, callback=self.parse_diff)
-
- # This is where the magic happens. At the moment, only one chunk format is supported. While
- # the unified diff format theoritaclly supports more, I don't think git diff creates them.
- def parse_diff(self, result, stdin=None):
- lines = result.splitlines()
- matcher = re.compile('^@@ -([0-9]*),([0-9]*) \+([0-9]*),([0-9]*) @@')
- diff = []
- for line_index in range(0, len(lines)):
- line = lines[line_index]
- if not line.startswith('@'):
- continue
- match = matcher.match(line)
- if not match:
- continue
- line_before, len_before, line_after, len_after = [int(match.group(x)) for x in [1, 2, 3, 4]]
- chunk_index = line_index + 1
- tracked_line_index = line_after - 1
- deletion = False
- insertion = False
- while True:
- line = lines[chunk_index]
- if line.startswith('@'):
- break
- elif line.startswith('-'):
- if not line.strip() == '-':
- deletion = True
- tracked_line_index -= 1
- elif line.startswith('+'):
- if deletion and not line.strip() == '+':
- diff.append(['x', tracked_line_index])
- insertion = True
- elif not deletion:
- insertion = True
- diff.append(['+', tracked_line_index])
- else:
- if not insertion and deletion:
- diff.append(['-', tracked_line_index])
- insertion = deletion = False
- tracked_line_index += 1
- chunk_index += 1
- if chunk_index >= len(lines):
- break
-
- self.annotate(diff)
-
- # Once we got all lines with their specific change types (either x, +, or - for
- # modified, added, or removed) we can create our regions and do the actual annotation.
- def annotate(self, diff):
- self.view.erase_regions('git.changes.x')
- self.view.erase_regions('git.changes.+')
- self.view.erase_regions('git.changes.-')
- typed_diff = {'x': [], '+': [], '-': []}
- for change_type, line in diff:
- if change_type == '-':
- full_region = self.view.full_line(self.view.text_point(line - 1, 0))
- position = full_region.begin()
- for i in xrange(full_region.size()):
- typed_diff[change_type].append(sublime.Region(position + i))
- else:
- point = self.view.text_point(line, 0)
- region = self.view.full_line(point)
- if change_type == '-':
- region = sublime.Region(point, point + 5)
- typed_diff[change_type].append(region)
-
- for change in ['x', '+']:
- self.view.add_regions("git.changes.{0}".format(change), typed_diff[change], 'git.changes.{0}'.format(change), 'dot', sublime.HIDDEN)
-
- self.view.add_regions("git.changes.-", typed_diff['-'], 'git.changes.-', 'dot', sublime.DRAW_EMPTY_AS_OVERWRITE)
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/commit.py b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/commit.py
deleted file mode 100644
index 972e97c..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/commit.py
+++ /dev/null
@@ -1,169 +0,0 @@
-import functools
-import tempfile
-import os
-
-import sublime
-import sublime_plugin
-from git import GitTextCommand, GitWindowCommand, plugin_file, view_contents, _make_text_safeish
-import add
-
-history = []
-
-
-class GitQuickCommitCommand(GitTextCommand):
- def run(self, edit):
- self.get_window().show_input_panel("Message", "",
- self.on_input, None, None)
-
- def on_input(self, message):
- if message.strip() == "":
- self.panel("No commit message provided")
- return
- self.run_command(['git', 'add', self.get_file_name()],
- functools.partial(self.add_done, message))
-
- def add_done(self, message, result):
- if result.strip():
- sublime.error_message("Error adding file:\n" + result)
- return
- self.run_command(['git', 'commit', '-m', message])
-
-
-# Commit is complicated. It'd be easy if I just wanted to let it run
-# on OSX, and assume that subl was in the $PATH. However... I can't do
-# that. Second choice was to set $GIT_EDITOR to sublime text for the call
-# to commit, and let that Just Work. However, on Windows you can't pass
-# -w to sublime, which means the editor won't wait, and so the commit will fail
-# with an empty message.
-# Thus this flow:
-# 1. `status --porcelain --untracked-files=no` to know whether files need
-# to be committed
-# 2. `status` to get a template commit message (not the exact one git uses; I
-# can't see a way to ask it to output that, which is not quite ideal)
-# 3. Create a scratch buffer containing the template
-# 4. When this buffer is closed, get its contents with an event handler and
-# pass execution back to the original command. (I feel that the way this
-# is done is a total hack. Unfortunately, I cannot see a better way right
-# now.)
-# 5. Strip lines beginning with # from the message, and save in a temporary
-# file
-# 6. `commit -F [tempfile]`
-class GitCommitCommand(GitWindowCommand):
- active_message = False
- extra_options = ""
-
- def run(self):
- self.lines = []
- self.working_dir = self.get_working_dir()
- self.run_command(
- ['git', 'status', '--untracked-files=no', '--porcelain'],
- self.porcelain_status_done
- )
-
- def porcelain_status_done(self, result):
- # todo: split out these status-parsing things... asdf
- has_staged_files = False
- result_lines = result.rstrip().split('\n')
- for line in result_lines:
- if line and not line[0].isspace():
- has_staged_files = True
- break
- if not has_staged_files:
- self.panel("Nothing to commit")
- return
- # Okay, get the template!
- s = sublime.load_settings("Git.sublime-settings")
- if s.get("verbose_commits"):
- self.run_command(['git', 'diff', '--staged', '--no-color'], self.diff_done)
- else:
- self.run_command(['git', 'status'], self.diff_done)
-
- def diff_done(self, result):
- settings = sublime.load_settings("Git.sublime-settings")
- historySize = settings.get('history_size')
-
- def format(line):
- return '# ' + line.replace("\n", " ")
-
- if not len(self.lines):
- self.lines = ["", ""]
-
- self.lines.extend(map(format, history[:historySize]))
- self.lines.extend([
- "# --------------",
- "# Please enter the commit message for your changes. Everything below",
- "# this paragraph is ignored, and an empty message aborts the commit.",
- "# Just close the window to accept your message.",
- result.strip()
- ])
- template = "\n".join(self.lines)
- msg = self.window.new_file()
- msg.set_scratch(True)
- msg.set_name("COMMIT_EDITMSG")
- self._output_to_view(msg, template, syntax=plugin_file("syntax/Git Commit Message.tmLanguage"))
- msg.sel().clear()
- msg.sel().add(sublime.Region(0, 0))
- GitCommitCommand.active_message = self
-
- def message_done(self, message):
- # filter out the comments (git commit doesn't do this automatically)
- settings = sublime.load_settings("Git.sublime-settings")
- historySize = settings.get('history_size')
- lines = [line for line in message.split("\n# --------------")[0].split("\n")
- if not line.lstrip().startswith('#')]
- message = '\n'.join(lines).strip()
-
- if len(message) and historySize:
- history.insert(0, message)
- # write the temp file
- message_file = tempfile.NamedTemporaryFile(delete=False)
- message_file.write(_make_text_safeish(message, self.fallback_encoding, 'encode'))
- message_file.close()
- self.message_file = message_file
- # and actually commit
- with open(message_file.name, 'r') as fp:
- self.run_command(['git', 'commit', '-F', '-', self.extra_options],
- self.commit_done, working_dir=self.working_dir, stdin=fp.read())
-
- def commit_done(self, result, **kwargs):
- os.remove(self.message_file.name)
- self.panel(result)
-
-
-class GitCommitAmendCommand(GitCommitCommand):
- extra_options = "--amend"
-
- def diff_done(self, result):
- self.after_show = result
- self.run_command(['git', 'log', '-n', '1', '--format=format:%B'], self.amend_diff_done)
-
- def amend_diff_done(self, result):
- self.lines = result.split("\n")
- super(GitCommitAmendCommand, self).diff_done(self.after_show)
-
-
-class GitCommitMessageListener(sublime_plugin.EventListener):
- def on_close(self, view):
- if view.name() != "COMMIT_EDITMSG":
- return
- command = GitCommitCommand.active_message
- if not command:
- return
- message = view_contents(view)
- command.message_done(message)
-
-
-class GitCommitHistoryCommand(sublime_plugin.TextCommand):
- def run(self, edit):
- self.edit = edit
- self.view.window().show_quick_panel(history, self.panel_done, sublime.MONOSPACE_FONT)
-
- def panel_done(self, index):
- if index > -1:
- self.view.replace(self.edit, self.view.sel()[0], history[index] + '\n')
-
-
-class GitCommitSelectedHunk(add.GitAddSelectedHunkCommand):
- def run(self, edit):
- self.run_command(['git', 'diff', '--no-color', self.get_file_name()], self.cull_diff)
- self.get_window().run_command('git_commit')
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/diff.py b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/diff.py
deleted file mode 100644
index f686cec..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/diff.py
+++ /dev/null
@@ -1,157 +0,0 @@
-import sublime
-import re
-from git import git_root, GitTextCommand, GitWindowCommand
-import functools
-
-
-def do_when(conditional, callback, *args, **kwargs):
- if conditional():
- return callback(*args, **kwargs)
- sublime.set_timeout(functools.partial(do_when, conditional, callback, *args, **kwargs), 50)
-
-
-def goto_xy(view, line, col):
- view.run_command("goto_line", {"line": line})
- for i in range(col):
- view.run_command("move", {"by": "characters", "forward": True})
-
-
-class GitDiff (object):
- def run(self, edit=None):
- self.run_command(['git', 'diff', '--no-color', '--', self.get_file_name()],
- self.diff_done)
-
- def diff_done(self, result):
- if not result.strip():
- self.panel("No output")
- return
- s = sublime.load_settings("Git.sublime-settings")
- if s.get('diff_panel'):
- view = self.panel(result)
- else:
- view = self.scratch(result, title="Git Diff")
-
- lines_inserted = view.find_all(r'^\+[^+]{2} ')
- lines_deleted = view.find_all(r'^-[^-]{2} ')
-
- view.add_regions("inserted", lines_inserted, "markup.inserted.diff", "dot", sublime.HIDDEN)
- view.add_regions("deleted", lines_deleted, "markup.deleted.diff", "dot", sublime.HIDDEN)
-
- # Store the git root directory in the view so we can resolve relative paths
- # when the user wants to navigate to the source file.
- view.settings().set("git_root_dir", git_root(self.get_working_dir()))
-
-
-class GitDiffCommit (object):
- def run(self, edit=None):
- self.run_command(['git', 'diff', '--cached', '--no-color'],
- self.diff_done)
-
- def diff_done(self, result):
- if not result.strip():
- self.panel("No output")
- return
- self.scratch(result, title="Git Diff")
-
-
-class GitDiffCommand(GitDiff, GitTextCommand):
- pass
-
-
-class GitDiffAllCommand(GitDiff, GitWindowCommand):
- pass
-
-
-class GitDiffCommitCommand(GitDiffCommit, GitWindowCommand):
- pass
-
-
-class GitDiffTool(object):
- def run(self, edit=None):
- self.run_command(['git', 'difftool', '--', self.get_file_name()])
-
-
-class GitDiffToolCommand(GitDiffTool, GitTextCommand):
- pass
-
-
-class GitDiffToolAll(GitWindowCommand):
- def run(self):
- self.run_command(['git', 'difftool'])
-
-
-class GitGotoDiff(sublime_plugin.TextCommand):
- def run(self, edit):
- v = self.view
- view_scope_name = v.scope_name(v.sel()[0].a)
- scope_markup_inserted = ("markup.inserted.diff" in view_scope_name)
- scope_markup_deleted = ("markup.deleted.diff" in view_scope_name)
-
- if not scope_markup_inserted and not scope_markup_deleted:
- return
-
- beg = v.sel()[0].a # Current position in selection
- pt = v.line(beg).a # First position in the current diff line
- self.column = beg - pt - 1 # The current column (-1 because the first char in diff file)
-
- self.file_name = None
- hunk_line = None
- line_offset = 0
-
- while pt > 0:
- line = v.line(pt)
- lineContent = v.substr(line)
- if lineContent.startswith("@@"):
- if not hunk_line:
- hunk_line = lineContent
- elif lineContent.startswith("+++ b/"):
- self.file_name = v.substr(sublime.Region(line.a+6, line.b)).strip()
- break
- elif not hunk_line and not lineContent.startswith("-"):
- line_offset = line_offset+1
-
- pt = v.line(pt-1).a
-
- hunk = re.match(r"^@@ -(\d+),(\d+) \+(\d+),(\d+) @@.*", hunk_line)
- if not hunk:
- sublime.status_message("No hunk info")
- return
-
- hunk_start_line = hunk.group(3)
- self.goto_line = int(hunk_start_line) + line_offset - 1
-
- git_root_dir = v.settings().get("git_root_dir")
-
- # Sanity check and see if the file we're going to try to open even
- # exists. If it does not, prompt the user for the correct base directory
- # to use for their diff.
- full_path_file_name = self.file_name
- if git_root_dir:
- full_path_file_name = os.path.join(git_root_dir, self.file_name)
- else:
- git_root_dir = ""
-
- if not os.path.isfile(full_path_file_name):
- caption = "Enter base directory for file '%s':" % self.file_name
- v.window().show_input_panel(caption,
- git_root_dir,
- self.on_path_confirmed,
- None,
- None)
- else:
- self.on_path_confirmed(git_root_dir)
-
- def on_path_confirmed(self, git_root_dir):
- v = self.view
- old_git_root_dir = v.settings().get("git_root_dir")
-
- # If the user provided a new git_root_dir, save it in the view settings
- # so they only have to fix it once
- if old_git_root_dir != git_root_dir:
- v.settings().set("git_root_dir", git_root_dir)
-
- full_path_file_name = os.path.join(git_root_dir, self.file_name)
-
- new_view = v.window().open_file(full_path_file_name)
- do_when(lambda: not new_view.is_loading(),
- lambda: goto_xy(new_view, self.goto_line, self.column))
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/flow.py b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/flow.py
deleted file mode 100644
index b6ba9d3..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/flow.py
+++ /dev/null
@@ -1,90 +0,0 @@
-import sublime
-from git import GitWindowCommand
-
-
-class GitFlowCommand(GitWindowCommand):
- def is_visible(self):
- s = sublime.load_settings("Git.sublime-settings")
- if s.get('flow'):
- return True
-
-
-class GitFlowFeatureStartCommand(GitFlowCommand):
- def run(self):
- self.get_window().show_input_panel('Enter Feature Name:', '', self.on_done, None, None)
-
- def on_done(self, feature_name):
- self.run_command(['git-flow', 'feature', 'start', feature_name])
-
-
-class GitFlowFeatureFinishCommand(GitFlowCommand):
- def run(self):
- self.run_command(['git-flow', 'feature'], self.feature_done)
-
- def feature_done(self, result):
- self.results = result.rstrip().split('\n')
- self.quick_panel(self.results, self.panel_done,
- sublime.MONOSPACE_FONT)
-
- def panel_done(self, picked):
- if 0 > picked < len(self.results):
- return
- picked_feature = self.results[picked]
- if picked_feature.startswith("*"):
- picked_feature = picked_feature.strip("*")
- picked_feature = picked_feature.strip()
- self.run_command(['git-flow', 'feature', 'finish', picked_feature])
-
-
-class GitFlowReleaseStartCommand(GitFlowCommand):
- def run(self):
- self.get_window().show_input_panel('Enter Version Number:', '', self.on_done, None, None)
-
- def on_done(self, release_name):
- self.run_command(['git-flow', 'release', 'start', release_name])
-
-
-class GitFlowReleaseFinishCommand(GitFlowCommand):
- def run(self):
- self.run_command(['git-flow', 'release'], self.release_done)
-
- def release_done(self, result):
- self.results = result.rstrip().split('\n')
- self.quick_panel(self.results, self.panel_done,
- sublime.MONOSPACE_FONT)
-
- def panel_done(self, picked):
- if 0 > picked < len(self.results):
- return
- picked_release = self.results[picked]
- if picked_release.startswith("*"):
- picked_release = picked_release.strip("*")
- picked_release = picked_release.strip()
- self.run_command(['git-flow', 'release', 'finish', picked_release])
-
-
-class GitFlowHotfixStartCommand(GitFlowCommand):
- def run(self):
- self.get_window().show_input_panel('Enter hotfix name:', '', self.on_done, None, None)
-
- def on_done(self, hotfix_name):
- self.run_command(['git-flow', 'hotfix', 'start', hotfix_name])
-
-
-class GitFlowHotfixFinishCommand(GitFlowCommand):
- def run(self):
- self.run_command(['git-flow', 'hotfix'], self.hotfix_done)
-
- def hotfix_done(self, result):
- self.results = result.rstrip().split('\n')
- self.quick_panel(self.results, self.panel_done,
- sublime.MONOSPACE_FONT)
-
- def panel_done(self, picked):
- if 0 > picked < len(self.results):
- return
- picked_hotfix = self.results[picked]
- if picked_hotfix.startswith("*"):
- picked_hotfix = picked_hotfix.strip("*")
- picked_hotfix = picked_hotfix.strip()
- self.run_command(['git-flow', 'hotfix', 'finish', picked_hotfix])
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/git.py b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/git.py
deleted file mode 100644
index e4a7f5e..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/git.py
+++ /dev/null
@@ -1,333 +0,0 @@
-import os
-import sublime
-import sublime_plugin
-import threading
-import subprocess
-import functools
-import os.path
-import time
-
-# when sublime loads a plugin it's cd'd into the plugin directory. Thus
-# __file__ is useless for my purposes. What I want is "Packages/Git", but
-# allowing for the possibility that someone has renamed the file.
-# Fun discovery: Sublime on windows still requires posix path separators.
-PLUGIN_DIRECTORY = os.getcwd().replace(os.path.normpath(os.path.join(os.getcwd(), '..', '..')) + os.path.sep, '').replace(os.path.sep, '/')
-
-git_root_cache = {}
-
-
-def main_thread(callback, *args, **kwargs):
- # sublime.set_timeout gets used to send things onto the main thread
- # most sublime.[something] calls need to be on the main thread
- sublime.set_timeout(functools.partial(callback, *args, **kwargs), 0)
-
-
-def open_url(url):
- sublime.active_window().run_command('open_url', {"url": url})
-
-
-def git_root(directory):
- global git_root_cache
-
- retval = False
- leaf_dir = directory
-
- if leaf_dir in git_root_cache and git_root_cache[leaf_dir]['expires'] > time.time():
- return git_root_cache[leaf_dir]['retval']
-
- while directory:
- if os.path.exists(os.path.join(directory, '.git')):
- retval = directory
- break
- parent = os.path.realpath(os.path.join(directory, os.path.pardir))
- if parent == directory:
- # /.. == /
- retval = False
- break
- directory = parent
-
- git_root_cache[leaf_dir] = {
- 'retval': retval,
- 'expires': time.time() + 5
- }
-
- return retval
-
-
-# for readability code
-def git_root_exist(directory):
- return git_root(directory)
-
-
-def view_contents(view):
- region = sublime.Region(0, view.size())
- return view.substr(region)
-
-
-def plugin_file(name):
- return os.path.join(PLUGIN_DIRECTORY, name)
-
-
-def do_when(conditional, callback, *args, **kwargs):
- if conditional():
- return callback(*args, **kwargs)
- sublime.set_timeout(functools.partial(do_when, conditional, callback, *args, **kwargs), 50)
-
-
-def _make_text_safeish(text, fallback_encoding, method='decode'):
- # The unicode decode here is because sublime converts to unicode inside
- # insert in such a way that unknown characters will cause errors, which is
- # distinctly non-ideal... and there's no way to tell what's coming out of
- # git in output. So...
- try:
- unitext = getattr(text, method)('utf-8')
- except (UnicodeEncodeError, UnicodeDecodeError):
- unitext = getattr(text, method)(fallback_encoding)
- return unitext
-
-
-class CommandThread(threading.Thread):
- def __init__(self, command, on_done, working_dir="", fallback_encoding="", **kwargs):
- threading.Thread.__init__(self)
- self.command = command
- self.on_done = on_done
- self.working_dir = working_dir
- if "stdin" in kwargs:
- self.stdin = kwargs["stdin"]
- else:
- self.stdin = None
- if "stdout" in kwargs:
- self.stdout = kwargs["stdout"]
- else:
- self.stdout = subprocess.PIPE
- self.fallback_encoding = fallback_encoding
- self.kwargs = kwargs
-
- def run(self):
- try:
-
- # Ignore directories that no longer exist
- if os.path.isdir(self.working_dir):
-
- # Per http://bugs.python.org/issue8557 shell=True is required to
- # get $PATH on Windows. Yay portable code.
- shell = os.name == 'nt'
- if self.working_dir != "":
- os.chdir(self.working_dir)
-
- proc = subprocess.Popen(self.command,
- stdout=self.stdout, stderr=subprocess.STDOUT,
- stdin=subprocess.PIPE,
- shell=shell, universal_newlines=True)
- output = proc.communicate(self.stdin)[0]
- if not output:
- output = ''
- # if sublime's python gets bumped to 2.7 we can just do:
- # output = subprocess.check_output(self.command)
- main_thread(self.on_done,
- _make_text_safeish(output, self.fallback_encoding), **self.kwargs)
-
- except subprocess.CalledProcessError, e:
- main_thread(self.on_done, e.returncode)
- except OSError, e:
- if e.errno == 2:
- main_thread(sublime.error_message, "Git binary could not be found in PATH\n\nConsider using the git_command setting for the Git plugin\n\nPATH is: %s" % os.environ['PATH'])
- else:
- raise e
-
-
-# A base for all commands
-class GitCommand(object):
- may_change_files = False
-
- def run_command(self, command, callback=None, show_status=True,
- filter_empty_args=True, no_save=False, **kwargs):
- if filter_empty_args:
- command = [arg for arg in command if arg]
- if 'working_dir' not in kwargs:
- kwargs['working_dir'] = self.get_working_dir()
- if 'fallback_encoding' not in kwargs and self.active_view() and self.active_view().settings().get('fallback_encoding'):
- kwargs['fallback_encoding'] = self.active_view().settings().get('fallback_encoding').rpartition('(')[2].rpartition(')')[0]
-
- s = sublime.load_settings("Git.sublime-settings")
- if s.get('save_first') and self.active_view() and self.active_view().is_dirty() and not no_save:
- self.active_view().run_command('save')
- if command[0] == 'git' and s.get('git_command'):
- command[0] = s.get('git_command')
- if command[0] == 'git-flow' and s.get('git_flow_command'):
- command[0] = s.get('git_flow_command')
- if not callback:
- callback = self.generic_done
-
- thread = CommandThread(command, callback, **kwargs)
- thread.start()
-
- if show_status:
- message = kwargs.get('status_message', False) or ' '.join(command)
- sublime.status_message(message)
-
- def generic_done(self, result):
- if self.may_change_files and self.active_view() and self.active_view().file_name():
- if self.active_view().is_dirty():
- result = "WARNING: Current view is dirty.\n\n"
- else:
- # just asking the current file to be re-opened doesn't do anything
- print "reverting"
- position = self.active_view().viewport_position()
- self.active_view().run_command('revert')
- do_when(lambda: not self.active_view().is_loading(), lambda: self.active_view().set_viewport_position(position, False))
- # self.active_view().show(position)
-
- view = self.active_view()
- if view and view.settings().get('live_git_annotations'):
- self.view.run_command('git_annotate')
-
- if not result.strip():
- return
- self.panel(result)
-
- def _output_to_view(self, output_file, output, clear=False,
- syntax="Packages/Diff/Diff.tmLanguage", **kwargs):
- output_file.set_syntax_file(syntax)
- edit = output_file.begin_edit()
- if clear:
- region = sublime.Region(0, self.output_view.size())
- output_file.erase(edit, region)
- output_file.insert(edit, 0, output)
- output_file.end_edit(edit)
-
- def scratch(self, output, title=False, position=None, **kwargs):
- scratch_file = self.get_window().new_file()
- if title:
- scratch_file.set_name(title)
- scratch_file.set_scratch(True)
- self._output_to_view(scratch_file, output, **kwargs)
- scratch_file.set_read_only(True)
- if position:
- sublime.set_timeout(lambda: scratch_file.set_viewport_position(position), 0)
- return scratch_file
-
- def panel(self, output, **kwargs):
- if not hasattr(self, 'output_view'):
- self.output_view = self.get_window().get_output_panel("git")
- self.output_view.set_read_only(False)
- self._output_to_view(self.output_view, output, clear=True, **kwargs)
- self.output_view.set_read_only(True)
- self.get_window().run_command("show_panel", {"panel": "output.git"})
-
- def quick_panel(self, *args, **kwargs):
- self.get_window().show_quick_panel(*args, **kwargs)
-
-
-# A base for all git commands that work with the entire repository
-class GitWindowCommand(GitCommand, sublime_plugin.WindowCommand):
- def active_view(self):
- return self.window.active_view()
-
- def _active_file_name(self):
- view = self.active_view()
- if view and view.file_name() and len(view.file_name()) > 0:
- return view.file_name()
-
- @property
- def fallback_encoding(self):
- if self.active_view() and self.active_view().settings().get('fallback_encoding'):
- return self.active_view().settings().get('fallback_encoding').rpartition('(')[2].rpartition(')')[0]
-
- # If there's no active view or the active view is not a file on the
- # filesystem (e.g. a search results view), we can infer the folder
- # that the user intends Git commands to run against when there's only
- # only one.
- def is_enabled(self):
- if self._active_file_name() or len(self.window.folders()) == 1:
- return git_root(self.get_working_dir())
-
- def get_file_name(self):
- return ''
-
- def get_relative_file_name(self):
- return ''
-
- # If there is a file in the active view use that file's directory to
- # search for the Git root. Otherwise, use the only folder that is
- # open.
- def get_working_dir(self):
- file_name = self._active_file_name()
- if file_name:
- return os.path.realpath(os.path.dirname(file_name))
- else:
- try: # handle case with no open folder
- return self.window.folders()[0]
- except IndexError:
- return ''
-
- def get_window(self):
- return self.window
-
-
-# A base for all git commands that work with the file in the active view
-class GitTextCommand(GitCommand, sublime_plugin.TextCommand):
- def active_view(self):
- return self.view
-
- def is_enabled(self):
- # First, is this actually a file on the file system?
- if self.view.file_name() and len(self.view.file_name()) > 0:
- return git_root(self.get_working_dir())
-
- def get_file_name(self):
- return os.path.basename(self.view.file_name())
-
- def get_relative_file_name(self):
- working_dir = self.get_working_dir()
- file_path = working_dir.replace(git_root(working_dir), '')[1:]
- file_name = os.path.join(file_path, self.get_file_name())
- return file_name.replace('\\', '/') # windows issues
-
- def get_working_dir(self):
- return os.path.realpath(os.path.dirname(self.view.file_name()))
-
- def get_window(self):
- # Fun discovery: if you switch tabs while a command is working,
- # self.view.window() is None. (Admittedly this is a consequence
- # of my deciding to do async command processing... but, hey,
- # got to live with that now.)
- # I did try tracking the window used at the start of the command
- # and using it instead of view.window() later, but that results
- # panels on a non-visible window, which is especially useless in
- # the case of the quick panel.
- # So, this is not necessarily ideal, but it does work.
- return self.view.window() or sublime.active_window()
-
-
-# A few miscellaneous commands
-
-
-class GitCustomCommand(GitWindowCommand):
- may_change_files = True
-
- def run(self):
- self.get_window().show_input_panel("Git command", "",
- self.on_input, None, None)
-
- def on_input(self, command):
- command = str(command) # avoiding unicode
- if command.strip() == "":
- self.panel("No git command provided")
- return
- import shlex
- command_splitted = ['git'] + shlex.split(command)
- print command_splitted
- self.run_command(command_splitted)
-
-
-class GitGuiCommand(GitTextCommand):
- def run(self, edit):
- command = ['git', 'gui']
- self.run_command(command)
-
-
-class GitGitkCommand(GitTextCommand):
- def run(self, edit):
- command = ['gitk']
- self.run_command(command)
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/history.py b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/history.py
deleted file mode 100644
index 733c4aa..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/history.py
+++ /dev/null
@@ -1,189 +0,0 @@
-import functools
-import re
-
-import sublime
-from git import GitTextCommand, GitWindowCommand, plugin_file
-
-
-class GitBlameCommand(GitTextCommand):
- def run(self, edit):
- # somewhat custom blame command:
- # -w: ignore whitespace changes
- # -M: retain blame when moving lines
- # -C: retain blame when copying lines between files
- command = ['git', 'blame', '-w', '-M', '-C']
-
- s = sublime.load_settings("Git.sublime-settings")
- selection = self.view.sel()[0] # todo: multi-select support?
- if not selection.empty() or not s.get('blame_whole_file'):
- # just the lines we have a selection on
- begin_line, begin_column = self.view.rowcol(selection.begin())
- end_line, end_column = self.view.rowcol(selection.end())
- # blame will fail if last line is empty and is included in the selection
- if end_line > begin_line and end_column == 0:
- end_line -= 1
- lines = str(begin_line + 1) + ',' + str(end_line + 1)
- command.extend(('-L', lines))
- callback = self.blame_done
- else:
- callback = functools.partial(self.blame_done,
- position=self.view.viewport_position())
-
- command.append(self.get_file_name())
- self.run_command(command, callback)
-
- def blame_done(self, result, position=None):
- self.scratch(result, title="Git Blame", position=position,
- syntax=plugin_file("syntax/Git Blame.tmLanguage"))
-
-
-class GitLog(object):
- def run(self, edit=None):
- fn = self.get_file_name()
- return self.run_log(fn != '', '--', fn)
-
- def run_log(self, follow, *args):
- # the ASCII bell (\a) is just a convenient character I'm pretty sure
- # won't ever come up in the subject of the commit (and if it does then
- # you positively deserve broken output...)
- # 9000 is a pretty arbitrarily chosen limit; picked entirely because
- # it's about the size of the largest repo I've tested this on... and
- # there's a definite hiccup when it's loading that
- command = ['git', 'log', '--pretty=%s\a%h %an <%aE>\a%ad (%ar)',
- '--date=local', '--max-count=9000', '--follow' if follow else None]
- command.extend(args)
- self.run_command(
- command,
- self.log_done)
-
- def log_done(self, result):
- self.results = [r.split('\a', 2) for r in result.strip().split('\n')]
- self.quick_panel(self.results, self.log_panel_done)
-
- def log_panel_done(self, picked):
- if 0 > picked < len(self.results):
- return
- item = self.results[picked]
- # the commit hash is the first thing on the second line
- self.log_result(item[1].split(' ')[0])
-
- def log_result(self, ref):
- # I'm not certain I should have the file name here; it restricts the
- # details to just the current file. Depends on what the user expects...
- # which I'm not sure of.
- self.run_command(
- ['git', 'log', '-p', '-1', ref, '--', self.get_file_name()],
- self.details_done)
-
- def details_done(self, result):
- self.scratch(result, title="Git Commit Details", syntax=plugin_file("syntax/Git Commit Message.tmLanguage"))
-
-
-class GitLogCommand(GitLog, GitTextCommand):
- pass
-
-
-class GitLogAllCommand(GitLog, GitWindowCommand):
- pass
-
-
-class GitShow(object):
- def run(self, edit=None):
- # GitLog Copy-Past
- self.run_command(
- ['git', 'log', '--pretty=%s\a%h %an <%aE>\a%ad (%ar)',
- '--date=local', '--max-count=9000', '--', self.get_file_name()],
- self.show_done)
-
- def show_done(self, result):
- # GitLog Copy-Past
- self.results = [r.split('\a', 2) for r in result.strip().split('\n')]
- self.quick_panel(self.results, self.panel_done)
-
- def panel_done(self, picked):
- if 0 > picked < len(self.results):
- return
- item = self.results[picked]
- # the commit hash is the first thing on the second line
- ref = item[1].split(' ')[0]
- self.run_command(
- ['git', 'show', '%s:%s' % (ref, self.get_relative_file_name())],
- self.details_done,
- ref=ref)
-
- def details_done(self, result, ref):
- syntax = self.view.settings().get('syntax')
- self.scratch(result, title="%s:%s" % (ref, self.get_file_name()), syntax=syntax)
-
-
-class GitShowCommand(GitShow, GitTextCommand):
- pass
-
-
-class GitShowAllCommand(GitShow, GitWindowCommand):
- pass
-
-
-class GitGraph(object):
- def run(self, edit=None):
- filename = self.get_file_name()
- self.run_command(
- ['git', 'log', '--graph', '--pretty=%h -%d (%cr) (%ci) <%an> %s', '--abbrev-commit', '--no-color', '--decorate', '--date=relative', '--follow' if filename else None, '--', filename],
- self.log_done
- )
-
- def log_done(self, result):
- self.scratch(result, title="Git Log Graph", syntax=plugin_file("syntax/Git Graph.tmLanguage"))
-
-
-class GitGraphCommand(GitGraph, GitTextCommand):
- pass
-
-
-class GitGraphAllCommand(GitGraph, GitWindowCommand):
- pass
-
-
-class GitOpenFileCommand(GitLog, GitWindowCommand):
- def run(self):
- self.run_command(['git', 'branch', '-a', '--no-color'], self.branch_done)
-
- def branch_done(self, result):
- self.results = result.rstrip().split('\n')
- self.quick_panel(self.results, self.branch_panel_done,
- sublime.MONOSPACE_FONT)
-
- def branch_panel_done(self, picked):
- if 0 > picked < len(self.results):
- return
- self.branch = self.results[picked].split(' ')[-1]
- self.run_log(False, self.branch)
-
- def log_result(self, result_hash):
- # the commit hash is the first thing on the second line
- self.ref = result_hash
- self.run_command(
- ['git', 'ls-tree', '-r', '--full-tree', self.ref],
- self.ls_done)
-
- def ls_done(self, result):
- # Last two items are the ref and the file name
- # p.s. has to be a list of lists; tuples cause errors later
- self.results = [[match.group(2), match.group(1)] for match in re.finditer(r"\S+\s(\S+)\t(.+)", result)]
-
- self.quick_panel(self.results, self.ls_panel_done)
-
- def ls_panel_done(self, picked):
- if 0 > picked < len(self.results):
- return
- item = self.results[picked]
-
- self.filename = item[0]
- self.fileRef = item[1]
-
- self.run_command(
- ['git', 'show', self.fileRef],
- self.show_done)
-
- def show_done(self, result):
- self.scratch(result, title="%s:%s" % (self.fileRef, self.filename))
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/repo.py b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/repo.py
deleted file mode 100644
index 1a293a6..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/repo.py
+++ /dev/null
@@ -1,159 +0,0 @@
-import os
-
-import sublime
-from git import GitTextCommand, GitWindowCommand, git_root_exist
-
-
-class GitInit(object):
- def git_init(self, directory):
- if os.path.exists(directory):
- self.run_command(['git', 'init'], self.git_inited, working_dir=directory)
- else:
- sublime.status_message("Directory does not exist.")
-
- def git_inited(self, result):
- sublime.status_message(result)
-
-
-class GitInitCommand(GitInit, GitWindowCommand):
- def run(self):
- self.get_window().show_input_panel("Git directory", self.get_working_dir(), self.git_init, None, None)
-
- def is_enabled(self):
- if not git_root_exist(self.get_working_dir()):
- return True
- else:
- return False
-
-
-class GitBranchCommand(GitWindowCommand):
- may_change_files = True
- command_to_run_after_branch = ['checkout']
- extra_flags = []
-
- def run(self):
- self.run_command(['git', 'branch', '--no-color'] + self.extra_flags, self.branch_done)
-
- def branch_done(self, result):
- self.results = result.rstrip().split('\n')
- self.quick_panel(self.results, self.panel_done,
- sublime.MONOSPACE_FONT)
-
- def panel_done(self, picked):
- if 0 > picked < len(self.results):
- return
- picked_branch = self.results[picked]
- if picked_branch.startswith("*"):
- return
- picked_branch = picked_branch.strip()
- self.run_command(['git'] + self.command_to_run_after_branch + [picked_branch], self.update_status)
-
- def update_status(self, result):
- global branch
- branch = ""
- for view in self.window.views():
- view.run_command("git_branch_status")
-
-
-class GitMergeCommand(GitBranchCommand):
- command_to_run_after_branch = ['merge']
- extra_flags = ['--no-merge']
-
-
-class GitDeleteBranchCommand(GitBranchCommand):
- command_to_run_after_branch = ['branch', '-d']
-
-
-class GitNewBranchCommand(GitWindowCommand):
- def run(self):
- self.get_window().show_input_panel("Branch name", "",
- self.on_input, None, None)
-
- def on_input(self, branchname):
- if branchname.strip() == "":
- self.panel("No branch name provided")
- return
- self.run_command(['git', 'checkout', '-b', branchname])
-
-
-class GitNewTagCommand(GitWindowCommand):
- def run(self):
- self.get_window().show_input_panel("Tag name", "", self.on_input, None, None)
-
- def on_input(self, tagname):
- if not tagname.strip():
- self.panel("No branch name provided")
- return
- self.run_command(['git', 'tag', tagname])
-
-
-class GitShowTagsCommand(GitWindowCommand):
- def run(self):
- self.run_command(['git', 'tag'], self.fetch_tag)
-
- def fetch_tag(self, result):
- self.results = result.rstrip().split('\n')
- self.quick_panel(self.results, self.panel_done)
-
- def panel_done(self, picked):
- if 0 > picked < len(self.results):
- return
- picked_tag = self.results[picked]
- picked_tag = picked_tag.strip()
- self.run_command(['git', 'show', picked_tag])
-
-
-class GitPushTagsCommand(GitWindowCommand):
- def run(self):
- self.run_command(['git', 'push', '--tags'])
-
-
-class GitCheckoutCommand(GitTextCommand):
- may_change_files = True
-
- def run(self, edit):
- self.run_command(['git', 'checkout', self.get_file_name()])
-
-
-class GitFetchCommand(GitWindowCommand):
- def run(self):
- self.run_command(['git', 'fetch'], callback=self.panel)
-
-
-class GitPullCommand(GitWindowCommand):
- def run(self):
- self.run_command(['git', 'pull'], callback=self.panel)
-
-
-class GitPullCurrentBranchCommand(GitWindowCommand):
- command_to_run_after_describe = 'pull'
-
- def run(self):
- self.run_command(['git', 'describe', '--contains', '--all', 'HEAD'], callback=self.describe_done)
-
- def describe_done(self, result):
- self.current_branch = result.strip()
- self.run_command(['git', 'remote'], callback=self.remote_done)
-
- def remote_done(self, result):
- self.remotes = result.rstrip().split('\n')
- if len(self.remotes) == 1:
- self.panel_done()
- else:
- self.quick_panel(self.remotes, self.panel_done, sublime.MONOSPACE_FONT)
-
- def panel_done(self, picked=0):
- if picked < 0 or picked >= len(self.remotes):
- return
- self.picked_remote = self.remotes[picked]
- self.picked_remote = self.picked_remote.strip()
- self.run_command(['git', self.command_to_run_after_describe, self.picked_remote, self.current_branch])
-
-
-class GitPushCommand(GitWindowCommand):
- def run(self):
- self.run_command(['git', 'push'], callback=self.panel)
-
-
-class GitPushCurrentBranchCommand(GitPullCurrentBranchCommand):
- command_to_run_after_describe = 'push'
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/stash.py b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/stash.py
deleted file mode 100644
index d76fed8..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/stash.py
+++ /dev/null
@@ -1,47 +0,0 @@
-from git import GitWindowCommand
-
-
-class GitStashCommand(GitWindowCommand):
- may_change_files = True
-
- def run(self):
- self.run_command(['git', 'stash'])
-
-
-class GitStashPopCommand(GitWindowCommand):
- def run(self):
- self.run_command(['git', 'stash', 'pop'])
-
-
-class GitStashApplyCommand(GitWindowCommand):
- may_change_files = True
- command_to_run_after_list = 'apply'
-
- def run(self):
- self.run_command(['git', 'stash', 'list'], self.stash_list_done)
-
- def stash_list_done(self, result):
- # No stash list at all
- if not result:
- self.panel('No stash found')
- return
-
- self.results = result.rstrip().split('\n')
-
- # If there is only one, apply it
- if len(self.results) == 1:
- self.stash_list_panel_done()
- else:
- self.quick_panel(self.results, self.stash_list_panel_done)
-
- def stash_list_panel_done(self, picked=0):
- if 0 > picked < len(self.results):
- return
-
- # get the stash ref (e.g. stash@{3})
- self.stash = self.results[picked].split(':')[0]
- self.run_command(['git', 'stash', self.command_to_run_after_list, self.stash])
-
-
-class GitStashDropCommand(GitStashApplyCommand):
- command_to_run_after_list = 'drop'
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/status.py b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/status.py
deleted file mode 100644
index 3f490af..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/status.py
+++ /dev/null
@@ -1,63 +0,0 @@
-import os
-import re
-
-import sublime
-from git import GitWindowCommand, git_root
-
-
-class GitStatusCommand(GitWindowCommand):
- force_open = False
-
- def run(self):
- self.run_command(['git', 'status', '--porcelain'], self.status_done)
-
- def status_done(self, result):
- self.results = filter(self.status_filter, result.rstrip().split('\n'))
- if len(self.results):
- self.show_status_list()
- else:
- sublime.status_message("Nothing to show")
-
- def show_status_list(self):
- self.quick_panel(self.results, self.panel_done,
- sublime.MONOSPACE_FONT)
-
- def status_filter(self, item):
- # for this class we don't actually care
- if not re.match(r'^[ MADRCU?!]{1,2}\s+.*', item):
- return False
- return len(item) > 0
-
- def panel_done(self, picked):
- if 0 > picked < len(self.results):
- return
- picked_file = self.results[picked]
- # first 2 characters are status codes, the third is a space
- picked_status = picked_file[:2]
- picked_file = picked_file[3:]
- self.panel_followup(picked_status, picked_file, picked)
-
- def panel_followup(self, picked_status, picked_file, picked_index):
- # split out solely so I can override it for laughs
-
- s = sublime.load_settings("Git.sublime-settings")
- root = git_root(self.get_working_dir())
- if picked_status == '??' or s.get('status_opens_file') or self.force_open:
- if(os.path.isfile(os.path.join(root, picked_file))):
- self.window.open_file(os.path.join(root, picked_file))
- else:
- self.run_command(['git', 'diff', '--no-color', '--', picked_file.strip('"')],
- self.diff_done, working_dir=root)
-
- def diff_done(self, result):
- if not result.strip():
- return
- self.scratch(result, title="Git Diff")
-
-
-class GitOpenModifiedFilesCommand(GitStatusCommand):
- force_open = True
-
- def show_status_list(self):
- for line_index in range(0, len(self.results)):
- self.panel_done(line_index)
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/statusbar.py b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/statusbar.py
deleted file mode 100644
index 11b6a8d..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/statusbar.py
+++ /dev/null
@@ -1,58 +0,0 @@
-import re
-
-import sublime
-import sublime_plugin
-from git import GitTextCommand
-
-
-class GitBranchStatusListener(sublime_plugin.EventListener):
- def on_activated(self, view):
- view.run_command("git_branch_status")
-
- def on_post_save(self, view):
- view.run_command("git_branch_status")
-
-
-class GitBranchStatusCommand(GitTextCommand):
- def run(self, view):
- s = sublime.load_settings("Git.sublime-settings")
- if s.get("statusbar_branch"):
- self.run_command(['git', 'rev-parse', '--abbrev-ref', 'HEAD'], self.branch_done, show_status=False, no_save=True)
- else:
- self.view.set_status("git-branch", "")
- if (s.get("statusbar_status")):
- self.run_command(['git', 'status', '--porcelain'], self.status_done, show_status=False, no_save=True)
- else:
- self.view.set_status("git-status", "")
-
- def branch_done(self, result):
- self.view.set_status("git-branch", "git branch: " + result.strip())
-
- def status_done(self, result):
- lines = [line for line in result.splitlines() if re.match(r'^[ MADRCU?!]{1,2}\s+.*', line)]
- index = [line[0] for line in lines if not line[0].isspace()]
- working = [line[1] for line in lines if not line[1].isspace()]
- self.view.set_status("git-status-index", "index: " + self.status_string(index))
- self.view.set_status("git-status-working", "working: " + self.status_string(working))
-
- def status_string(self, statuses):
- s = sublime.load_settings("Git.sublime-settings")
- symbols = s.get("statusbar_status_symbols")
- if not statuses:
- return symbols['clean']
- status = []
- if statuses.count('M'):
- status.append("%d%s" % (statuses.count('M'), symbols['modified']))
- if statuses.count('A'):
- status.append("%d%s" % (statuses.count('A'), symbols['added']))
- if statuses.count('D'):
- status.append("%d%s" % (statuses.count('D'), symbols['deleted']))
- if statuses.count('?'):
- status.append("%d%s" % (statuses.count('?'), symbols['untracked']))
- if statuses.count('U'):
- status.append("%d%s" % (statuses.count('U'), symbols['conflicts']))
- if statuses.count('R'):
- status.append("%d%s" % (statuses.count('R'), symbols['renamed']))
- if statuses.count('C'):
- status.append("%d%s" % (statuses.count('C'), symbols['copied']))
- return symbols['separator'].join(status)
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/syntax/Git Blame.JSON-tmLanguage b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/syntax/Git Blame.JSON-tmLanguage
deleted file mode 100644
index d0b4322..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/syntax/Git Blame.JSON-tmLanguage
+++ /dev/null
@@ -1,18 +0,0 @@
-{ "name": "Git Blame",
- "scopeName": "text.git-blame",
- "fileTypes": ["git-blame"],
- "patterns": [
- {
- "match": "^(\\^?[a-f0-9]+)\\s+([\\w\\-\\d\\.\\/]*)\\s*\\((.*?)\\s+(\\d{4}-\\d\\d-\\d\\d \\d\\d:\\d\\d:\\d\\d [+-]\\d{4})\\s+(\\d+)\\)",
- "name": "line.comment.git-blame",
- "captures": {
- "1": {"name": "string.sha.git-blame"},
- "2": {"name": "string.path.git-blame"},
- "3": {"name": "support.function.author.git-blame"},
- "4": {"name": "constant.numeric.date.git-blame"},
- "5": {"name": "variable.parameter.line-number.git-blame"}
- }
- }
- ],
- "uuid": "5d37add9-889e-4174-b232-4bd423b84c0a"
-}
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/syntax/Git Blame.tmLanguage b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/syntax/Git Blame.tmLanguage
deleted file mode 100644
index 34607c6..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/syntax/Git Blame.tmLanguage
+++ /dev/null
@@ -1,53 +0,0 @@
-
-
-
-
- fileTypes
-
- git-blame
-
- name
- Git Blame
- patterns
-
-
- captures
-
- 1
-
- name
- string.sha.git-blame
-
- 2
-
- name
- string.path.git-blame
-
- 3
-
- name
- support.function.author.git-blame
-
- 4
-
- name
- constant.numeric.date.git-blame
-
- 5
-
- name
- variable.parameter.line-number.git-blame
-
-
- match
- ^(\^?[a-f0-9]+)\s+([\w\-\d\.\/]*)\s*\((.*?)\s+(\d{4}-\d\d-\d\d( \d\d:\d\d:\d\d [+-]\d{4})?)\s+(\d+)\)
- name
- line.comment.git-blame
-
-
- scopeName
- text.git-blame
- uuid
- 5d37add9-889e-4174-b232-4bd423b84c0a
-
-
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/syntax/Git Commit Message.JSON-tmLanguage b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/syntax/Git Commit Message.JSON-tmLanguage
deleted file mode 100644
index d287027..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/syntax/Git Commit Message.JSON-tmLanguage
+++ /dev/null
@@ -1,21 +0,0 @@
-{ "name": "Git Commit Message",
- "scopeName": "text.git-commit",
- "fileTypes": ["COMMIT_EDITMSG"],
- "patterns": [
- { "name": "comment.line.number-sign.git-commit",
- "match": "^\\s*(#).*$\n?",
- "captures": {
- "1": { "name": "punctuation.definition.comment.git-commit" }
- }
- },
- { "name": "meta.diff.git-commit",
- "comment": "diff at the end of the commit message when using commit -v, or viewing a log. End pattern is just something to be never matched so that the meta continues untill the end of the file.",
- "begin": "diff\\ \\-\\-git",
- "end": "(?=xxxxxx)123457",
- "patterns": [
- { "include": "source.diff" }
- ]
- }
- ],
- "uuid": "de3fb2fc-e564-4a31-9813-5ee26967c5c8"
-}
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/syntax/Git Commit Message.tmLanguage b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/syntax/Git Commit Message.tmLanguage
deleted file mode 100644
index 1b46130..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/syntax/Git Commit Message.tmLanguage
+++ /dev/null
@@ -1,51 +0,0 @@
-
-
-
-
- fileTypes
-
- COMMIT_EDITMSG
-
- name
- Git Commit Message
- patterns
-
-
- captures
-
- 1
-
- name
- punctuation.definition.comment.git-commit
-
-
- match
- ^\s*(#).*$
-?
- name
- comment.line.number-sign.git-commit
-
-
- begin
- diff\ \-\-git
- comment
- diff at the end of the commit message when using commit -v, or viewing a log. End pattern is just something to be never matched so that the meta continues untill the end of the file.
- end
- (?=xxxxxx)123457
- name
- meta.diff.git-commit
- patterns
-
-
- include
- source.diff
-
-
-
-
- scopeName
- text.git-commit
- uuid
- de3fb2fc-e564-4a31-9813-5ee26967c5c8
-
-
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/syntax/Git Graph.JSON-tmLanguage b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/syntax/Git Graph.JSON-tmLanguage
deleted file mode 100644
index 926b3d6..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/syntax/Git Graph.JSON-tmLanguage
+++ /dev/null
@@ -1,31 +0,0 @@
-{ "name": "Git Graph",
- "scopeName": "text.git-graph",
- "fileTypes": ["git-graph"],
- "patterns": [
- { "match": "^([| *\\\\]+)([0-9a-f]{4,40}) (.*?) (\\d{4}-\\d\\d-\\d\\d \\d\\d:\\d\\d:\\d\\d [+-]\\d{4}) (?:\\(((?:[a-zA-Z0-9._\\-\\/]+(?:, )?)+)\\) )?",
- "name": "log-entry.git-graph",
- "captures": {
- "1": {"name": "comment.git-graph" },
- "2": {"name": "string.git-graph" },
- "3": {"name": "support.function.git-graph" },
- "4": {"name": "constant.numeric.git-graph" },
- "5": {"name": "variable.parameter.git-graph" }
- }
- },
- { "match": "^\\|[\\|_\\/\\\\ ]+\n?$",
- "name": "comment.git-graph",
- "comment": "lines with no commit details"
- },
- { "match": "(?:[Ff]ix(?:e[ds])?|[Rr]esolve[ds]?|[Cc]lose[ds]?)?\\s*(?:#\\d+|\\[.*?\\])",
- "name": "keyword.git-graph",
- "comment": "issue numbers"
- },
- { "match": "Merge branch '(.*?)' of .*?\n?$",
- "name": "comment.git-graph",
- "captures": {
- "1": {"name": "variable.parameter.git-graph"}
- }
- }
- ],
- "uuid": "b900521e-af64-471b-aec8-1ecf88aab595"
-}
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/syntax/Git Graph.tmLanguage b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/syntax/Git Graph.tmLanguage
deleted file mode 100644
index 4c19eec..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Git/syntax/Git Graph.tmLanguage
+++ /dev/null
@@ -1,90 +0,0 @@
-
-
-
-
- fileTypes
-
- git-graph
-
- name
- Git Graph
- patterns
-
-
- captures
-
- 1
-
- name
- comment.git-graph
-
- 2
-
- name
- string.git-graph
-
- 3
-
- name
- support.function.git-graph
-
- 4
-
- name
- constant.numeric.git-graph
-
- 5
-
- name
- variable.parameter.git-graph
-
- 6
-
- name
- keyword.git-graph
-
-
- match
- ^([| *\\]+)([0-9a-f]{4,40}) -( \(.*?\))? (.*) (\(.*) (<.*>) .*
- name
- log-entry.git-graph
-
-
- comment
- lines with no commit details
- match
- ^\|[\|_\/\\ ]+
-?$
- name
- comment.git-graph
-
-
- comment
- issue numbers
- match
- (?:[Ff]ix(?:e[ds])?|[Rr]esolve[ds]?|[Cc]lose[ds]?)?\s*(?:#\d+|\[.*?\])
- name
- keyword.git-graph
-
-
- captures
-
- 1
-
- name
- variable.parameter.git-graph
-
-
- match
- Merge branch '(.*?)' of .*?
-?$
- name
- comment.git-graph
-
-
- scopeName
- text.git-graph
- uuid
- b900521e-af64-471b-aec8-1ecf88aab595
-
-
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/GitHubinator/.gitignore b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/GitHubinator/.gitignore
deleted file mode 100644
index 0d20b64..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/GitHubinator/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-*.pyc
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/GitHubinator/Context.sublime-menu b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/GitHubinator/Context.sublime-menu
deleted file mode 100644
index 5ac7f6f..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/GitHubinator/Context.sublime-menu
+++ /dev/null
@@ -1,6 +0,0 @@
-[
- { "command": "githubinator", "caption": "GitHubinator", "args": { "permalink": false } },
- { "command": "githubinator", "caption": "GitHubinator Permalink", "args": { "permalink": true } },
- { "command": "githubinator", "caption": "GitHubinator Blame", "args": { "permalink": false, "mode": "blame" } },
- { "command": "githubinator", "caption": "GitHubinator Blame Permalink", "args": { "permalink": true, "mode": "blame" } }
-]
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/GitHubinator/Default (OSX).sublime-keymap b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/GitHubinator/Default (OSX).sublime-keymap
deleted file mode 100644
index 2351531..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/GitHubinator/Default (OSX).sublime-keymap
+++ /dev/null
@@ -1,4 +0,0 @@
-[
- { "keys": ["super+\\"], "command": "githubinator", "args" : { "permalink": false }},
- { "keys": ["shift+super+\\"], "command": "githubinator", "args" : { "permalink": true }}
-]
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/GitHubinator/Default.sublime-commands b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/GitHubinator/Default.sublime-commands
deleted file mode 100644
index 6cd68d3..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/GitHubinator/Default.sublime-commands
+++ /dev/null
@@ -1,22 +0,0 @@
-[
- {
- "caption": "GitHubinator",
- "command": "githubinator",
- "args": { "permalink": false }
- },
- {
- "caption": "GitHubinator Permalink",
- "command": "githubinator",
- "args": { "permalink": true }
- },
- {
- "caption": "GitHubinator Blame",
- "command": "githubinator",
- "args": { "permalink": false, "mode": "blame" }
- },
- {
- "caption": "GitHubinator Blame Permalink",
- "command": "githubinator",
- "args": { "permalink": true, "mode": "blame" }
- }
-]
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/GitHubinator/Githubinator.sublime-settings b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/GitHubinator/Githubinator.sublime-settings
deleted file mode 100644
index 2c07307..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/GitHubinator/Githubinator.sublime-settings
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "default_remote": "origin",
- "default_host": "github.com"
-}
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/GitHubinator/README.md b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/GitHubinator/README.md
deleted file mode 100644
index 7b5aa21..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/GitHubinator/README.md
+++ /dev/null
@@ -1,35 +0,0 @@
-# GitHubinator*
-
-*_With regards to [Dr. Heinz Doofenshmirtz](http://en.wikipedia.org/wiki/Dr._Heinz_Doofenshmirtz)_
-
-This will allow you to select text in a Sublime Text 2 file, and see the highlighted lines on GitHub's remote repo, if one exists.
-
-![Screenshot](http://i.imgur.com/lcJ78.png)
-
-
-## Installation
-
-If you use [Package Control](http://wbond.net/sublime_packages/package_control), just install it from there. If not:
-
-Clone this repo to your Sublime Text 2 Packages folder:
-
- cd ~/"Library/Application Support/Sublime Text 2/Packages/"
- git clone https://github.com/ehamiter/ST2-GitHubinator.git
-
-The plugin should be picked up automatically. If not, restart Sublime Text.
-
-
-## Configuration
-
-The defaults should work for most setups, but if you have a different remote name or use GitHub Enterprise, you can configure remote and host in the `Githubinator.sublime-settings` file:
-
- {
- "default_remote": "origin",
- "default_host": "github.com"
- }
-
-
-## Usage
-
-Select some text.
-Activate the context menu and select "GitHubinator" or by keypress (⌘\\ by default, configurable in .sublime-keymap file).
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/GitHubinator/githubinator.py b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/GitHubinator/githubinator.py
deleted file mode 100644
index 0bc4629..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/GitHubinator/githubinator.py
+++ /dev/null
@@ -1,87 +0,0 @@
-import os
-import re
-import sublime
-import sublime_plugin
-
-
-class GithubinatorCommand(sublime_plugin.TextCommand):
- '''This will allow you to highlight your code, activate the plugin, then see the
- highlighted results on GitHub.
- '''
-
- def load_config(self):
- s = sublime.load_settings("Githubinator.sublime-settings")
- global DEFAULT_GIT_REMOTE, DEFAULT_GITHUB_HOST
- DEFAULT_GIT_REMOTE = s.get("default_remote")
- if not isinstance(DEFAULT_GIT_REMOTE, list):
- DEFAULT_GIT_REMOTE = [DEFAULT_GIT_REMOTE]
- DEFAULT_GITHUB_HOST = s.get("default_host")
- if DEFAULT_GITHUB_HOST is None:
- DEFAULT_GITHUB_HOST = "github.com"
-
-
- def run(self, edit, permalink = False, mode = 'blob'):
- self.load_config()
- if not self.view.file_name():
- return
-
- full_name = os.path.realpath(self.view.file_name())
- folder_name, file_name = os.path.split(full_name)
-
- git_path = self.recurse_dir(folder_name, '.git')
- if not git_path:
- sublime.status_message('Could not find .git directory.')
- print('Could not find .git directory.')
- return
-
- git_config_path = os.path.join(git_path, '.git', 'config')
- new_git_path = folder_name[len(git_path):]
-
- with open(git_config_path, "r") as git_config_file:
- config = git_config_file.read()
-
- sel = self.view.sel()[0]
- begin_line = self.view.rowcol(sel.begin())[0] + 1
- end_line = self.view.rowcol(sel.end())[0] + 1
- if begin_line == end_line:
- lines = begin_line
- else:
- lines = '%s-%s' % (begin_line, end_line)
-
- re_host = re.escape(DEFAULT_GITHUB_HOST)
- for remote in DEFAULT_GIT_REMOTE:
- regex = r'.*\s.*(?:https://%s/|%s:|git://%s/)(.*)/(.*?)(?:\.git)?\r?\n' % (re_host, re_host, re_host)
- result = re.search(remote + regex, config)
- if not result:
- continue
- matches = result.groups()
-
- ref_path = open(os.path.join(git_path, '.git', 'HEAD'), "r").read().replace('ref: ', '')[:-1]
- branch = ref_path.replace('refs/heads/','')
- sha = open(os.path.join(git_path, '.git', ref_path), "r").read()[:-1]
- target = sha if permalink else branch
-
- full_link = 'https://%s/%s/%s/%s/%s%s/%s#L%s' % \
- (DEFAULT_GITHUB_HOST, matches[0], matches[1], mode, target, new_git_path, file_name, lines)
- sublime.set_clipboard(full_link)
- sublime.status_message('Copied %s to clipboard.' % full_link)
- print('Copied %s to clipboard.' % full_link)
- self.view.window().run_command('open_url', {"url": full_link})
- break
-
-
- def recurse_dir(self, path, folder):
- items = os.listdir(path)
- if folder in items and os.path.isdir(os.path.join(path, folder)):
- return path
- dirname = os.path.dirname(path)
- if dirname == path:
- return None
- return self.recurse_dir(dirname, folder)
-
-
- def is_enabled(self):
- if self.view.file_name() and len(self.view.file_name()) > 0:
- return True
- else:
- return False
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/GitHubinator/package-metadata.json b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/GitHubinator/package-metadata.json
deleted file mode 100644
index 9340f76..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/GitHubinator/package-metadata.json
+++ /dev/null
@@ -1 +0,0 @@
-{"url": "https://github.com/ehamiter/ST2-GitHubinator", "version": "2013.09.09.18.14.32", "description": "Sublime Text 2 plugin that shows selected ST2 text on GitHub"}
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Modific/.gitignore b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Modific/.gitignore
deleted file mode 100644
index d517a68..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Modific/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-*.pyc
-images
-!.gitignore
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Modific/Default (Linux).sublime-keymap b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Modific/Default (Linux).sublime-keymap
deleted file mode 100644
index b00e925..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Modific/Default (Linux).sublime-keymap
+++ /dev/null
@@ -1,9 +0,0 @@
-[
- { "keys": ["ctrl+alt+c"], "command": "show_original_part" },
- { "keys": ["ctrl+alt+r"], "command": "replace_modified_part" },
- { "keys": ["ctrl+alt+d"], "command": "show_diff" },
- { "keys": ["ctrl+alt+u"], "command": "uncommitted_files" },
-
- { "keys": ["ctrl+shift+pageup"], "command": "jump_between_changes", "args": {"direction": "prev"} },
- { "keys": ["ctrl+shift+pagedown"], "command": "jump_between_changes", "args": {"direction": "next"} }
-]
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Modific/Default (OSX).sublime-keymap b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Modific/Default (OSX).sublime-keymap
deleted file mode 100644
index fcf3f2b..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Modific/Default (OSX).sublime-keymap
+++ /dev/null
@@ -1,9 +0,0 @@
-[
- { "keys": ["ctrl+super+c"], "command": "show_original_part" },
- { "keys": ["ctrl+super+r"], "command": "replace_modified_part" },
- { "keys": ["ctrl+alt+d"], "command": "show_diff" },
- { "keys": ["ctrl+super+u"], "command": "uncommitted_files" },
-
- { "keys": ["ctrl+shift+pageup"], "command": "jump_between_changes", "args": {"direction": "prev"} },
- { "keys": ["ctrl+shift+pagedown"], "command": "jump_between_changes", "args": {"direction": "next"} }
-]
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Modific/Default (Windows).sublime-keymap b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Modific/Default (Windows).sublime-keymap
deleted file mode 100644
index b00e925..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Modific/Default (Windows).sublime-keymap
+++ /dev/null
@@ -1,9 +0,0 @@
-[
- { "keys": ["ctrl+alt+c"], "command": "show_original_part" },
- { "keys": ["ctrl+alt+r"], "command": "replace_modified_part" },
- { "keys": ["ctrl+alt+d"], "command": "show_diff" },
- { "keys": ["ctrl+alt+u"], "command": "uncommitted_files" },
-
- { "keys": ["ctrl+shift+pageup"], "command": "jump_between_changes", "args": {"direction": "prev"} },
- { "keys": ["ctrl+shift+pagedown"], "command": "jump_between_changes", "args": {"direction": "next"} }
-]
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Modific/Main.sublime-menu b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Modific/Main.sublime-menu
deleted file mode 100644
index 09e32d8..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Modific/Main.sublime-menu
+++ /dev/null
@@ -1,90 +0,0 @@
-[
- {
- "caption": "Preferences",
- "mnemonic": "n",
- "id": "preferences",
- "children":
- [
- {
- "caption": "Package Settings",
- "mnemonic": "P",
- "id": "package-settings",
- "children":
- [
- {
- "caption": "Modific",
- "children":
- [
- {
- "command": "open_file",
- "args": {"file": "${packages}/Modific/README.md"},
- "caption": "README"
- },
- { "caption": "-" },
- {
- "command": "open_file",
- "args": {"file": "${packages}/Modific/Modific.sublime-settings"},
- "caption": "Settings – Default"
- },
- {
- "command": "open_file",
- "args": {"file": "${packages}/User/Modific.sublime-settings"},
- "caption": "Settings – User"
- },
- { "caption": "-" },
- {
- "command": "open_file",
- "args": {
- "file": "${packages}/Modific/Default (OSX).sublime-keymap",
- "platform": "OSX"
- },
- "caption": "Key Bindings – Default"
- },
- {
- "command": "open_file",
- "args": {
- "file": "${packages}/Modific/Default (Linux).sublime-keymap",
- "platform": "Linux"
- },
- "caption": "Key Bindings – Default"
- },
- {
- "command": "open_file",
- "args": {
- "file": "${packages}/Modific/Default (Windows).sublime-keymap",
- "platform": "Windows"
- },
- "caption": "Key Bindings – Default"
- },
- {
- "command": "open_file",
- "args": {
- "file": "${packages}/User/Default (OSX).sublime-keymap",
- "platform": "OSX"
- },
- "caption": "Key Bindings – User"
- },
- {
- "command": "open_file",
- "args": {
- "file": "${packages}/User/Default (Linux).sublime-keymap",
- "platform": "Linux"
- },
- "caption": "Key Bindings – User"
- },
- {
- "command": "open_file",
- "args": {
- "file": "${packages}/User/Default (Windows).sublime-keymap",
- "platform": "Windows"
- },
- "caption": "Key Bindings – User"
- },
- { "caption": "-" }
- ]
- }
- ]
- }
- ]
- }
-]
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Modific/Modific.py b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Modific/Modific.py
deleted file mode 100644
index 9bbf539..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Modific/Modific.py
+++ /dev/null
@@ -1,627 +0,0 @@
-# -*- coding: utf-8 -*-
-import sublime
-import sublime_plugin
-import os
-import threading
-import subprocess
-import functools
-import re
-
-
-IS_ST3 = sublime.version().startswith('3')
-
-def get_settings():
- return sublime.load_settings("Modific.sublime-settings")
-
-
-def get_vcs_settings():
- return get_settings().get('vcs', [
- ["git", "git"],
- ["svn", "svn"],
- ["bzr", "bzr"],
- ["hg", "hg"]
- ])
-
-
-def vcs_root(directory):
- """
- Determines root directory for VCS
- """
-
- vcs_check = [(lambda vcs: lambda dir: os.path.exists(os.path.join(dir, '.' + vcs))
- and {'root': dir, 'name': vcs})(vcs)
- for vcs, _ in get_vcs_settings()]
-
- while directory:
- available = list(filter(lambda x: x, [check(directory) for check in vcs_check]))
- if available:
- return directory, available[0]
-
- parent = os.path.realpath(os.path.join(directory, os.path.pardir))
- if parent == directory:
- # /.. == /
- return None, None
- directory = parent
- return None, None
-
-
-def get_vcs(directory):
- """
- Determines, which of VCS systems we should use for given folder.
- Currently, uses priority of definitions in get_vcs_settings()
- """
- root_dir, vcs = vcs_root(directory)
- return vcs
-
-
-def main_thread(callback, *args, **kwargs):
- # sublime.set_timeout gets used to send things onto the main thread
- # most sublime.[something] calls need to be on the main thread
- sublime.set_timeout(functools.partial(callback, *args, **kwargs), 0)
-
-
-def _make_text_safeish(text, fallback_encoding, method='decode'):
- # The unicode decode here is because sublime converts to unicode inside
- # insert in such a way that unknown characters will cause errors, which is
- # distinctly non-ideal... and there's no way to tell what's coming out of
- # git in output. So...
- try:
- unitext = getattr(text, method)('utf-8')
- except (UnicodeEncodeError, UnicodeDecodeError):
- unitext = getattr(text, method)(fallback_encoding)
- except AttributeError:
- # strongly implies we're already unicode, but just in case let's cast
- # to string
- unitext = str(text)
- return unitext
-
-
-def do_when(conditional, callback, *args, **kwargs):
- if conditional():
- return callback(*args, **kwargs)
- sublime.set_timeout(functools.partial(do_when, conditional, callback, *args, **kwargs), 50)
-
-
-class CommandThread(threading.Thread):
- def __init__(self, command, on_done, working_dir="", fallback_encoding="", console_encoding="", **kwargs):
- threading.Thread.__init__(self)
- self.command = command
- self.on_done = on_done
- self.working_dir = working_dir
- if 'stdin' in kwargs:
- self.stdin = kwargs['stdin'].encode()
- else:
- self.stdin = None
- self.stdout = kwargs.get('stdout', subprocess.PIPE)
- self.console_encoding = console_encoding
- self.fallback_encoding = fallback_encoding
- self.kwargs = kwargs
-
- def run(self):
- try:
- # Per http://bugs.python.org/issue8557 shell=True is required to
- # get $PATH on Windows. Yay portable code.
- shell = os.name == 'nt'
- if self.working_dir != "":
- os.chdir(self.working_dir)
-
- if self.console_encoding:
- self.command = [s.encode(self.console_encoding) for s in self.command]
-
- proc = subprocess.Popen(self.command,
- stdout=self.stdout, stderr=subprocess.STDOUT,
- stdin=subprocess.PIPE,
- shell=shell, universal_newlines=True)
- output = proc.communicate(self.stdin)[0]
- if not output:
- output = ''
- # if sublime's python gets bumped to 2.7 we can just do:
- # output = subprocess.check_output(self.command)
- main_thread(self.on_done,
- _make_text_safeish(output, self.fallback_encoding), **self.kwargs)
- except subprocess.CalledProcessError as e:
- main_thread(self.on_done, e.returncode)
- except OSError as e:
- if e.errno == 2:
- main_thread(sublime.error_message,
- "'%s' binary could not be found in PATH\n\nConsider using `vcs` property to specify PATH\n\nPATH is: %s" % (self.command[0], os.environ['PATH']))
- else:
- raise e
-
-
-class EditViewCommand(sublime_plugin.TextCommand):
-
- def run(self, edit, command=None, output='', begin=0, region=None):
- """
- For some reason Sublime's view.run_command() doesn't allow to pass tuples,
- therefore region must be a list
- """
- region = sublime.Region(int(region[0]), int(region[1])) if region else None
- if command == 'insert':
- self.view.insert(edit, int(begin), output)
- elif command == 'replace':
- self.view.replace(edit, region, output)
- elif command == 'erase':
- self.view.erase(edit, region)
- else:
- print('Invalid command: ', command)
- raise
-
-
-class VcsCommand(object):
- may_change_files = False
-
- def __init__(self, *args, **kwargs):
- self.settings = get_settings()
- super(VcsCommand, self).__init__(*args, **kwargs)
-
- def run_command(self, command, callback=None, show_status=True,
- filter_empty_args=True, **kwargs):
- if filter_empty_args:
- command = [arg for arg in command if arg]
- if 'working_dir' not in kwargs:
- kwargs['working_dir'] = self.get_working_dir()
- if 'fallback_encoding' not in kwargs and self.active_view() and self.active_view().settings().get('fallback_encoding'):
- kwargs['fallback_encoding'] = self.active_view().settings().get('fallback_encoding').rpartition('(')[2].rpartition(')')[0]
- kwargs['console_encoding'] = self.settings.get('console_encoding')
-
- autosave = self.settings.get('autosave', True)
- if self.active_view() and self.active_view().is_dirty() and autosave:
- self.active_view().run_command('save')
- if not callback:
- callback = self.generic_done
-
- thread = CommandThread(command, callback, **kwargs)
- thread.start()
-
- if show_status:
- message = kwargs.get('status_message', False) or ' '.join(command)
- sublime.status_message(message)
-
- def generic_done(self, result):
- if self.may_change_files and self.active_view() and self.active_view().file_name():
- if self.active_view().is_dirty():
- result = "WARNING: Current view is dirty.\n\n"
- else:
- # just asking the current file to be re-opened doesn't do anything
- print("reverting")
- position = self.active_view().viewport_position()
- self.active_view().run_command('revert')
- do_when(lambda: not self.active_view().is_loading(), lambda: self.active_view().set_viewport_position(position, False))
-
- if not result.strip():
- return
- self.panel(result)
-
- def _output_to_view(self, output_file, output, clear=False,
- syntax="Packages/Diff/Diff.tmLanguage"):
- output_file.set_syntax_file(syntax)
- if clear:
- output_file.run_command('edit_view', dict(command='replace', region=[0, self.output_view.size()], output=output))
- else:
- output_file.run_command('edit_view', dict(command='insert', output=output))
-
- def scratch(self, output, title=False, position=None, **kwargs):
- scratch_file = self.get_window().new_file()
- if title:
- scratch_file.set_name(title)
- scratch_file.set_scratch(True)
- self._output_to_view(scratch_file, output, **kwargs)
- scratch_file.set_read_only(True)
- if position:
- sublime.set_timeout(lambda: scratch_file.set_viewport_position(position), 0)
- return scratch_file
-
- def panel(self, output, **kwargs):
- if not hasattr(self, 'output_view'):
- self.output_view = self.get_window().get_output_panel("vcs")
- self.output_view.set_read_only(False)
- self._output_to_view(self.output_view, output, clear=True, **kwargs)
- self.output_view.set_read_only(True)
- self.get_window().run_command("show_panel", {"panel": "output.vcs"})
-
- def _active_file_name(self):
- view = self.active_view()
- if view and view.file_name() and len(view.file_name()) > 0:
- return view.file_name()
-
- def active_view(self):
- return self.view
-
- def get_window(self):
- if (hasattr(self, 'view') and hasattr(self.view, 'window')):
- return self.view.window()
- else:
- return sublime.active_window()
-
- def get_working_dir(self):
- return os.path.dirname(self._active_file_name())
-
- def is_enabled(self):
- file_name = self._active_file_name()
- if file_name and os.path.exists(file_name):
- return bool(get_vcs(self.get_working_dir()))
- return False
-
- def get_user_command(self, vcs_name):
- return dict(get_vcs_settings()).get(vcs_name, False)
-
-
-class DiffCommand(VcsCommand):
- """ Here you can define diff commands for your VCS
- method name pattern: %(vcs_name)s_diff_command
- """
-
- def run(self, edit):
- vcs = get_vcs(self.get_working_dir())
- filepath = self.view.file_name()
- filename = os.path.basename(filepath)
- max_file_size = self.settings.get('max_file_size', 1024) * 1024
- if not os.path.exists(filepath) or os.path.getsize(filepath) > max_file_size:
- # skip large files
- return
- get_command = getattr(self, '{0}_diff_command'.format(vcs['name']), None)
- if get_command:
- self.run_command(get_command(filename), self.diff_done)
-
- def diff_done(self, result):
- pass
-
- def git_diff_command(self, file_name):
- vcs_options = self.settings.get('vcs_options', {}).get('git') or ['--no-color', '--no-ext-diff']
- return [self.get_user_command('git') or 'git', 'diff'] + vcs_options + ['--', file_name]
-
- def svn_diff_command(self, file_name):
- params = [self.get_user_command('svn') or 'svn', 'diff']
- params.extend(self.settings.get('vcs_options', {}).get('svn', []))
-
- if '--internal-diff' not in params and self.settings.get('svn_use_internal_diff', True):
- params.append('--internal-diff')
-
- # if file starts with @, use `--revision HEAD` option
- # https://github.com/gornostal/Modific/issues/17
- if file_name.find('@') != -1:
- file_name += '@'
- params.extend(['--revision', 'HEAD'])
-
- params.append(file_name)
- return params
-
- def bzr_diff_command(self, file_name):
- vcs_options = self.settings.get('vcs_options', {}).get('bzr', [])
- return [self.get_user_command('bzr') or 'bzr', 'diff'] + vcs_options + [file_name]
-
- def hg_diff_command(self, file_name):
- vcs_options = self.settings.get('vcs_options', {}).get('hg', [])
- return [self.get_user_command('hg') or 'hg', 'diff'] + vcs_options + [file_name]
-
-
-class ShowDiffCommand(DiffCommand, sublime_plugin.TextCommand):
- def diff_done(self, result):
- if not result.strip():
- return
-
- file_name = re.findall(r'([^\\\/]+)$', self.view.file_name())
- self.scratch(result, title="Diff - " + file_name[0])
-
-
-class DiffParser(object):
- instance = None
-
- def __init__(self, diff):
- self.diff = diff
- self.chunks = None
- self.__class__.instance = self
-
- def _append_to_chunks(self, start, lines):
- self.chunks.append({
- "start": start,
- "end": start + len(lines),
- "lines": lines
- })
-
- def get_chunks(self):
- if self.chunks is None:
- self.chunks = []
- diff = self.diff.strip()
- if diff:
- re_header = re.compile(r'^@@[0-9\-, ]+\+(\d+)', re.S)
- current = None
- lines = []
- for line in diff.splitlines():
- # ignore lines with '\' at the beginning
- if line.startswith('\\'):
- continue
-
- matches = re.findall(re_header, line)
- if matches:
- if current is not None:
- self._append_to_chunks(current, lines)
- current = int(matches[0])
- lines = []
- elif current:
- lines.append(line)
- if current is not None and lines:
- self._append_to_chunks(current, lines)
-
- return self.chunks
-
- def get_lines_to_hl(self):
- inserted = []
- changed = []
- deleted = []
-
- for chunk in self.get_chunks():
- current = chunk['start']
- deleted_line = None
- for line in chunk['lines']:
- if line.startswith('-'):
- if (not deleted_line or deleted_line not in deleted):
- deleted.append(current)
- deleted_line = current
- elif line.startswith('+'):
- if deleted_line:
- deleted.pop()
- deleted_line = None
- changed.append(current)
- elif current - 1 in changed:
- changed.append(current)
- else:
- inserted.append(current)
- current += 1
- else:
- deleted_line = None
- current += 1
-
- return inserted, changed, deleted
-
- def get_original_part(self, line_num):
- """ returns a chunk of code that relates to the given line
- and was there before modifications
-
- return (lines list, start_line int, replace_lines int)
- """
-
- # for each chunk from diff:
- for chunk in self.get_chunks():
- # if line_num is within that chunk
- if chunk['start'] <= line_num <= chunk['end']:
- ret_lines = []
- current = chunk['start'] # line number that corresponds to current version of file
- first = None # number of the first line to change
- replace_lines = 0 # number of lines to change
- return_this_lines = False # flag shows whether we can return accumulated lines
- for line in chunk['lines']:
- if line.startswith('-') or line.startswith('+'):
- first = first or current
- if current == line_num:
- return_this_lines = True
- if line.startswith('-'):
- # if line starts with '-' we have previous version
- ret_lines.append(line[1:])
- else:
- # if line starts with '+' we only increment numbers
- replace_lines += 1
- current += 1
- elif return_this_lines:
- break
- else:
- # gap between modifications
- # reset our variables
- current += 1
- first = current
- replace_lines = 0
- ret_lines = []
- if return_this_lines:
- return ret_lines, first, replace_lines
-
- return None, None, None
-
-
-class HlChangesCommand(DiffCommand, sublime_plugin.TextCommand):
- def hl_lines(self, lines, hl_key):
- if (not len(lines) or not self.settings.get('highlight_changes')):
- self.view.erase_regions(hl_key)
- return
-
- icon = self.settings.get('region_icon') or 'modific'
- if icon == 'modific':
- if IS_ST3:
- icon = 'Packages/Modific/icons/' + hl_key + '.png'
- else:
- icon = '../Modific/icons/' + hl_key
- points = [self.view.text_point(l - 1, 0) for l in lines]
- regions = [sublime.Region(p, p) for p in points]
- self.view.add_regions(hl_key, regions, "markup.%s.diff" % hl_key,
- icon, sublime.HIDDEN | sublime.DRAW_EMPTY)
-
- def diff_done(self, diff):
- if diff and '@@' not in diff:
- # probably this is an error message
- # if print raise UnicodeEncodeError, try to encode string to utf-8 (issue #35)
- try:
- print(diff)
- except UnicodeEncodeError:
- print(diff.encode('utf-8'))
-
- diff_parser = DiffParser(diff)
- (inserted, changed, deleted) = diff_parser.get_lines_to_hl()
-
- if self.settings.get('debug'):
- print(inserted, changed, deleted)
- self.hl_lines(inserted, 'inserted')
- self.hl_lines(deleted, 'deleted')
- self.hl_lines(changed, 'changed')
-
-
-class ShowOriginalPartCommand(DiffCommand, sublime_plugin.TextCommand):
- def run(self, edit):
- diff_parser = DiffParser.instance
- if not diff_parser:
- return
-
- (row, col) = self.view.rowcol(self.view.sel()[0].begin())
- (lines, start, replace_lines) = diff_parser.get_original_part(row + 1)
- if lines is not None:
- self.panel(os.linesep.join(lines))
-
-
-class ReplaceModifiedPartCommand(DiffCommand, sublime_plugin.TextCommand):
- def run(self, edit):
- self.view.run_command('save')
-
- diff_parser = DiffParser.instance
- if not diff_parser:
- return
-
- (row, col) = self.view.rowcol(self.view.sel()[0].begin())
- (lines, current, replace_lines) = diff_parser.get_original_part(row + 1)
- if self.settings.get('debug'):
- print('replace', (lines, current, replace_lines))
- if lines is not None:
- begin = self.view.text_point(current - 1, 0)
- content = os.linesep.join(lines)
- if replace_lines:
- end = self.view.line(self.view.text_point(replace_lines + current - 2, 0)).end()
- region = sublime.Region(begin, end)
- if lines:
- self.view.run_command('edit_view', dict(command='replace', region=[region.begin(), region.end()], output=content))
- else:
- region = self.view.full_line(region)
- self.view.run_command('edit_view', dict(command='erase', region=[region.begin(), region.end()]))
- else:
- self.view.run_command('edit_view', dict(command='insert', begin=begin, output=content + os.linesep))
- self.view.run_command('save')
-
-
-class HlChangesBackground(sublime_plugin.EventListener):
- def on_load(self, view):
- view.run_command('hl_changes')
-
- def on_activated(self, view):
- view.run_command('hl_changes')
-
- def on_post_save(self, view):
- view.run_command('hl_changes')
-
-
-class JumpBetweenChangesCommand(DiffCommand, sublime_plugin.TextCommand):
- def run(self, edit, direction='next'):
- lines = self._get_lines()
- if not lines:
- return
-
- if direction == 'prev':
- lines.reverse()
-
- (current_line, col) = self.view.rowcol(self.view.sel()[0].begin())
- current_line += 1
- jump_to = None
- for line in lines:
- if direction == 'next' and current_line < line:
- jump_to = line
- break
- if direction == 'prev' and current_line > line:
- jump_to = line
- break
-
- if not jump_to:
- jump_to = lines[0]
-
- self.goto_line(edit, jump_to)
-
- def goto_line(self, edit, line):
- # Convert from 1 based to a 0 based line number
- line = int(line) - 1
-
- # Negative line numbers count from the end of the buffer
- if line < 0:
- lines, _ = self.view.rowcol(self.view.size())
- line = lines + line + 1
-
- pt = self.view.text_point(line, 0)
-
- self.view.sel().clear()
- self.view.sel().add(sublime.Region(pt))
-
- self.view.show(pt)
-
- def _get_lines(self):
- diff_parser = DiffParser.instance
- if not diff_parser:
- return
-
- (inserted, changed, deleted) = diff_parser.get_lines_to_hl()
- lines = list(set(inserted + changed + deleted))
- lines.sort()
-
- prev = None
- ret_lines = []
- for line in lines:
- if prev != line - 1:
- ret_lines.append(line)
- prev = line
-
- return ret_lines
-
-
-class UncommittedFilesCommand(VcsCommand, sublime_plugin.WindowCommand):
- def active_view(self):
- return self.window.active_view()
-
- def run(self):
- self.root, self.vcs = vcs_root(self.get_working_dir())
- status_command = getattr(self, '{0}_status_command'.format(self.vcs['name']), None)
- if status_command:
- self.run_command(status_command(), self.status_done, working_dir=self.root)
-
- def git_status_command(self):
- return [self.get_user_command('git') or 'git', 'status', '--porcelain']
-
- def svn_status_command(self):
- return [self.get_user_command('svn') or 'svn', 'status', '--quiet']
-
- def bzr_status_command(self):
- return [self.get_user_command('bzr') or 'bzr', 'status', '-S', '--no-pending', '-V']
-
- def hg_status_command(self):
- return [self.get_user_command('hg') or 'hg', 'status']
-
- def git_status_file(self, file_name):
- # first 2 characters are status codes, the third is a space
- return file_name[3:]
-
- def svn_status_file(self, file_name):
- return file_name[8:]
-
- def bzr_status_file(self, file_name):
- return file_name[4:]
-
- def hg_status_file(self, file_name):
- return file_name[2:]
-
- def status_done(self, result):
- self.results = list(filter(lambda x: len(x) > 0 and not x.lstrip().startswith('>'),
- result.rstrip().split('\n')))
- if len(self.results):
- self.show_status_list()
- else:
- sublime.status_message("Nothing to show")
-
- def show_status_list(self):
- self.get_window().show_quick_panel(self.results, self.panel_done,
- sublime.MONOSPACE_FONT)
-
- def panel_done(self, picked):
- if 0 > picked < len(self.results):
- return
- picked_file = self.results[picked]
- get_file = getattr(self, '{0}_status_file'.format(self.vcs['name']), None)
- if (get_file):
- self.open_file(get_file(picked_file))
-
- def open_file(self, picked_file):
- if os.path.isfile(os.path.join(self.root, picked_file)):
- self.window.open_file(os.path.join(self.root, picked_file))
- else:
- sublime.status_message("File doesn't exist")
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Modific/Modific.sublime-commands b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Modific/Modific.sublime-commands
deleted file mode 100644
index 6083ed5..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Modific/Modific.sublime-commands
+++ /dev/null
@@ -1,6 +0,0 @@
-[
- {
- "caption": "Modific: Show diff",
- "command": "show_diff"
- }
-]
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Modific/Modific.sublime-settings b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Modific/Modific.sublime-settings
deleted file mode 100644
index ae3bc00..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Modific/Modific.sublime-settings
+++ /dev/null
@@ -1,44 +0,0 @@
-// Modific default settings
-{
- // Highlight changes
- "highlight_changes": true,
-
- // Name of a region icon
- // Valid icon names are: modific, dot, circle, bookmark and cross
- // WARNING: if you set value different than 'modific',
- // you may experience issues with UI of Sublime.
- // See https://github.com/gornostal/Modific/issues/9
- "region_icon": "modific",
-
- // You can use your commands instead of plain "git" or "svn"
- // e.g. "/usr/bin/git" or "C:\bin\git.exe"
- "vcs": [
- ["git", "git"],
- ["svn", "svn"],
- ["bzr", "bzr"],
- ["hg" , "hg"]
- ],
-
- // default list of options for a diff command for a certain VCS
- "vcs_options": {
- "git": ["--no-color", "--no-ext-diff"]
- },
-
- //if you have some weird OS, that has non-unicode console
- //place its console encoding here
- "console_encoding" : "",
-
- // if true, plugin prints some debug information to the console window
- "debug": false,
-
- // set to false to disable automatic saving
- "autosave": true,
-
- // Turn this option on if you're using SVN 1.7 or higher
- // this instructs Subversion to use its built-in differencing engine
- // despite any external differencing mechanism that may be specified for use in the user's runtime configuration.
- "svn_use_internal_diff": false,
-
- // File size limit (in KB) for drawing icons on the gutter
- "max_file_size": 1024
-}
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Modific/README.md b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Modific/README.md
deleted file mode 100644
index d839923..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Modific/README.md
+++ /dev/null
@@ -1,91 +0,0 @@
-Modific
-=========
-
-Modific is a ST2(3) plugin for highlighting lines changed since the last commit (you know what I mean if you used Netbeans).
-
-For now it supports **Git**, **SVN**, **Bazaar** and **Mercurial**.
-
-
-Install
--------
-
-The easiest way to install is through **[Package Control](http://wbond.net/sublime\_packages/package\_control)**.
-
-Once you install Package Control, restart ST3 and bring up the Command Palette (`Ctrl+Shift+P` on Linux/Windows, `Cmd+Shift+P` on OS X). Select "Package Control: Install Package", wait while Package Control fetches the latest package list, then select *Modific* when the list appears. The advantage of using this method is that Package Control will automatically keep *Modific* up to date with the latest version.
-
-Or you can **download** the latest source from [GitHub](https://github.com/gornostal/Modific/zipball/master) and copy the *Modific* folder to your Sublime Text "Packages" directory.
-
-Or **clone** the repository to your Sublime Text "Packages" directory:
-
- git clone git://github.com/gornostal/Modific.git
-
-
-The "Packages" directory is located at:
-
-* OS X:
-
- ~/Library/Application Support/Sublime Text 2/Packages/
-
-* Linux:
-
- ~/.config/sublime-text-2/Packages/
-
-* Windows:
-
- %APPDATA%/Sublime Text 2/Packages/
-
-Please, make sure your VCS binaries is in the PATH (**especially if you are on Windows**).
-
-To do that on Windows, open `Control Panel -> System -> Advanced system settings -> Environment variables -> System Variables`, find PATH, click "Edit" and append `;C:\path\to\VCS\binaries` for every VCS you will use (or make sure it's already there).
-
-Features / Usage
-----------------
-
-**Highlight changes** *(automatically: on save or when window gets focus)*
-[![Highlight changes](http://i.imgur.com/DX8TeJTl.jpg)](http://i.imgur.com/DX8TeJT.jpg)
-
-**Show diff** `Ctrl+Alt+D` on Linux/Windows and OS X
-[![Show diff](http://i.imgur.com/csCw7l.jpg)](http://i.imgur.com/csCw7.jpg)
-
-**Preview of the commited code for current line** `Ctrl+Alt+C` on Linux/Windows, `Ctlr+Super+C` on OS X
-[![Preview](http://i.imgur.com/siVOXl.jpg)](http://i.imgur.com/siVOX.jpg)
-
-**Revert modification** `Ctrl+Alt+R` on Linux/Windows, `Ctlr+Super+R` on OS X
-
-This command reverts modifications if your cursor stays on modified line (or if on group of lines, then whole group will be reverted)
-
-**View uncommitted files in a quick panel** `Ctrl+Alt+U` on Linux/Windows, `Ctlr+Super+U` on OS X
-[![Preview](http://i.imgur.com/sldHNl.jpg)](http://i.imgur.com/sldHN.jpg)
-
-**Go through changed lines** `Ctrl+Shift+Page Up(Down)`
-
-For those who expected to see a clone of Netbeans feature - unfortunately, with existing Sublime Text API that is impossible :(
-
-[Discussion on the forum](http://www.sublimetext.com/forum/viewtopic.php?f=5&t=7468)
-
-Configuring
------------
-
-Open `Prefrences -> Package Settings -> Modific -> Settings - Default` and look for available settings.
-
-If you want to change something, don't do it in this file. Open `Preferences -> Package Settings -> Modific -> Settings - User` and put there your configuration.
-
-You can configure is a type of icon (dot, circle or bookmark) and path for your VCS binaries (or leave them as is, if you have them in your PATH). It's also possible to set priority for VCS used (when you have more than one simultaneously) by reordering their definitions.
-
-If some sacred punishment has been bestowed upon you, and you have no other choice but to use OS, where console has non-UTF8 encoding, you can set console_encoding parameter to the name of your beloved encoding. This parameter is specifically designed for Windows XP users, who have their git repositories in folders with cyrillic path. Since russian XP uses CP1251 as default encoding (including console), VCS diff commands will be encoded appropriately, when using this parameter.
-
-If you use different than the default theme, you can customize colors of bullets on the gutter by adding [this](https://gist.github.com/3692073) chunk of code to your theme.
-
-### SVN users
-If you are using SVN 1.7 you may want to turn on option `svn_use_internal_diff`.
-This instructs Subversion to use its built-in differencing engine
-despite any external differencing mechanism that may be specified for use in the user's runtime configuration.
-
-Thanks to
----------
-
-@beefsack for purchasing a license
-
-License
--------
-Released under the [WTFPLv2](http://sam.zoy.org/wtfpl/COPYING).
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Modific/icons/changed.png b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Modific/icons/changed.png
deleted file mode 100644
index 677aecf..0000000
Binary files a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Modific/icons/changed.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Modific/icons/deleted.png b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Modific/icons/deleted.png
deleted file mode 100644
index 52e4cda..0000000
Binary files a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Modific/icons/deleted.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Modific/icons/inserted.png b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Modific/icons/inserted.png
deleted file mode 100644
index 64a5942..0000000
Binary files a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Modific/icons/inserted.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Modific/package-metadata.json b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Modific/package-metadata.json
deleted file mode 100644
index 1afaad4..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/Modific/package-metadata.json
+++ /dev/null
@@ -1 +0,0 @@
-{"url": "https://github.com/gornostal/Modific", "version": "2013.08.23.12.05.13", "description": "Highlight lines changed since the last commit (supports Git, SVN, Bazaar and Mercurial) / ST2(3) plugin"}
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/SideBarGit/.gitignore b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/SideBarGit/.gitignore
deleted file mode 100644
index 00c4ea8..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/SideBarGit/.gitignore
+++ /dev/null
@@ -1,4 +0,0 @@
-*.pyc
-*.cache
-*.sublime-project
-package-metadata.json
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/SideBarGit/Commands.sublime-commands b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/SideBarGit/Commands.sublime-commands
deleted file mode 100644
index 9f4dda4..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/SideBarGit/Commands.sublime-commands
+++ /dev/null
@@ -1,6 +0,0 @@
-[
- {
- "caption": "File: Refresh",
- "command": "side_bar_git_refresh_tab_contents_by_running_command_again"
- }
-]
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/SideBarGit/Context.sublime-menu b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/SideBarGit/Context.sublime-menu
deleted file mode 100644
index 04f01c4..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/SideBarGit/Context.sublime-menu
+++ /dev/null
@@ -1,177 +0,0 @@
-[
- { "caption": "-" , "id":"side-bar-end-separator"},
- {
- "caption": "Git ", "id":"side-bar-git",
- "children":
- [
- { "caption": "Add & Commit…", "command": "side_bar_git_add_commit", "args": {"paths": []} },
- { "caption": "Add & Commit & Push…", "command": "side_bar_git_add_commit_push", "args": {"paths": []} },
- { "caption": "-"},
-
- { "caption": "Commit…", "command": "side_bar_git_commit", "args": {"paths": []} },
- { "caption": "Commit Undo", "command": "side_bar_git_commit_undo", "args": {"paths": []} },
- { "caption": "-"},
-
- { "caption": "Commit Amend", "command": "side_bar_git_commit_amend", "args": {"paths": []} },
- { "caption": "Commit All…", "command": "side_bar_git_commit_all", "args": {"paths": []} },
- { "caption": "-"},
-
- { "caption": "Status", "command": "side_bar_git_status", "args": {"paths": []} },
- { "caption": "-"},
- {
- "caption": "Diff", "id":"side-bar-git-diff",
- "children":
- [
- { "caption": "all changes since the last commit", "command": "side_bar_git_diff_all_changes_since_last_commit", "args": {"paths": []} },
- { "caption": "all changes since the last commit ( ignore whitespace )", "command": "side_bar_git_diff_all_changes_since_last_commit_ignore_white_space", "args": {"paths": []} },
- { "caption": "-"},
- { "caption": "changes that have not been staged", "command": "side_bar_git_diff_changes_not_staged", "args": {"paths": []} },
- { "caption": "changes that are staged but not committed", "command": "side_bar_git_diff_changes_staged_not_commited", "args": {"paths": []} },
- { "caption": "between the index and last commit", "command": "side_bar_git_diff_between_index_and_last_commit", "args": {"paths": []} },
- { "caption": "-"},
- { "caption": "between remote and last local commit (origin/master..)", "command": "side_bar_git_diff_between_remote_and_last_local_commit", "args": {"paths": []} },
- { "caption": "between last local commit and remote (..origin/master)", "command": "side_bar_git_diff_between_last_local_commit_and_remote", "args": {"paths": []} },
- { "caption": "-"},
- { "caption": "between the two latest tags", "command": "xxxx", "args": {"paths": []} }
- ]
- },
- {
- "caption": "Difftool", "id":"side-bar-git-difftool",
- "children":
- [
- { "caption": "all changes since the last commit", "command": "side_bar_git_difftool_all_changes_since_last_commit", "args": {"paths": []} },
- { "caption": "-"},
- { "caption": "changes that have not been staged", "command": "side_bar_git_difftool_changes_not_staged", "args": {"paths": []} },
- { "caption": "changes that are staged but not committed", "command": "side_bar_git_difftool_changes_staged_not_commited", "args": {"paths": []} },
- { "caption": "between the index and last commit", "command": "side_bar_git_difftool_between_index_and_last_commit", "args": {"paths": []} },
- { "caption": "-"},
- { "caption": "between remote and last local commit (origin/master..)", "command": "side_bar_git_difftool_between_remote_and_last_local_commit", "args": {"paths": []} },
- { "caption": "between last local commit and remote (..origin/master)", "command": "side_bar_git_difftool_between_last_local_commit_and_remote", "args": {"paths": []} },
- { "caption": "-"},
- { "caption": "between the two latest tags", "command": "xxxx", "args": {"paths": []} }
- ]
- },
- { "caption": "-"},
- {
- "caption": "Log", "id":"side-bar-git-log",
- "children":
- [
- { "caption": "short summary of changes last 30", "command": "side_bar_git_log_stat_short_latest", "args": {"paths": []} },
- { "caption": "short summary of changes full", "command": "side_bar_git_log_stat_short_full", "args": {"paths": []} },
- { "caption": "-"},
- { "caption": "summary of changes last 30", "command": "side_bar_git_log_stat_latest", "args": {"paths": []} },
- { "caption": "summary of changes full", "command": "side_bar_git_log_stat_full", "args": {"paths": []} },
- { "caption": "-"},
- { "caption": "list of changes last 50", "command": "side_bar_git_log_stat_list_latest", "args": {"paths": []} },
- { "caption": "list of changes last 50 with commit", "command": "side_bar_git_log_stat_list_commit_latest", "args": {"paths": []} },
- { "caption": "-"},
- { "caption": "diffs of changes last 30", "command": "side_bar_git_log_extended_latest", "args": {"paths": []} },
- { "caption": "diffs of changes full", "command": "side_bar_git_log_extended_full", "args": {"paths": []} },
- { "caption": "-"},
- { "caption": "summary of changes since latest tag", "command": "xxxx", "args": {"paths": []} },
- { "caption": "summary of changes since latest push", "command": "side_bar_git_log_since_latest_push", "args": {"paths": []} },
- { "caption": "-"},
- { "caption": "between the two latest tags", "command": "xxxx", "args": {"paths": []} }
- ]
- },
- { "caption": "Reflog", "command": "side_bar_git_reflog", "args": {"paths": []} },
- { "caption": "-"},
- { "caption": "Blame", "command": "side_bar_git_blame", "args": {"paths": []} },
- { "caption": "-"},
- {
- "caption": "Tags", "id":"side-bar-git-tags",
- "children":
- [
- { "caption": "Auto-Tag", "command": "xxxx", "args": {"paths": []} },
- { "caption": "-"},
- { "caption": "Add…", "command": "xxxx", "args": {"paths": []} },
- { "caption": "Remove…", "command": "xxxx", "args": {"paths": []} },
- { "caption": "-"},
- { "caption": "List", "command": "xxxx", "args": {"paths": []} }
- ]
- },
- { "caption": "-"},
- {
- "caption": "Revert", "id":"side-bar-git-revert",
- "children":
- [
- { "caption": "discard changes to tracked", "command": "side_bar_git_revert_tracked", "args": {"paths": []} },
- { "caption": "-"},
- { "caption": "discard changes to tracked, clean untracked", "command": "side_bar_git_revert_tracked_clean_untracked", "args": {"paths": []} },
- { "caption": "discard changes to tracked, clean untracked, unstage", "command": "side_bar_git_revert_tracked_clean_untracked_unstage", "args": {"paths": []} },
- { "caption": "discard changes to tracked, unstage, clean untracked", "command": "side_bar_git_revert_tracked_unstage_clean_untracked", "args": {"paths": []} },
- { "caption": "-"},
- { "caption": "unstage", "command": "side_bar_git_revert_unstage", "args": {"paths": []} }
- ]
- },
- { "caption": "-"},
-
- {
- "caption": "Branch",
- "children":
- [
- { "caption": "new from current and switch to…", "command": "side_bar_git_branch_new_from_current", "args": {"paths": []} },
- { "caption": "new from master and switch to…", "command": "side_bar_git_branch_new_from_master", "args": {"paths": []} },
- { "caption": "-"},
- { "caption": "new from cleaned current and switch to…", "command": "side_bar_git_branch_new_from_clean_current", "args": {"paths": []} },
- { "caption": "new from cleaned master and switch to…", "command": "side_bar_git_branch_new_from_clean_master", "args": {"paths": []} },
- { "caption": "-"},
- { "caption": "switch to master", "command": "side_bar_git_branch_switch_to_master", "args": {"paths": []} },
- { "caption": "switch to…", "command": "side_bar_git_branch_switch_to", "args": {"paths": []} },
- { "caption": "-"},
- { "caption": "rebase current into master", "command": "side_bar_git_rebase_current_into_master", "args": {"paths": []} },
- { "caption": "-"},
- { "caption": "merge changes to current from…", "command": "side_bar_git_merge_to_current_from", "args": {"paths": []} },
- { "caption": "-"},
- { "caption": "delete…", "command": "side_bar_git_branch_delete", "args": {"paths": []} },
- { "caption": "delete even if unmerged (force deletion)…","command": "side_bar_git_branch_delete_force", "args": {"paths": []} }
- ]
- },
- { "caption": "Checkout to…", "command": "side_bar_git_checkout_to", "args": {"paths": []} },
- { "caption": "Checkout repository to…", "command": "side_bar_git_checkout_repository_to", "args": {"paths": []} },
- { "caption": "-"},
- {
- "caption": "Push, Pull, Fetch", "id":"side-bar-git-pull-push-fetch",
- "children":
- [
- { "caption": "Push", "command": "side_bar_git_push", "args": {"paths": []} },
- { "caption": "Push All Branches", "command": "side_bar_git_push_all_branches", "args": {"paths": []} },
- { "caption": "Push, Push Tags", "command": "side_bar_git_push_and_push_tags", "args": {"paths": []} },
- { "caption": "Push Tags", "command": "side_bar_git_push_tags", "args": {"paths": []} },
- { "caption": "Push with options…", "command": "side_bar_git_push_with_options", "args": {"paths": []} },
- { "caption": "-"},
-
- { "caption": "Pull", "command": "side_bar_git_pull", "args": {"paths": []} },
- { "caption": "Pull with options…", "command": "side_bar_git_pull_with_options", "args": {"paths": []} },
- { "caption": "-"},
-
- { "caption": "Fetch", "command": "side_bar_git_fetch", "args": {"paths": []} },
- { "caption": "Fetch with options…", "command": "side_bar_git_fetch_with_options", "args": {"paths": []} },
- { "caption": "-"},
- { "caption": "Remote add…", "command": "side_bar_git_remote_add", "args": {"paths": []} }
- ]
- },
-
- { "caption": "-"},
-
- { "caption": "Clone…", "command": "side_bar_git_clone", "args": {"paths": []} },
- { "caption": "Init", "command": "side_bar_git_init", "args": {"paths": []} },
- { "caption": "-"},
-
- { "caption": "Add", "command": "side_bar_git_add", "args": {"paths": []} },
- { "caption": "Remove", "command": "side_bar_git_remove", "args": {"paths": []} },
- { "caption": "Remove Keep Local", "command": "side_bar_git_remove_keep_local", "args": {"paths": []} },
- { "caption": "-"},
-
- { "caption": "Add to Git Ignore", "command": "side_bar_git_ignore_add", "args": {"paths": []} },
- { "caption": "Open Git Ignore", "command": "side_bar_git_ignore_open", "args": {"paths": []} },
- { "caption": "-"},
-
- { "caption": "Git GUI", "command": "side_bar_git_gui", "args": {"paths": []} },
- { "caption": "Gitk", "command": "side_bar_git_gitk", "args": {"paths": []} },
- { "caption": "-"},
- { "caption": "Liberal Git Command", "command": "side_bar_git_liberal", "args": {"paths": []} }
- ]
- },
- { "caption": "-", "id": "side-bar-end-separator" }
-]
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/SideBarGit/Default (Linux).sublime-keymap b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/SideBarGit/Default (Linux).sublime-keymap
deleted file mode 100644
index fb627c1..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/SideBarGit/Default (Linux).sublime-keymap
+++ /dev/null
@@ -1,3 +0,0 @@
-[
- { "keys": ["f5"], "command": "side_bar_git_refresh_tab_contents_by_running_command_again" }
-]
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/SideBarGit/Default (OSX).sublime-keymap b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/SideBarGit/Default (OSX).sublime-keymap
deleted file mode 100644
index fb627c1..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/SideBarGit/Default (OSX).sublime-keymap
+++ /dev/null
@@ -1,3 +0,0 @@
-[
- { "keys": ["f5"], "command": "side_bar_git_refresh_tab_contents_by_running_command_again" }
-]
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/SideBarGit/Default (Windows).sublime-keymap b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/SideBarGit/Default (Windows).sublime-keymap
deleted file mode 100644
index fb627c1..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/SideBarGit/Default (Windows).sublime-keymap
+++ /dev/null
@@ -1,3 +0,0 @@
-[
- { "keys": ["f5"], "command": "side_bar_git_refresh_tab_contents_by_running_command_again" }
-]
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/SideBarGit/Main.sublime-menu b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/SideBarGit/Main.sublime-menu
deleted file mode 100644
index b61ab49..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/SideBarGit/Main.sublime-menu
+++ /dev/null
@@ -1,39 +0,0 @@
-[
- {
- "caption": "Preferences",
- "mnemonic": "n",
- "id": "preferences",
- "children":
- [
- {
- "caption": "Package Settings",
- "mnemonic": "P",
- "id": "package-settings",
- "children":
- [
- {
- "caption": "Side Bar Git",
- "children":
- [
- {
- "command": "open_file", "args":
- {
- "file": "${packages}/SideBarGit/SideBarGit.sublime-settings"
- },
- "caption": "Settings – Default"
- },
- {
- "command": "open_file", "args":
- {
- "file": "${packages}/User/SideBarGit.sublime-settings"
- },
- "caption": "Settings – User"
- },
- { "caption": "-" }
- ]
- }
- ]
- }
- ]
- }
-]
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/SideBarGit/Side Bar.sublime-menu b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/SideBarGit/Side Bar.sublime-menu
deleted file mode 100644
index 04f01c4..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/SideBarGit/Side Bar.sublime-menu
+++ /dev/null
@@ -1,177 +0,0 @@
-[
- { "caption": "-" , "id":"side-bar-end-separator"},
- {
- "caption": "Git ", "id":"side-bar-git",
- "children":
- [
- { "caption": "Add & Commit…", "command": "side_bar_git_add_commit", "args": {"paths": []} },
- { "caption": "Add & Commit & Push…", "command": "side_bar_git_add_commit_push", "args": {"paths": []} },
- { "caption": "-"},
-
- { "caption": "Commit…", "command": "side_bar_git_commit", "args": {"paths": []} },
- { "caption": "Commit Undo", "command": "side_bar_git_commit_undo", "args": {"paths": []} },
- { "caption": "-"},
-
- { "caption": "Commit Amend", "command": "side_bar_git_commit_amend", "args": {"paths": []} },
- { "caption": "Commit All…", "command": "side_bar_git_commit_all", "args": {"paths": []} },
- { "caption": "-"},
-
- { "caption": "Status", "command": "side_bar_git_status", "args": {"paths": []} },
- { "caption": "-"},
- {
- "caption": "Diff", "id":"side-bar-git-diff",
- "children":
- [
- { "caption": "all changes since the last commit", "command": "side_bar_git_diff_all_changes_since_last_commit", "args": {"paths": []} },
- { "caption": "all changes since the last commit ( ignore whitespace )", "command": "side_bar_git_diff_all_changes_since_last_commit_ignore_white_space", "args": {"paths": []} },
- { "caption": "-"},
- { "caption": "changes that have not been staged", "command": "side_bar_git_diff_changes_not_staged", "args": {"paths": []} },
- { "caption": "changes that are staged but not committed", "command": "side_bar_git_diff_changes_staged_not_commited", "args": {"paths": []} },
- { "caption": "between the index and last commit", "command": "side_bar_git_diff_between_index_and_last_commit", "args": {"paths": []} },
- { "caption": "-"},
- { "caption": "between remote and last local commit (origin/master..)", "command": "side_bar_git_diff_between_remote_and_last_local_commit", "args": {"paths": []} },
- { "caption": "between last local commit and remote (..origin/master)", "command": "side_bar_git_diff_between_last_local_commit_and_remote", "args": {"paths": []} },
- { "caption": "-"},
- { "caption": "between the two latest tags", "command": "xxxx", "args": {"paths": []} }
- ]
- },
- {
- "caption": "Difftool", "id":"side-bar-git-difftool",
- "children":
- [
- { "caption": "all changes since the last commit", "command": "side_bar_git_difftool_all_changes_since_last_commit", "args": {"paths": []} },
- { "caption": "-"},
- { "caption": "changes that have not been staged", "command": "side_bar_git_difftool_changes_not_staged", "args": {"paths": []} },
- { "caption": "changes that are staged but not committed", "command": "side_bar_git_difftool_changes_staged_not_commited", "args": {"paths": []} },
- { "caption": "between the index and last commit", "command": "side_bar_git_difftool_between_index_and_last_commit", "args": {"paths": []} },
- { "caption": "-"},
- { "caption": "between remote and last local commit (origin/master..)", "command": "side_bar_git_difftool_between_remote_and_last_local_commit", "args": {"paths": []} },
- { "caption": "between last local commit and remote (..origin/master)", "command": "side_bar_git_difftool_between_last_local_commit_and_remote", "args": {"paths": []} },
- { "caption": "-"},
- { "caption": "between the two latest tags", "command": "xxxx", "args": {"paths": []} }
- ]
- },
- { "caption": "-"},
- {
- "caption": "Log", "id":"side-bar-git-log",
- "children":
- [
- { "caption": "short summary of changes last 30", "command": "side_bar_git_log_stat_short_latest", "args": {"paths": []} },
- { "caption": "short summary of changes full", "command": "side_bar_git_log_stat_short_full", "args": {"paths": []} },
- { "caption": "-"},
- { "caption": "summary of changes last 30", "command": "side_bar_git_log_stat_latest", "args": {"paths": []} },
- { "caption": "summary of changes full", "command": "side_bar_git_log_stat_full", "args": {"paths": []} },
- { "caption": "-"},
- { "caption": "list of changes last 50", "command": "side_bar_git_log_stat_list_latest", "args": {"paths": []} },
- { "caption": "list of changes last 50 with commit", "command": "side_bar_git_log_stat_list_commit_latest", "args": {"paths": []} },
- { "caption": "-"},
- { "caption": "diffs of changes last 30", "command": "side_bar_git_log_extended_latest", "args": {"paths": []} },
- { "caption": "diffs of changes full", "command": "side_bar_git_log_extended_full", "args": {"paths": []} },
- { "caption": "-"},
- { "caption": "summary of changes since latest tag", "command": "xxxx", "args": {"paths": []} },
- { "caption": "summary of changes since latest push", "command": "side_bar_git_log_since_latest_push", "args": {"paths": []} },
- { "caption": "-"},
- { "caption": "between the two latest tags", "command": "xxxx", "args": {"paths": []} }
- ]
- },
- { "caption": "Reflog", "command": "side_bar_git_reflog", "args": {"paths": []} },
- { "caption": "-"},
- { "caption": "Blame", "command": "side_bar_git_blame", "args": {"paths": []} },
- { "caption": "-"},
- {
- "caption": "Tags", "id":"side-bar-git-tags",
- "children":
- [
- { "caption": "Auto-Tag", "command": "xxxx", "args": {"paths": []} },
- { "caption": "-"},
- { "caption": "Add…", "command": "xxxx", "args": {"paths": []} },
- { "caption": "Remove…", "command": "xxxx", "args": {"paths": []} },
- { "caption": "-"},
- { "caption": "List", "command": "xxxx", "args": {"paths": []} }
- ]
- },
- { "caption": "-"},
- {
- "caption": "Revert", "id":"side-bar-git-revert",
- "children":
- [
- { "caption": "discard changes to tracked", "command": "side_bar_git_revert_tracked", "args": {"paths": []} },
- { "caption": "-"},
- { "caption": "discard changes to tracked, clean untracked", "command": "side_bar_git_revert_tracked_clean_untracked", "args": {"paths": []} },
- { "caption": "discard changes to tracked, clean untracked, unstage", "command": "side_bar_git_revert_tracked_clean_untracked_unstage", "args": {"paths": []} },
- { "caption": "discard changes to tracked, unstage, clean untracked", "command": "side_bar_git_revert_tracked_unstage_clean_untracked", "args": {"paths": []} },
- { "caption": "-"},
- { "caption": "unstage", "command": "side_bar_git_revert_unstage", "args": {"paths": []} }
- ]
- },
- { "caption": "-"},
-
- {
- "caption": "Branch",
- "children":
- [
- { "caption": "new from current and switch to…", "command": "side_bar_git_branch_new_from_current", "args": {"paths": []} },
- { "caption": "new from master and switch to…", "command": "side_bar_git_branch_new_from_master", "args": {"paths": []} },
- { "caption": "-"},
- { "caption": "new from cleaned current and switch to…", "command": "side_bar_git_branch_new_from_clean_current", "args": {"paths": []} },
- { "caption": "new from cleaned master and switch to…", "command": "side_bar_git_branch_new_from_clean_master", "args": {"paths": []} },
- { "caption": "-"},
- { "caption": "switch to master", "command": "side_bar_git_branch_switch_to_master", "args": {"paths": []} },
- { "caption": "switch to…", "command": "side_bar_git_branch_switch_to", "args": {"paths": []} },
- { "caption": "-"},
- { "caption": "rebase current into master", "command": "side_bar_git_rebase_current_into_master", "args": {"paths": []} },
- { "caption": "-"},
- { "caption": "merge changes to current from…", "command": "side_bar_git_merge_to_current_from", "args": {"paths": []} },
- { "caption": "-"},
- { "caption": "delete…", "command": "side_bar_git_branch_delete", "args": {"paths": []} },
- { "caption": "delete even if unmerged (force deletion)…","command": "side_bar_git_branch_delete_force", "args": {"paths": []} }
- ]
- },
- { "caption": "Checkout to…", "command": "side_bar_git_checkout_to", "args": {"paths": []} },
- { "caption": "Checkout repository to…", "command": "side_bar_git_checkout_repository_to", "args": {"paths": []} },
- { "caption": "-"},
- {
- "caption": "Push, Pull, Fetch", "id":"side-bar-git-pull-push-fetch",
- "children":
- [
- { "caption": "Push", "command": "side_bar_git_push", "args": {"paths": []} },
- { "caption": "Push All Branches", "command": "side_bar_git_push_all_branches", "args": {"paths": []} },
- { "caption": "Push, Push Tags", "command": "side_bar_git_push_and_push_tags", "args": {"paths": []} },
- { "caption": "Push Tags", "command": "side_bar_git_push_tags", "args": {"paths": []} },
- { "caption": "Push with options…", "command": "side_bar_git_push_with_options", "args": {"paths": []} },
- { "caption": "-"},
-
- { "caption": "Pull", "command": "side_bar_git_pull", "args": {"paths": []} },
- { "caption": "Pull with options…", "command": "side_bar_git_pull_with_options", "args": {"paths": []} },
- { "caption": "-"},
-
- { "caption": "Fetch", "command": "side_bar_git_fetch", "args": {"paths": []} },
- { "caption": "Fetch with options…", "command": "side_bar_git_fetch_with_options", "args": {"paths": []} },
- { "caption": "-"},
- { "caption": "Remote add…", "command": "side_bar_git_remote_add", "args": {"paths": []} }
- ]
- },
-
- { "caption": "-"},
-
- { "caption": "Clone…", "command": "side_bar_git_clone", "args": {"paths": []} },
- { "caption": "Init", "command": "side_bar_git_init", "args": {"paths": []} },
- { "caption": "-"},
-
- { "caption": "Add", "command": "side_bar_git_add", "args": {"paths": []} },
- { "caption": "Remove", "command": "side_bar_git_remove", "args": {"paths": []} },
- { "caption": "Remove Keep Local", "command": "side_bar_git_remove_keep_local", "args": {"paths": []} },
- { "caption": "-"},
-
- { "caption": "Add to Git Ignore", "command": "side_bar_git_ignore_add", "args": {"paths": []} },
- { "caption": "Open Git Ignore", "command": "side_bar_git_ignore_open", "args": {"paths": []} },
- { "caption": "-"},
-
- { "caption": "Git GUI", "command": "side_bar_git_gui", "args": {"paths": []} },
- { "caption": "Gitk", "command": "side_bar_git_gitk", "args": {"paths": []} },
- { "caption": "-"},
- { "caption": "Liberal Git Command", "command": "side_bar_git_liberal", "args": {"paths": []} }
- ]
- },
- { "caption": "-", "id": "side-bar-end-separator" }
-]
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/SideBarGit/SideBarGit.sublime-settings b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/SideBarGit/SideBarGit.sublime-settings
deleted file mode 100644
index 68a3eb3..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/SideBarGit/SideBarGit.sublime-settings
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "statusbar_branch" : true,
- "path_to_git_unixes":"" //example: /usr/local/git/bin/git
-}
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/SideBarGit/SideBarGitCommands.py b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/SideBarGit/SideBarGitCommands.py
deleted file mode 100644
index 8ad9efe..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/SideBarGit/SideBarGitCommands.py
+++ /dev/null
@@ -1,1328 +0,0 @@
-# coding=utf8
-import sublime_plugin, sublime
-import os
-import re
-
-from sidebar.SideBarSelection import SideBarSelection
-from sidebar.SideBarGit import SideBarGit
-
-try:
- from BufferScroll import BufferScrollAPI
-except:
- BufferScrollAPI = False
-
-class Object():
- pass
-
-#run last command again on a focused tab when pressing F5
-
-class SideBarGitRefreshTabContentsByRunningCommandAgain(sublime_plugin.WindowCommand):
- def run(self):
- window = sublime.active_window()
- if not window:
- return
- view = window.active_view()
- if view is None:
- return
- if view.settings().has('SideBarGitIsASideBarGitTab'):
- SideBarGit().run(
- [],
- view.settings().get('SideBarGitModal'),
- view.settings().get('SideBarGitBackground'),
- view,
- view.settings().get('SideBarGitCommand'),
- view.settings().get('SideBarGitItem'),
- view.settings().get('SideBarGitToStatusBar'),
- view.settings().get('SideBarGitTitle'),
- view.settings().get('SideBarGitNoResults'),
- view.settings().get('SideBarGitSyntaxFile')
- )
- elif view.file_name():
- if BufferScrollAPI:
- BufferScrollAPI.save(view, 'sidebar-git');
- view.run_command("revert")
- if BufferScrollAPI:
- BufferScrollAPI.restore(view, 'sidebar-git');
-
- def is_enabled(self):
- window = sublime.active_window()
- if not window:
- return False
- view = window.active_view()
- if view is None:
- return False
- if view.settings().has('SideBarGitIsASideBarGitTab') or view.file_name():
- return True
-
-
-def closed_affected_items(items):
- closed_items = []
- for item in items:
- if not item.isDirectory():
- closed_items += item.close_associated_buffers()
- return closed_items
-
-def reopen_affected_items(closed_items):
- for item in closed_items:
- file_name, window, view_index = item
- if window and os.path.exists(file_name):
- view = window.open_file(file_name)
- window.set_view_index(view, view_index[0], view_index[1])
-#Following code for selected files or folders
-
-class SideBarGitDiffAllChangesSinceLastCommitCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- for item in SideBarSelection(paths).getSelectedItems():
- object = Object()
- object.item = item
- object.command = ['git', 'diff', 'HEAD', '--no-color', '--', item.forCwdSystemName()]
- object.title = 'Diff: '+item.name()+'.diff'
- object.no_results = 'No differences to show'
- object.syntax_file = 'Packages/Diff/Diff.tmLanguage'
- object.word_wrap = False
- SideBarGit().run(object)
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarGitDiffAllChangesSinceLastCommitIgnoreWhiteSpaceCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- for item in SideBarSelection(paths).getSelectedItems():
- object = Object()
- object.item = item
- object.command = ['git', 'diff', 'HEAD', '--no-color', '-w', '--', item.forCwdSystemName()]
- object.title = 'Diff: '+item.name()+'.diff'
- object.no_results = 'No differences to show'
- object.syntax_file = 'Packages/Diff/Diff.tmLanguage'
- object.word_wrap = False
- SideBarGit().run(object)
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarGitDiffChangesNotStagedCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- for item in SideBarSelection(paths).getSelectedItems():
- object = Object()
- object.item = item
- object.command = ['git', 'diff', '--no-color', '--', item.forCwdSystemName()]
- object.title = 'Diff: '+item.name()+'.diff'
- object.no_results = 'No differences to show'
- object.syntax_file = 'Packages/Diff/Diff.tmLanguage'
- object.word_wrap = False
- SideBarGit().run(object)
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarGitDiffChangesStagedNotCommitedCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- for item in SideBarSelection(paths).getSelectedItems():
- object = Object()
- object.item = item
- object.command = ['git', 'diff', '--no-color', '--staged', '--', item.forCwdSystemName()]
- object.title = 'Diff: '+item.name()+'.diff'
- object.no_results = 'No differences to show'
- object.syntax_file = 'Packages/Diff/Diff.tmLanguage'
- object.word_wrap = False
- SideBarGit().run(object)
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarGitDiffBetweenIndexAndLastCommitCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- for item in SideBarSelection(paths).getSelectedItems():
- object = Object()
- object.item = item
- object.command = ['git', 'diff', '--no-color', '--cached', '--', item.forCwdSystemName()]
- object.title = 'Diff: '+item.name()+'.diff'
- object.no_results = 'No differences to show'
- object.syntax_file = 'Packages/Diff/Diff.tmLanguage'
- object.word_wrap = False
- SideBarGit().run(object)
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarGitDiffBetweenRemoteAndLastLocalCommitCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- for item in SideBarSelection(paths).getSelectedItems():
- object = Object()
- object.item = item
- object.command = ['git', 'diff', '--no-color', 'origin/master..', '--', item.forCwdSystemName()]
- object.title = 'Diff: '+item.name()+'.diff'
- object.no_results = 'No differences to show'
- object.syntax_file = 'Packages/Diff/Diff.tmLanguage'
- object.word_wrap = False
- SideBarGit().run(object)
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarGitDiffBetweenLastLocalCommitAndRemoteCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- for item in SideBarSelection(paths).getSelectedItems():
- object = Object()
- object.item = item
- object.command = ['git', 'diff', '--no-color', '..origin/master', '--', item.forCwdSystemName()]
- object.title = 'Diff: '+item.name()+'.diff'
- object.no_results = 'No differences to show'
- object.syntax_file = 'Packages/Diff/Diff.tmLanguage'
- object.word_wrap = False
- SideBarGit().run(object)
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarGitDifftoolAllChangesSinceLastCommitCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- for item in SideBarSelection(paths).getSelectedItems():
- object = Object()
- object.item = item
- object.command = ['git', 'difftool', 'HEAD', '--', item.forCwdSystemName()]
- SideBarGit().run(object, background=True)
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarGitDifftoolChangesNotStagedCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- for item in SideBarSelection(paths).getSelectedItems():
- object = Object()
- object.item = item
- object.command = ['git', 'difftool', '--', item.forCwdSystemName()]
- SideBarGit().run(object, background=True)
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarGitDifftoolChangesStagedNotCommitedCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- for item in SideBarSelection(paths).getSelectedItems():
- object = Object()
- object.item = item
- object.command = ['git', 'difftool', '--staged', '--', item.forCwdSystemName()]
- SideBarGit().run(object, background=True)
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarGitDifftoolBetweenIndexAndLastCommitCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- for item in SideBarSelection(paths).getSelectedItems():
- object = Object()
- object.item = item
- object.command = ['git', 'difftool', '--cached', '--', item.forCwdSystemName()]
- SideBarGit().run(object, background=True)
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarGitDifftoolBetweenRemoteAndLastLocalCommitCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- for item in SideBarSelection(paths).getSelectedItems():
- object = Object()
- object.item = item
- object.command = ['git', 'difftool', 'origin/master..', '--', item.forCwdSystemName()]
- SideBarGit().run(object, background=True)
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarGitDifftoolBetweenLastLocalCommitAndRemoteCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- for item in SideBarSelection(paths).getSelectedItems():
- object = Object()
- object.item = item
- object.command = ['git', 'difftool', '..origin/master', '--', item.forCwdSystemName()]
- SideBarGit().run(object, background=True)
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarGitLogStatShortLatestCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- for item in SideBarSelection(paths).getSelectedItems():
- object = Object()
- object.item = item
- object.command = ['git', 'log', '-n', '30', '--pretty=short', '--decorate', '--graph', '--no-color', '--', item.forCwdSystemName()]
- object.title = 'Log: '+item.name()
- object.no_results = 'No log to show'
- SideBarGit().run(object)
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarGitLogStatShortFullCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- for item in SideBarSelection(paths).getSelectedItems():
- object = Object()
- object.item = item
- object.command = ['git', 'log', '--pretty=short', '--decorate', '--graph', '--no-color', '--', item.forCwdSystemName()]
- object.title = 'Log: '+item.name()
- object.no_results = 'No log to show'
- SideBarGit().run(object)
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarGitLogStatLatestCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- for item in SideBarSelection(paths).getSelectedItems():
- object = Object()
- object.item = item
- object.command = ['git', 'log', '-n', '30', '--stat', '--graph', '--decorate', '--no-color', '--', item.forCwdSystemName()]
- object.title = 'Log: '+item.name()
- object.no_results = 'No log to show'
- SideBarGit().run(object)
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarGitLogStatFullCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- for item in SideBarSelection(paths).getSelectedItems():
- object = Object()
- object.item = item
- object.command = ['git', 'log', '--stat', '--graph', '--decorate', '--no-color', '--', item.forCwdSystemName()]
- object.title = 'Log: '+item.name()
- object.no_results = 'No log to show'
- SideBarGit().run(object)
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarGitLogStatListLatestCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- import sys
- for item in SideBarSelection(paths).getSelectedItems():
- object = Object()
- object.item = item
- object.command = ['git', 'log', '-n', '50', '--pretty=format:%s'.encode(sys.getfilesystemencoding()), '--no-color', '--', item.forCwdSystemName()]
- object.title = 'Log: '+item.name()
- object.no_results = 'No log to show'
- SideBarGit().run(object)
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarGitLogStatListCommitLatestCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- import sys
- for item in SideBarSelection(paths).getSelectedItems():
- object = Object()
- object.item = item
- object.command = ['git', 'log', '-n', '50', '--pretty=format:%h %s'.encode(sys.getfilesystemencoding()), '--no-color', '--', item.forCwdSystemName()]
- object.title = 'Log: '+item.name()
- object.no_results = 'No log to show'
- SideBarGit().run(object)
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarGitLogExtendedLatestCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- for item in SideBarSelection(paths).getSelectedItems():
- object = Object()
- object.item = item
- object.command = ['git', 'log', '-n', '30', '-p', '--decorate', '--no-color', '--', item.forCwdSystemName()]
- object.title = 'Log: '+item.name()
- object.no_results = 'No log to show'
- object.syntax_file = 'Packages/Diff/Diff.tmLanguage'
- object.word_wrap = False
- SideBarGit().run(object)
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarGitLogExtendedFullCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- for item in SideBarSelection(paths).getSelectedItems():
- object = Object()
- object.item = item
- object.command = ['git', 'log', '-p', '--decorate', '--no-color', '--', item.forCwdSystemName()]
- object.title = 'Log: '+item.name()
- object.no_results = 'No log to show'
- object.syntax_file = 'Packages/Diff/Diff.tmLanguage'
- object.word_wrap = False
- SideBarGit().run(object)
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarGitLogSinceLatestPushCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- for item in SideBarSelection(paths).getSelectedItems():
- object = Object()
- object.item = item
- object.command = ['git', 'log', 'origin/master..', '--stat', '--graph', '--decorate', '--no-color', '--', item.forCwdSystemName()]
- object.title = 'Log: '+item.name()
- object.no_results = 'No log to show'
- object.word_wrap = False
- SideBarGit().run(object)
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarGitReflogCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- for item in SideBarSelection(paths).getSelectedItems():
- object = Object()
- object.item = item
- object.command = ['git', 'reflog', '--no-color', '--', item.forCwdSystemName()]
- object.title = 'Reflog: '+item.name()
- SideBarGit().run(object)
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarGitBlameCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- for item in SideBarSelection(paths).getSelectedItems():
- object = Object()
- object.item = item
- object.command = ['git', 'blame', '--no-color', '--', item.forCwdSystemName()]
- object.title = 'Blame: '+item.name()
- object.word_wrap = False
- SideBarGit().run(object)
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).hasFiles()
-
-class SideBarGitStatusCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- for item in SideBarSelection(paths).getSelectedItems():
- object = Object()
- object.item = item
- object.command = ['git', 'status', '--untracked-files=all', '--ignored', '--', item.forCwdSystemName()]
- object.title = 'Status: '+item.name()
- SideBarGit().run(object)
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarGitRevertTrackedCommand(sublime_plugin.WindowCommand):
- def run(self, paths = [], confirm = False, drop_me = ''):
- failed = False
- if confirm == False:
- SideBarGit().confirm('Discard changes to tracked on selected items? ', self.run, paths)
- else:
- items = SideBarSelection(paths).getSelectedItems()
- closed_items = closed_affected_items(items)
- for item in items:
- object = Object()
- object.item = item
- object.command = ['git', 'checkout', 'HEAD', '--', item.forCwdSystemName()]
- if not SideBarGit().run(object):
- failed = True
- if not failed:
- SideBarGit().status('Discarded changes to tracked on selected items')
- reopen_affected_items(closed_items)
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarGitRevertTrackedCleanUntrackedCommand(sublime_plugin.WindowCommand):
- def run(self, paths = [], confirm = False, drop_me = ''):
- failed = False
- if confirm == False:
- SideBarGit().confirm('Discard changes to tracked and clean untracked on selected items? ', self.run, paths)
- else:
- for item in SideBarSelection(paths).getSelectedItems():
- object = Object()
- object.item = item
- object.command = ['git', 'checkout', 'HEAD', '--', item.forCwdSystemName()]
- if not SideBarGit().run(object):
- failed = True
- object = Object()
- object.item = item
- object.command = ['git', 'clean', '-f', '-d', '--', item.forCwdSystemName()]
- if not SideBarGit().run(object):
- failed = True
- if not failed:
- SideBarGit().status('Discarded changes to tracked and cleaned untracked on selected items')
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarGitRevertTrackedCleanUntrackedUnstageCommand(sublime_plugin.WindowCommand):
- def run(self, paths = [], confirm = False, drop_me = ''):
- failed = False
- if confirm == False:
- SideBarGit().confirm('Discard changes to tracked, clean untracked and unstage on selected items? ', self.run, paths)
- else:
- for item in SideBarSelection(paths).getSelectedItems():
- object = Object()
- object.item = item
- object.command = ['git', 'checkout', 'HEAD', '--', item.forCwdSystemName()]
- if not SideBarGit().run(object):
- failed = True
- object = Object()
- object.item = item
- object.command = ['git', 'clean', '-f', '-d', '--', item.forCwdSystemName()]
- if not SideBarGit().run(object):
- failed = True
- object = Object()
- object.item = item
- object.command = ['git', 'reset', 'HEAD', '--', item.forCwdSystemName()]
- if not SideBarGit().run(object):
- failed = True
- if not failed:
- SideBarGit().status('Discarded changes to tracked, cleaned untracked and unstage on selected items')
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarGitRevertTrackedUnstageCleanUntrackedCommand(sublime_plugin.WindowCommand):
- def run(self, paths = [], confirm = False, drop_me = ''):
- failed = False
- if confirm == False:
- SideBarGit().confirm('Discard changes to tracked, unstage and clean untracked on selected items? ', self.run, paths)
- else:
- for item in SideBarSelection(paths).getSelectedItems():
- object = Object()
- object.item = item
- object.command = ['git', 'checkout', 'HEAD', '--', item.forCwdSystemName()]
- if not SideBarGit().run(object):
- failed = True
- object = Object()
- object.item = item
- object.command = ['git', 'reset', 'HEAD', '--', item.forCwdSystemName()]
- if not SideBarGit().run(object):
- failed = True
- object = Object()
- object.item = item
- object.command = ['git', 'clean', '-f', '-d', '--', item.forCwdSystemName()]
- if not SideBarGit().run(object):
- failed = True
- if not failed:
- SideBarGit().status('Discarded changes to tracked, unstage and cleaned untracked on selected items')
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarGitRevertUnstageCommand(sublime_plugin.WindowCommand):
- def run(self, paths = [], confirm = False, drop_me = ''):
- failed = False
- if confirm == False:
- SideBarGit().confirm('Unstage selected items? ', self.run, paths)
- else:
- for item in SideBarSelection(paths).getSelectedItems():
- object = Object()
- object.item = item
- object.command = ['git', 'reset', 'HEAD', '--', item.forCwdSystemName()]
- if not SideBarGit().run(object):
- failed = True
- if not failed:
- SideBarGit().status('Unstage selected items')
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarGitCheckoutToCommand(sublime_plugin.WindowCommand):
- def run(self, paths = [], input = False, content = ''):
- failed = False
- if input == False:
- SideBarGit().prompt('Checkout selected items to object: ', '', self.run, paths)
- elif content != '':
- import sys
- for item in SideBarSelection(paths).getSelectedItems():
- object = Object()
- object.item = item
- object.command = ['git', 'checkout', content.encode(sys.getfilesystemencoding()), '--', item.forCwdSystemName()]
- if not SideBarGit().run(object):
- failed = True
- if not failed:
- SideBarGit().status('Checkout selected items to "'+content+'"')
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarGitIgnoreOpenCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- for item in SideBarSelection(paths).getSelectedItems():
- item.path(item.dirname())
- while not os.path.exists(item.join('.git')):
- if os.path.exists(item.join('.gitignore')):
- break;
- if item.dirname() == item.path():
- break;
- item.path(item.dirname())
-
- if os.path.exists(item.join('.gitignore')):
- item.path(item.join('.gitignore'))
- else:
- item.path(item.join('.gitignore'))
- item.create()
- item.edit()
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarGitIgnoreAddCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- for item in SideBarSelection(paths).getSelectedItems():
- original = item.path()
- originalIsDirectory = item.isDirectory()
- item.path(item.dirname())
- while not os.path.exists(item.join('.git')):
- if os.path.exists(item.join('.gitignore')):
- break;
- if item.dirname() == item.path():
- break;
- item.path(item.dirname())
-
- if os.path.exists(item.join('.gitignore')):
- item.path(item.join('.gitignore'))
- else:
- if os.path.exists(item.join('.git')):
- item.path(item.join('.gitignore'))
- item.create()
- else:
- SideBarGit().status('Unable to found repository for "'+original.encode('utf-8')+'"')
- continue
- ignore_entry = re.sub('^/+', '', original.replace(item.dirname(), '').replace('\\', '/'))
- if originalIsDirectory:
- ignore_entry = '/'+ignore_entry
- content = item.contentUTF8().strip()+'\n'+ignore_entry
- content = content.replace('\r\n', '\n')
- content = "\n".join(list(set(content.split('\n'))))
-
- item.write(content.strip())
- SideBarGit().status('Ignored file "'+ignore_entry+'" on '+item.path())
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-# Following code for selected folders. Dirname for when a file is selected.
-
-class SideBarGitInitCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- for item in SideBarSelection(paths).getSelectedDirectoriesOrDirnames():
- object = Object()
- object.item = item
- object.command = ['git', 'init']
- object.to_status_bar = True
- SideBarGit().run(object)
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarGitCloneCommand(sublime_plugin.WindowCommand):
- def run(self, paths = [], input = False, content = ''):
- failed = False
- if input == False:
- SideBarGit().prompt('Enter URL to clone: ', sublime.get_clipboard(), self.run, paths)
- elif content != '':
- import sys
- for item in SideBarSelection(paths).getSelectedDirectoriesOrDirnames():
- object = Object()
- object.item = item
- object.command = ['git', 'clone', '--recursive', content.encode(sys.getfilesystemencoding())]
- object.to_status_bar = True
- if not SideBarGit().run(object, True):
- failed = True
- if not failed:
- SideBarGit().status('Cloned URL "'+content+'"')
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarGitGuiCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- for item in SideBarSelection(paths).getSelectedDirectoriesOrDirnames():
- object = Object()
- object.item = item
- object.command = ['git','gui']
- SideBarGit().run(object, False, True)
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarGitGitkCommand(sublime_plugin.WindowCommand):
- def run(self, paths = [], input = False):
- for item in SideBarSelection(paths).getSelectedDirectoriesOrDirnames():
- object = Object()
- object.item = item
- object.command = ['gitk']
- SideBarGit().run(object, False, True)
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-# Following code for unique selected repos found on items selected
-
-class SideBarGitCheckoutRepositoryToCommand(sublime_plugin.WindowCommand):
- def run(self, paths = [], input = False, content = ''):
- failed = False
- if input == False:
- SideBarGit().prompt('Checkout repository to object: ', '', self.run, paths)
- elif content != '':
- import sys
- for item in SideBarGit().getSelectedRepos(SideBarSelection(paths).getSelectedItems()):
- object = Object()
- object.item = item.repository
- object.command = ['git', 'checkout', content.encode(sys.getfilesystemencoding())]
- if not SideBarGit().run(object):
- failed = True
- if not failed:
- SideBarGit().status('Checkout repository to "'+content+'"')
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarGitPushCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- for item in SideBarGit().getSelectedRepos(SideBarSelection(paths).getSelectedItems()):
- object = Object()
- object.item = item.repository
- object.command = ['git','push']
- object.to_status_bar = True
- SideBarGit().run(object, modal = False, background=False)
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarGitPushWithOptionsCommand(sublime_plugin.WindowCommand):
- def run(self, paths = [], input = False, content = ''):
- if input == False:
- SideBarGit().prompt('Push with options: ', "git push aRemoteName aLocalBranch:aRemoteBranch", self.run, paths)
- elif content != '':
- import sys
- for item in SideBarGit().getSelectedRepos(SideBarSelection(paths).getSelectedItems()):
- object = Object()
- object.item = item.repository
- object.command = content.encode(sys.getfilesystemencoding()).split(' ')
- object.to_status_bar = True
- SideBarGit().run(object, True)
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarGitPushAndPushTagsCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- for item in SideBarGit().getSelectedRepos(SideBarSelection(paths).getSelectedItems()):
- object = Object()
- object.item = item.repository
- object.command = ['git','push','&&','git','push','--tags']
- object.to_status_bar = True
- SideBarGit().run(object, True)
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarGitPushAllBranchesCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- for item in SideBarGit().getSelectedRepos(SideBarSelection(paths).getSelectedItems()):
- object = Object()
- object.item = item.repository
- object.command = ['git','push','origin','*:*']
- object.to_status_bar = True
- SideBarGit().run(object, True)
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarGitPushTagsCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- for item in SideBarGit().getSelectedRepos(SideBarSelection(paths).getSelectedItems()):
- object = Object()
- object.item = item.repository
- object.command = ['git','push','--tags']
- object.to_status_bar = True
- SideBarGit().run(object, True)
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarGitPullCommand(sublime_plugin.WindowCommand):
- def run(self, paths = [], confirm = False, drop_me = ''):
- if confirm == False:
- SideBarGit().confirm('Pull from default? ', self.run, paths)
- else:
- for item in SideBarGit().getSelectedRepos(SideBarSelection(paths).getSelectedItems()):
- object = Object()
- object.item = item.repository
- object.command = ['git','pull']
- SideBarGit().run(object, True)
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarGitPullWithOptionsCommand(sublime_plugin.WindowCommand):
- def run(self, paths = [], input = False, content = ''):
- if input == False:
- SideBarGit().prompt('Pull with options: ', "git pull", self.run, paths)
- elif content != '':
- import sys
- for item in SideBarGit().getSelectedRepos(SideBarSelection(paths).getSelectedItems()):
- object = Object()
- object.item = item.repository
- object.command = content.encode(sys.getfilesystemencoding()).split(' ')
- SideBarGit().run(object, True)
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarGitFetchCommand(sublime_plugin.WindowCommand):
- def run(self, paths = [], confirm = False, drop_me = ''):
- if confirm == False:
- SideBarGit().confirm('Fetch from default? ', self.run, paths)
- else:
- for item in SideBarGit().getSelectedRepos(SideBarSelection(paths).getSelectedItems()):
- object = Object()
- object.item = item.repository
- object.command = ['git','fetch']
- SideBarGit().run(object, True)
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarGitFetchWithOptionsCommand(sublime_plugin.WindowCommand):
- def run(self, paths = [], input = False, content = ''):
- if input == False:
- SideBarGit().prompt('Fetch with options: ', "git fetch aRemoteName aRemoteBranch:aLocalBranch", self.run, paths)
- elif content != '':
- import sys
- for item in SideBarGit().getSelectedRepos(SideBarSelection(paths).getSelectedItems()):
- object = Object()
- object.item = item.repository
- object.command = content.encode(sys.getfilesystemencoding()).split(' ')
- SideBarGit().run(object, True)
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarGitCommitUndoCommand(sublime_plugin.WindowCommand):
- def run(self, paths = [], confirm = False, drop_me = ''):
- if confirm == False:
- SideBarGit().confirm('Undo Commit? ', self.run, paths)
- else:
- for item in SideBarGit().getSelectedRepos(SideBarSelection(paths).getSelectedItems()):
- object = Object()
- object.item = item.repository
- object.command = ['git', 'reset', '--soft', 'HEAD^']
- SideBarGit().run(object)
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-# Following code for files and folders for each unique selected repos
-
-class SideBarGitCommitCommand(sublime_plugin.WindowCommand):
- def run(self, paths = [], input = False, content = ''):
- if input == False:
- SideBarGit().prompt('Enter a commit message: ', '', self.run, paths)
- sublime.active_window().run_command('toggle_setting', {"setting": "spell_check"})
- elif content != '':
- import sys
- content = (content[0].upper() + content[1:]).encode(sys.getfilesystemencoding())
- for repo in SideBarGit().getSelectedRepos(SideBarSelection(paths).getSelectedItems()):
- commitCommand = ['git', 'commit', '-m', content, '--']
- for item in repo.items:
- commitCommand.append(item.forCwdSystemPathRelativeFrom(repo.repository.path()))
- object = Object()
- object.item = repo.repository
- object.to_status_bar = True
- object.command = commitCommand
- SideBarGit().run(object)
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarGitCommitAllCommand(sublime_plugin.WindowCommand):
- def run(self, paths = [], input = False, content = ''):
- if input == False:
- SideBarGit().prompt('Enter a commit message: ', '', self.run, paths)
- sublime.active_window().run_command('toggle_setting', {"setting": "spell_check"})
- elif content != '':
- import sys
- content = (content[0].upper() + content[1:]).encode(sys.getfilesystemencoding())
- for item in SideBarGit().getSelectedRepos(SideBarSelection(paths).getSelectedItems()):
- object = Object()
- object.item = item.repository
- object.to_status_bar = True
- object.command = ['git', 'commit', '-a', '-m', content]
- SideBarGit().run(object)
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarGitCommitAmendCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- for repo in SideBarGit().getSelectedRepos(SideBarSelection(paths).getSelectedItems()):
- commitCommand = ['git', 'commit', '--amend', '-C', 'HEAD', '--']
- for item in repo.items:
- commitCommand.append(item.forCwdSystemPathRelativeFrom(repo.repository.path()))
- object = Object()
- object.item = repo.repository
- object.to_status_bar = True
- object.command = commitCommand
- SideBarGit().run(object)
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarGitAddCommitCommand(sublime_plugin.WindowCommand):
- def run(self, paths = [], input = False, content = ''):
- if input == False:
- SideBarGit().prompt('Enter a commit message: ', '', self.run, paths)
- sublime.active_window().run_command('toggle_setting', {"setting": "spell_check"})
- elif content != '':
- import sys
- content = (content[0].upper() + content[1:]).encode(sys.getfilesystemencoding())
- for repo in SideBarGit().getSelectedRepos(SideBarSelection(paths).getSelectedItems()):
- commitCommandAdd = ['git', 'add', '--']
- commitCommandCommit = ['git', 'commit', '-m', content, '--']
- for item in repo.items:
- commitCommandAdd.append(item.forCwdSystemPathRelativeFromRecursive(repo.repository.path()))
- commitCommandCommit.append(item.forCwdSystemPathRelativeFrom(repo.repository.path()))
- object = Object()
- object.item = repo.repository
- object.command = commitCommandAdd
- SideBarGit().run(object)
- object = Object()
- object.item = repo.repository
- object.to_status_bar = True
- object.command = commitCommandCommit
- SideBarGit().run(object)
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarGitAddCommitPushCommand(sublime_plugin.WindowCommand):
- def run(self, paths = [], input = False, content = ''):
- if input == False:
- SideBarGit().prompt('Enter a commit message: ', '', self.run, paths)
- sublime.active_window().run_command('toggle_setting', {"setting": "spell_check"})
- elif content != '':
- import sys
- content = (content[0].upper() + content[1:]).encode(sys.getfilesystemencoding())
- for repo in SideBarGit().getSelectedRepos(SideBarSelection(paths).getSelectedItems()):
- commitCommandAdd = ['git', 'add', '--']
- commitCommandCommit = ['git', 'commit', '-m', content, '--']
- for item in repo.items:
- commitCommandAdd.append(item.forCwdSystemPathRelativeFromRecursive(repo.repository.path()))
- commitCommandCommit.append(item.forCwdSystemPathRelativeFrom(repo.repository.path()))
- object = Object()
- object.item = repo.repository
- object.command = commitCommandAdd
- SideBarGit().run(object)
- object = Object()
- object.item = repo.repository
- object.to_status_bar = True
- object.command = commitCommandCommit
- SideBarGit().run(object)
- object = Object()
- object.item = repo.repository
- object.command = ['git','push']
- SideBarGit().run(object, True)
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarGitAddCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- for repo in SideBarGit().getSelectedRepos(SideBarSelection(paths).getSelectedItems()):
- command = ['git', 'add', '--']
- for item in repo.items:
- command.append(item.forCwdSystemPathRelativeFromRecursive(repo.repository.path()))
- object = Object()
- object.item = repo.repository
- object.command = command
- SideBarGit().run(object)
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarGitRemoveKeepLocalCommand(sublime_plugin.WindowCommand):
- def run(self, paths = [], confirm = False, drop_me = ''):
- if confirm == False:
- SideBarGit().confirm('Remove from repository, keep local copies? ', self.run, paths)
- else:
- for repo in SideBarGit().getSelectedRepos(SideBarSelection(paths).getSelectedItems()):
- command = ['git', 'rm', '-r', '--cached', '--']
- for item in repo.items:
- command.append(item.forCwdSystemPathRelativeFrom(repo.repository.path()))
- object = Object()
- object.item = repo.repository
- object.command = command
- object.to_status_bar = True
- SideBarGit().run(object)
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarGitRemoveCommand(sublime_plugin.WindowCommand):
- def run(self, paths = [], confirm = False, drop_me = ''):
- if confirm == False:
- SideBarGit().confirm('Remove from repository, and remove local copies? ', self.run, paths)
- else:
- for repo in SideBarGit().getSelectedRepos(SideBarSelection(paths).getSelectedItems()):
- command = ['git', 'rm', '-r', '-f', '--']
- for item in repo.items:
- command.append(item.forCwdSystemPathRelativeFrom(repo.repository.path()))
- object = Object()
- object.item = repo.repository
- object.command = command
- SideBarGit().run(object)
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarGitLiberalCommand(sublime_plugin.WindowCommand):
- def run(self, paths = [], input = False, content = ''):
- if input == False:
- SideBarGit().prompt('[SideBarGit@SublimeText ./]:', 'git ', self.run, paths)
- elif content != '':
- import sys
- for item in SideBarSelection(paths).getSelectedDirectoriesOrDirnames():
- object = Object()
- object.item = item
- object.command = content.encode(sys.getfilesystemencoding()).split(' ')
- object.title = content
- object.no_results = 'No output'
- object.syntax_file = 'Packages/Diff/Diff.tmLanguage'
- SideBarGit().run(object)
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarGitRemoteAddCommand(sublime_plugin.WindowCommand):
- def run(self, paths = [], input = False, content = ''):
- if input == False:
- SideBarGit().prompt('Remote add: ', "git remote add aRemoteName "+sublime.get_clipboard(), self.run, paths)
- elif content != '':
- import sys
- content = content.encode(sys.getfilesystemencoding())
- for repo in SideBarGit().getSelectedRepos(SideBarSelection(paths).getSelectedItems()):
- object = Object()
- object.item = repo.repository
- object.command = content.split(' ')
- object.to_status_bar = True
- SideBarGit().run(object)
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarGitBranchNewFromCurrentCommand(sublime_plugin.WindowCommand):
- def run(self, paths = [], input = False, content = ''):
- if input == False:
- SideBarGit().prompt('New branch: ', "", self.run, paths)
- elif content != '':
- import sys
- content = content.encode(sys.getfilesystemencoding())
- for repo in SideBarGit().getSelectedRepos(SideBarSelection(paths).getSelectedItems()):
- object = Object()
- object.item = repo.repository
- object.command = ['git', 'checkout', '-b', content]
- object.to_status_bar = True
- SideBarGit().run(object)
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarGitBranchNewFromMasterCommand(sublime_plugin.WindowCommand):
- def run(self, paths = [], input = False, content = ''):
- if input == False:
- SideBarGit().prompt('New branch: ', "", self.run, paths)
- elif content != '':
- import sys
- content = content.encode(sys.getfilesystemencoding())
- for repo in SideBarGit().getSelectedRepos(SideBarSelection(paths).getSelectedItems()):
- object = Object()
- object.item = repo.repository
- object.command = ['git', 'checkout', 'master']
- SideBarGit().run(object)
-
- object = Object()
- object.item = repo.repository
- object.command = ['git', 'checkout', '-b', content]
- object.to_status_bar = True
- SideBarGit().run(object)
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarGitBranchNewFromCleanCurrentCommand(sublime_plugin.WindowCommand):
- def run(self, paths = [], input = False, content = ''):
- if input == False:
- SideBarGit().prompt('New branch: ', "", self.run, paths)
- elif content != '':
- import sys
- content = content.encode(sys.getfilesystemencoding())
- for repo in SideBarGit().getSelectedRepos(SideBarSelection(paths).getSelectedItems()):
-
- object = Object()
- object.item = repo.repository
- object.command = ['git', 'checkout', '-B', content]
- object.to_status_bar = True
- SideBarGit().run(object)
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarGitBranchNewFromCleanMasterCommand(sublime_plugin.WindowCommand):
- def run(self, paths = [], input = False, content = ''):
- if input == False:
- SideBarGit().prompt('New branch: ', "", self.run, paths)
- elif content != '':
- import sys
- content = content.encode(sys.getfilesystemencoding())
- for repo in SideBarGit().getSelectedRepos(SideBarSelection(paths).getSelectedItems()):
-
- object = Object()
- object.item = repo.repository
- object.command = ['git', 'checkout', 'master']
- SideBarGit().run(object)
-
- object = Object()
- object.item = repo.repository
- object.command = ['git', 'checkout', '-B', content]
- object.to_status_bar = True
- SideBarGit().run(object)
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarGitBranchSwitchToMasterCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- for repo in SideBarGit().getSelectedRepos(SideBarSelection(paths).getSelectedItems()):
- object = Object()
- object.item = repo.repository
- object.command = ['git', 'checkout', 'master']
- object.to_status_bar = True
- SideBarGit().run(object)
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarGitBranchSwitchToCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- for repo in SideBarGit().getSelectedRepos(SideBarSelection(paths).getSelectedItems()):
- object = Object()
- object.item = repo.repository
- object.command = ['git', 'branch', '-v']
- object.silent = True
- SideBarGit().run(object)
- SideBarGit().quickPanel(self.on_done, repo.repository, (SideBarGit.last_stdout.decode('utf-8')).split('\n'))
-
- def on_done(self, extra, data, result):
- result = data[result].strip()
- if result.startswith("*"):
- return
- else:
- import sys
- branch = result.split(' ')[0]
- object = Object()
- object.item = extra
- object.command = ['git', 'checkout', branch.encode(sys.getfilesystemencoding())]
- object.to_status_bar = True
- SideBarGit().run(object)
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarGitBranchDeleteCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- for repo in SideBarGit().getSelectedRepos(SideBarSelection(paths).getSelectedItems()):
- object = Object()
- object.item = repo.repository
- object.command = ['git', 'branch', '-v']
- object.silent = True
- SideBarGit().run(object)
- SideBarGit().quickPanel(self.on_done, repo.repository, (SideBarGit.last_stdout.decode('utf-8')).split('\n'))
-
- def on_done(self, extra, data, result):
- result = data[result].strip()
- if result.startswith("*"):
- return
- else:
- import sys
- branch = result.split(' ')[0]
- object = Object()
- object.item = extra
- object.command = ['git', 'branch', '-d', branch.encode(sys.getfilesystemencoding())]
- object.to_status_bar = True
- SideBarGit().run(object)
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarGitBranchDeleteForceCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- for repo in SideBarGit().getSelectedRepos(SideBarSelection(paths).getSelectedItems()):
- object = Object()
- object.item = repo.repository
- object.command = ['git', 'branch', '-v']
- object.silent = True
- SideBarGit().run(object)
- SideBarGit().quickPanel(self.on_done, repo.repository, (SideBarGit.last_stdout.decode('utf-8')).split('\n'))
-
- def on_done(self, extra, data, result):
- result = data[result].strip()
- if result.startswith("*"):
- return
- else:
- import sys
- branch = result.split(' ')[0]
- object = Object()
- object.item = extra
- object.command = ['git', 'branch', '-D', branch.encode(sys.getfilesystemencoding())]
- object.to_status_bar = True
- SideBarGit().run(object)
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarGitMergeToCurrentFromCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- for repo in SideBarGit().getSelectedRepos(SideBarSelection(paths).getSelectedItems()):
- object = Object()
- object.item = repo.repository
- object.command = ['git', 'branch', '-v']
- object.silent = True
- SideBarGit().run(object)
- SideBarGit().quickPanel(self.on_done, repo.repository, (SideBarGit.last_stdout.decode('utf-8')).split('\n'))
-
- def on_done(self, extra, data, result):
- result = data[result].strip()
- if result.startswith("*"):
- return
- else:
- import sys
- branch = result.split(' ')[0]
- object = Object()
- object.item = extra
- object.command = ['git', 'merge', branch.encode(sys.getfilesystemencoding())]
- object.to_status_bar = True
- SideBarGit().run(object)
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarGitRebaseCurrentIntoMasterCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- for repo in SideBarGit().getSelectedRepos(SideBarSelection(paths).getSelectedItems()):
- object = Object()
- object.item = repo.repository
- object.command = ['git', 'rebase', 'master']
- SideBarGit().run(object)
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
- # }
- # this.tagAdd = function(event)
- # {
- # var aMsg = this.s.prompt('Enter tag name to add…', '');
- # if(aMsg != '')
- # {
- # var repos = this.getSelectedRepos(event);
- # var commands = '';
- # for(var id in repos.r)
- # {
- # commands += 'cd '+repos.r[id].cwd+'';
- # commands += '\n';
- # commands += 'git tag "'+this.s.filePathEscape(aMsg)+'" >>'+repos.obj.output+' 2>&1';
- # commands += '\n';
- # }
- # this.s.fileWrite(repos.obj.sh, commands);
- # this.run(repos.obj.sh, repos.obj.outputFile, 'Tag "'+aMsg+'" added', false, true);
- # }
- # }
- # this.tagRemove = function(event)
- # {
- # var aMsg = this.s.prompt('Enter tag name to remove…', '');
- # if(aMsg != '')
- # {
- # var repos = this.getSelectedRepos(event);
- # var commands = '';
- # for(var id in repos.r)
- # {
- # commands += 'cd '+repos.r[id].cwd+'';
- # commands += '\n';
- # commands += 'git tag -d "'+this.s.filePathEscape(aMsg)+'" >>'+repos.obj.output+' 2>&1';
- # commands += '\n';
- # }
- # this.s.fileWrite(repos.obj.sh, commands);
- # this.run(repos.obj.sh, repos.obj.outputFile, '', false, true);
- # }
- # }
- # this.tagAuto = function(event)
- # {
- # var repos = this.getSelectedRepos(event);
- # var commands = '';
- # for(var id in repos.r)
- # {
- # var version = this.repositoryPreference(id, 'version') || 0;
- # version++;
- # this.repositoryPreference(id, 'version', version);
-
- # commands += 'cd '+repos.r[id].cwd+'';
- # commands += '\n';
- # commands += 'git tag "'+this.s.filePathEscape(this.s.now().replace(/-/g, '').substr(2, 6)+'.'+version)+'" >>'+repos.obj.output+' 2>&1';
- # commands += '\n';
- # }
- # this.s.fileWrite(repos.obj.sh, commands);
- # this.run(repos.obj.sh, repos.obj.outputFile, 'Tag '+this.s.now().replace(/-/g, '').substr(2, 6)+' added', false, true);
- # }
- # this.tagList = function(event)
- # {
- # var repos = this.getSelectedRepos(event);
- # var commands = '';
- # for(var id in repos.r)
- # {
- # commands += 'cd '+repos.r[id].cwd+'';
- # commands += '\n';
- # commands += 'git tag -l >>'+repos.obj.output+' 2>&1';
- # commands += '\n';
- # }
- # this.s.fileWrite(repos.obj.sh, commands);
- # this.run(repos.obj.sh, repos.obj.outputFile, '', true, false);
- # }
- # this.tagsGetFromRepo = function(aObj)
- # {
- # var sh = this.s.fileCreateTemporal('kGit.sh', '');
-
- # this.s.fileWrite(sh, 'cd '+aObj.cwd+' \n echo `git for-each-ref refs/tags --sort=-authordate` \n');
-
- # var tags = this.run(sh, sh+'.diff', '', false, false, true).split('\n');
- # tags.shift();
- # tags.shift();
- # tags.shift();
- # tags.shift();
- # tags.shift();
- # tags = tags.join('');
- # tags = tags.split('refs/tags/');
- # tags.shift();
- # for(var id in tags)
- # tags[id] = tags[id].split(' ')[0];
- # tags.reverse();
- # return tags;
- # }
-
-
-# //TODO: hardcoded branch name
-
- # }
- # this.diffBetweenLatestTagAndLastCommit = function(event)
- # {
- # var selected = this.getSelectedPaths(event);
- # for(var id in selected)
- # {
- # var obj = this.getPaths(selected[id]);
- # var tags = this.tagsGetFromRepo(obj);
- # this.s.fileWrite(obj.sh, 'cd '+obj.cwd+'\ngit diff "'+(tags.pop() || '')+'"... -- '+obj.selected+' >>'+obj.output+' 2>&1\n');
- # this.run(obj.sh, obj.outputFile, 'No difference found', true);
- # }
- # }
- # this.diffBetweenTheTwoLatestTags = function(event)
- # {
- # var selected = this.getSelectedPaths(event);
- # for(var id in selected)
- # {
- # var obj = this.getPaths(selected[id]);
- # var tags = this.tagsGetFromRepo(obj);
- # this.s.fileWrite(obj.sh, 'cd '+obj.cwd+'\ngit diff "'+(tags[tags.length-2] || '')+'".."'+(tags[tags.length-1] || '')+'" -- '+obj.selected+' >>'+obj.output+' 2>&1\n');
- # this.run(obj.sh, obj.outputFile, 'No difference found', true);
- # }
- # }
- # this.logSinceLatestTag = function(event)
- # {
- # var selected = this.getSelectedPaths(event);
- # for(var id in selected)
- # {
- # var obj = this.getPaths(selected[id]);
- # var tags = this.tagsGetFromRepo(obj);
- # this.s.fileWrite(obj.sh, 'cd '+obj.cwd+'\n echo "log:'+this.s.filePathEscape(this.s.pathToNix(obj.selectedFile))+'" >> '+obj.output+' \n git log "'+(tags.pop() || '')+'"... --stat --graph -- '+obj.selected+' >>'+obj.output+' 2>&1\n');
- # this.run(obj.sh, obj.outputFile, 'No log to show', true);
- # }
-
- # this.logBetweenTheTwoLatestTags = function(event)
- # {
- # var selected = this.getSelectedPaths(event);
- # for(var id in selected)
- # {
- # var obj = this.getPaths(selected[id]);
- # var tags = this.tagsGetFromRepo(obj);
- # this.s.fileWrite(obj.sh, 'cd '+obj.cwd+' echo "log:'+this.s.filePathEscape(this.s.pathToNix(obj.selectedFile))+'" >> '+obj.output+' \n git log "'+(tags[tags.length-2] || '')+'".."'+(tags[tags.length-1] || '')+'" --stat --graph -- '+obj.selected+' >>'+obj.output+' 2>&1\n');
- # this.run(obj.sh, obj.outputFile, 'No log to show', true);
- # }
- # }
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/SideBarGit/SideBarGitGutterDiff.txt b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/SideBarGit/SideBarGitGutterDiff.txt
deleted file mode 100644
index b8b9e3e..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/SideBarGit/SideBarGitGutterDiff.txt
+++ /dev/null
@@ -1,170 +0,0 @@
-import sublime
-import sublime_plugin
-import functools
-import threading
-import subprocess
-import sys
-import re
-import tempfile
-import codecs
-import os
-import time
-
-from SideBarGit import SideBarGit
-from SideBarItem import SideBarItem
-from Utils import Object
-
-Object.running = False
-Object.timing = time.time()
-
-class SideBarGitGutterDiff(sublime_plugin.EventListener):
-
- def on_load(self, view):
- self.run(view)
-
- def on_modified(self, view):
- now = time.time()
- if now - Object.timing > 0.1:
- Object.timing = now
- self.run(view)
- else:
- Object.timing = now
-
- def on_post_save(self, view):
- self.run(view)
-
- def run(self, view):
- if Object.running == False and view.file_name() != None and view.file_name() != '':
- Object.running = True
- # cache file repository ( if any )
- if not view.settings().has('SideBarGitGutterRepository'):
- item = SideBarItem(view.file_name(), False)
- _item = SideBarItem(view.file_name(), False)
- repos = SideBarGit().getSelectedRepos([_item])
- if len(repos) > 0:
- view.settings().set('SideBarGitGutterRepository', repos[0].repository.path())
- view.settings().set('SideBarGitGutterCWD', repos[0].repository.path())
- view.settings().set('SideBarGitGutterPath', item.forCwdSystemPathRelativeFrom(repos[0].repository.path()))
- else:
- view.settings().set('SideBarGitGutterRepository', '')
-
- # if in a repo check for modifications
- repo = view.settings().get('SideBarGitGutterRepository')
- if repo != '':
- SideBarGitGutterDiffThread(
- view,
- repo,
- view.settings().get('SideBarGitGutterCWD'),
- view.settings().get('SideBarGitGutterPath'),
- view.substr(sublime.Region(0, view.size()))
- ).start()
- else:
- Object.running = False
-
-class SideBarGitGutterDiffThread(threading.Thread):
-
- def __init__(self, view, repo, cwd, path, content):
- threading.Thread.__init__(self)
- self.view = view
- self.repo = repo
- self.cwd = cwd
- self.path = path
- self.content = content
-
- def run(self):
-
- tmp = tempfile.NamedTemporaryFile(delete=False)
- codecs.open(tmp.name, 'w+', 'utf-8').write(self.content)
-
- comand = ['git', 'diff', '-p', '--unified=0', '--no-color', '--ignore-all-space', '--ignore-space-at-eol', '--ignore-space-change', 'HEAD:'+self.path, tmp.name]
-
- process = subprocess.Popen(
- comand,
- cwd=self.cwd,
- stdout=subprocess.PIPE,
- stderr=subprocess.STDOUT,
- shell=sys.platform == 'win32',
- universal_newlines=True)
-
- stdout, stderr = process.communicate()
- if stdout != '' and stdout.find('fatal:') != 0:
-
- hunk = re.finditer('\n@@ -([0-9]+),?([0-9]*) \+([0-9]+),?([0-9]*) @@', stdout)
-
- additions = []
- deletions = []
- changes = []
-
- for change in hunk:
- g = []
- for group in change.groups():
- if group == '':
- g.append(1)
- else:
- g.append(int(group))
- deleted = g[1]
- added = g[3]
-
- if deleted == added and added == 1:
- changes.append([g[2]-1, g[2]]);
- else:
- if deleted > 0:
- if deleted == 1:
- if added > deleted:
- deletions.append([g[2], g[2]+deleted-added]);
- else:
- deletions.append([g[2], g[2]+1]);
- else:
- deletions.append([g[2]-1, g[2]+deleted-1])
- if added > 0:
- if added == 1:
- additions.append([g[2], g[2]+added]);
- else:
- additions.append([g[2]-1, g[2]+added-1])
- tmp.close();
- os.remove(tmp.name)
- sublime.set_timeout(functools.partial(self.add_regions, additions, deletions, changes), 0)
- else:
- tmp.close();
- os.remove(tmp.name)
- sublime.set_timeout(functools.partial(self.erase_regions), 0)
- if stdout.find('fatal:'):
- sublime.set_timeout(functools.partial(self.mark_not_in_a_repository), 0)
- Object.running = False
-
- def add_regions(self, additions, deletions, changes):
-
- self.erase_regions()
-
- rs = []
- for r in additions:
- while r[0] != r[1]:
- rs.append(sublime.Region(self.view.text_point(r[0], 0)))
- r[0] = r[0]+1
- if len(rs):
- self.view.add_regions("git.diff.additions", rs, "number", "dot", sublime.HIDDEN)
-
- rs = []
- for r in deletions:
- while r[0] != r[1]:
- rs.append(sublime.Region(self.view.text_point(r[0], 0)))
- r[0] = r[0]+1
- if len(rs):
- self.view.add_regions("git.diff.deletions", rs, "entity.name.class", "dot", sublime.HIDDEN)
-
- rs = []
- for r in changes:
- while r[0] != r[1]:
- rs.append(sublime.Region(self.view.text_point(r[0], 0)))
- r[0] = r[0]+1
- if len(rs):
- self.view.add_regions("git.diff.changes", rs, "string", "dot", sublime.HIDDEN)
-
-
- def erase_regions(self):
- self.view.erase_regions("git.diff.additions")
- self.view.erase_regions("git.diff.deletions")
- self.view.erase_regions("git.diff.changes")
-
- def mark_not_in_a_repository(self):
- self.view.settings().set('SideBarGitGutterRepository', '')
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/SideBarGit/StatusBarBranch.py b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/SideBarGit/StatusBarBranch.py
deleted file mode 100644
index 28df3f1..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/SideBarGit/StatusBarBranch.py
+++ /dev/null
@@ -1,43 +0,0 @@
-import sublime, sublime_plugin
-from sidebar.SideBarGit import SideBarGit
-from sidebar.SideBarSelection import SideBarSelection
-import threading
-
-class Object():
- pass
-
-s = sublime.load_settings('SideBarGit.sublime-settings')
-
-class StatusBarBranch(sublime_plugin.EventListener):
-
- def on_load(self, v):
- if s.get('statusbar_branch') and v.file_name():
- StatusBarBranchGet(v.file_name(), v).start()
-
- def on_activated(self, v):
- if s.get('statusbar_branch') and v.file_name():
- StatusBarBranchGet(v.file_name(), v).start()
-
-class StatusBarBranchGet(threading.Thread):
-
- def __init__(self, file_name, v):
- threading.Thread.__init__(self)
- self.file_name = file_name
- self.v = v
-
- def run(self):
- for repo in SideBarGit().getSelectedRepos(SideBarSelection([self.file_name]).getSelectedItems()):
- object = Object()
- object.item = repo.repository
- object.command = ['git', 'branch']
- object.silent = True
- SideBarGit().run(object)
- sublime.set_timeout(lambda:self.on_done(SideBarGit.last_stdout.decode('utf-8')), 0)
- return
-
- def on_done(self, branches):
- branches = branches.split('\n')
- for branch in branches:
- if branch.startswith("*"):
- self.v.set_status('statusbar_sidebargit_branch', branch)
- return
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/SideBarGit/license.txt b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/SideBarGit/license.txt
deleted file mode 100644
index ed95cfe..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/SideBarGit/license.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-"None are so hopelessly enslaved as those who falsely believe they are free."
- Johann Wolfgang von Goethe
-
-Copyright (C) 2012 Tito Bouzout
-
-This license apply to all the files inside this program unless noted
-different for some files or portions of code inside these files.
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation. http://www.gnu.org/licenses/gpl.html
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see http://www.gnu.org/licenses/gpl.html
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/SideBarGit/readme.md b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/SideBarGit/readme.md
deleted file mode 100644
index d88397a..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/SideBarGit/readme.md
+++ /dev/null
@@ -1,182 +0,0 @@
-Description
-------------------
-
-Provides git commands on Side Bar of Files and Folders for Sublime Text 2. For sublime text see: http://www.sublimetext.com/
-
-It should work with files names in any language.
-
-This plugin is a port of the "Komodin" extension for komodo edit. See: https://github.com/titoBouzout/komodo-komodin-git
-
-
-Usage
-------------------
-
-* Right click on "multiple/single" "files/folders" of the "tree" sidebar to apply commands on selected files which maybe are from different repositories.
-
-* To apply commands to focused document use the document context menu.
-
-* Tip: If a command sends output to a tab ( example a diff ), pressing F5 on that tab: will execute the command again and refresh the tab with the new contents ( example the new computed diff )
-
-Provides the following commands
-------------------
-
-
-Add & Commit
- o git add -- "/selected/paths/files/or/and/folders"
- o git commit -m "promptMessage" -- "/selected/paths/files/or/and/folders"
-Add & Commit & Push
- o git add -- "/selected/paths/files/or/and/folders"
- o git commit -m "promptMessage" -- "/selected/paths/files/or/and/folders"
- o git push
-
-Commit
- o git commit -m "promptMessage" -- "/selected/paths/files/or/and/folders"
-Commit Undo
- o git reset --soft HEAD~1
-
-Commit Amend
- o git commit --amend -C HEAD -- "/selected/paths/files/or/and/folders"
-Commit All
- o git commit -a -m "promptMessage"
-
-Status
- o git status --untracked-files=all -- "/selected/paths/files/or/and/folders"
-
-Diff
-
- all changes since the last commit
- o git diff HEAD -- "/selected/paths/files/or/and/folders"
- changes that have not been staged
- o git diff -- "/selected/paths/files/or/and/folders"
- changes that are staged but not committed
- o git diff --staged -- "/selected/paths/files/or/and/folders"
- between the index and last commit
- o git diff --cached -- "/selected/paths/files/or/and/folders"
- between remote and last local commit (origin/master..)
- o git diff origin/master.. -- "/selected/paths/files/or/and/folders"
- between last local commit and remote (..origin/master)
- o git diff ..origin/master -- "/selected/paths/files/or/and/folders"
- between the two latest tags
- o git diff "previousTag".."lastTag" -- "/selected/paths/files/or/and/folders"
-
-Log stat last 30
- o git log -n 30 --stat --graph -- "/selected/paths/files/or/and/folders"
-
- Log stat full
- o git log --stat --graph -- "/selected/paths/files/or/and/folders"
- Log extended last 30
- o git log -n 30 -p -- "/selected/paths/files/or/and/folders"
- Log extended full
- o git log -p -- "/selected/paths/files/or/and/folders"
- Log since last tag
- o git log "lastTag"... --stat --graph -- "/selected/paths/files/or/and/folders"
- Log since last push
- o git log origin/master... --stat --graph -- "/selected/paths/files/or/and/folders"
- Log between the two latest tags
- o git log "prevToLastTag".."lastTag" --stat --graph -- "/selected/paths/files/or/and/folders"
-
-Blame
- o git blame -- "/selected/paths/files/NOT/folders"
-
-Auto-Tag
- o git tag "YYMMDD.Version"
-
- Tag Add
- o git tag "promptMessage"
- Tag Remove
- o git tag -d "promptMessage"
- Tag List
- o git tag -l
-
-Revert Discard changes to tracked
- o git checkout HEAD -- "/selected/paths/files/or/and/folders"
-
- Revert Discard changes to tracked, clean untracked
- o git checkout HEAD -- "/selected/paths/files/or/and/folders"
- o git clean -f -d -- "/selected/paths/files/or/and/folders"
- Revert Discard changes to tracked, clean untracked, unstage
- o git checkout HEAD -- "/selected/paths/files/or/and/folders"
- o git clean -f -d -- "/selected/paths/files/or/and/folders"
- o git reset HEAD -- "/selected/paths/files/or/and/folders"
- Revert Discard changes to tracked, unstage, clean untracked
- o git checkout HEAD -- "/selected/paths/files/or/and/folders"
- o git reset HEAD -- "/selected/paths/files/or/and/folders"
- o git clean -f -d -- "/selected/paths/files/or/and/folders"
- Revert Unstage
- o git reset HEAD -- "/selected/paths/files/or/and/folders"
-
-Checkout to
- o git checkout promptMessage -- "/selected/paths/files/or/and/folders"
-Checkout repo to
- o cd repoPath
- o git checkout promptMessage
-
-Push
- o git push
-
- Push, Push Tags
- o git push && git push --tags
- Push Tags
- o git push --tags
- Push with options…
- o promptMessage
-
- Pull
- o git pull
- Pull with options…
- o promptMessage
-
- Fetch
- o git fetch
- Fetch with options…
- o promptMessage
-
- Remote add
- o git remote add promptMessage
- Configure default remote
- o git config branch.promptBranch.remote promptRemoteName
-
-Clone
- o git clone promptMessage
-Init
- o git init
-
-Add
- o git add -- "/selected/paths/files/or/and/folders"
-Remove
- o git rm -r -f -- "/selected/paths/files/or/and/folders"
-Remove Keep Local
- o git rm -r --cached -- "/selected/paths/files/or/and/folders"
-
-Open Git Ignore
-Add to Git Ignore
-
-Git GUI
-Gitk
-Liberal Git Command
-
-
-Installation
-------------------
-
- * Install this repository via "Package Control" http://wbond.net/sublime_packages/package_control
-
-Todo
-------------------
-
- * Tag commands not yet ported
-
-Source-code
-------------------
-
-https://github.com/SublimeText/SideBarGit
-
-Forum Thread
-------------------
-
-http://www.sublimetext.com/forum/viewtopic.php?f=5&t=3405
-
-Contribute
-------------------
-
-[Consider make a contribution](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=extensiondevelopment%40gmail%2ecom&lc=UY&item_name=Tito&item_number=sublime%2dtext%2dside%2dbar%2dplugin¤cy_code=USD&bn=PP%2dDonationsBF%3abtn_donateCC_LG%2egif%3aNonHosted )
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/SideBarGit/sidebar/SideBarGit.py b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/SideBarGit/sidebar/SideBarGit.py
deleted file mode 100644
index 655c5eb..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/SideBarGit/sidebar/SideBarGit.py
+++ /dev/null
@@ -1,317 +0,0 @@
-# coding=utf8
-import sublime
-import os
-import subprocess
-
-from SideBarItem import SideBarItem
-
-class Object():
- pass
-
-s = sublime.load_settings('SideBarGit.sublime-settings')
-path_to_git_unixes = s.get('path_to_git_unixes');
-
-class SideBarGit:
-
- last_stdout = ''
-
- def run(
- self,
- object,
- modal = False,
- background = False,
-
- refresh_funct_view = False,
- refresh_funct_command = False,
- refresh_funct_item = False,
- refresh_funct_to_status_bar = False,
- refresh_funct_title = False,
- refresh_funct_no_results = False,
- refresh_funct_syntax_file = False
- ):
-
- if not refresh_funct_view:
- pass
- else:
- object = Object()
- object.command = refresh_funct_command
- object.item = SideBarItem(refresh_funct_item, os.path.isdir(refresh_funct_item))
- object.to_status_bar = refresh_funct_to_status_bar
- object.title = refresh_funct_title
- object.no_results = refresh_funct_no_results
- object.syntax_file = refresh_funct_syntax_file
-
- debug = False
- if debug:
- print '----------------------------------------------------------'
- print 'GIT:'
- print object.command
- print 'CWD:'
- print object.item.forCwdSystemPath()
- print 'PATH:'
- print object.item.forCwdSystemName()
-
- failed = False
-
- if sublime.platform() == 'windows':
- object.command = map(self.escapeCMDWindows, object.command)
-
- if sublime.platform() is not 'windows' and object.command[0] == 'git':
- if path_to_git_unixes != '':
- object.command[0] = s.get('path_to_git_unixes')
- elif os.path.exists('/usr/local/git/bin'):
- object.command[0] = '/usr/local/git/bin/git'
-
- cwd = object.item.forCwdSystemPath()
-
- try:
- if sublime.platform() == 'windows':
-
- process = subprocess.Popen(
- #" ".join(object.command),
- object.command,
- cwd=cwd,
- stdout=subprocess.PIPE,
- stderr=subprocess.STDOUT,
- shell=True,
- universal_newlines=True)
- else:
- process = subprocess.Popen(
- object.command,
- cwd=cwd,
- stdout=subprocess.PIPE,
- stderr=subprocess.STDOUT,
- shell=False,
- universal_newlines=True)
-
- if background:
- if debug:
- print 'SUCCESS'
- print '----------------------------------------------------------'
- return True
-
- stdout, stderr = process.communicate()
- SideBarGit.last_stdout = str(stdout).rstrip()
- self.last_stdout = str(stdout).rstrip()
-
- stdout = stdout.strip()
-
- if stdout.find('fatal:') == 0 or stdout.find('error:') == 0 or stdout.find('Permission denied') == 0 or stderr:
- print 'FAILED'
- failed = True
- else:
- if debug:
- print 'SUCCESS'
- if stdout:
- if debug:
- print 'STDOUT'
- print stdout
- if stderr:
- print 'STDERR'
- print stderr
- except OSError as (errno, strerror):
- print 'FAILED'
- failed = True
- print errno
- print strerror
- SideBarGit.last_stdout = ''
- self.last_stdout = ''
- except IOError as (errno, strerror):
- print 'FAILED'
- failed = True
- print errno
- print strerror
- SideBarGit.last_stdout = ''
- self.last_stdout = ''
- if debug:
- print '----------------------------------------------------------'
-
- try:
- object.to_status_bar
- except:
- object.to_status_bar = False
-
- try:
- object.silent
- return
- except:
- pass
-
- if failed:
- try:
- strerror
- if errno == 2:
- self.alert(strerror+'\nPossible error:\n'+object.command[0]+' not found on $PATH')
- else:
- self.alert(strerror)
- return False
- except:
- if not stdout and not stderr:
- return False
- if stdout.find('Permission denied') == 0 or stdout.find('fatal: The remote end hung up unexpectedly') == 0:
- self.alert((stdout or '')+'\n'+(stderr or '')+'\nPossible error:\nssh keys not in .ssh/ directory or keys not opened')
- else:
- self.alert((stdout or '')+'\n'+(stderr or ''))
- return False
- else:
- if stdout != '' and refresh_funct_view == False and (object.to_status_bar or " ".join(object.command).find('git push') == 0 or stdout.find('nothing to commit') == 0):
- self.status(stdout)
- else:
- if stdout == '' and refresh_funct_view == False:
- try:
- self.status(object.no_results)
- except:
- self.status('No output to show')
- return True
- if stdout == '' and refresh_funct_view != False:
- try:
- stdout = object.no_results
- except:
- stdout = 'No output to show'
- if stdout == '':
- return True
-
- if refresh_funct_view == False:
- view = sublime.active_window().new_file()
- else:
- view = refresh_funct_view
- try:
- view.set_name(object.title.decode('utf-8'))
- except:
- view.set_name('No Title')
- try:
- if object.syntax_file != False:
- view.set_syntax_file(object.syntax_file)
- except:
- pass
- try:
- object.word_wrap
- view.settings().set('word_wrap', False)
- except:
- pass
- view.settings().set('fallback_encoding', 'UTF-8')
- view.settings().set('encoding', 'UTF-8')
- view.settings().set('default_dir', object.item.dirname())
- view.set_scratch(True)
-
- if refresh_funct_view == False:
- view.settings().set('SideBarGitIsASideBarGitTab', True)
- view.settings().set('SideBarGitCommand', object.command)
- view.settings().set('SideBarGitModal', modal)
- view.settings().set('SideBarGitBackground', background)
- view.settings().set('SideBarGitItem', object.item.path())
- try:
- view.settings().set('SideBarGitToStatusBar', object.to_status_bar)
- except:
- view.settings().set('SideBarGitToStatusBar', False)
- try:
- view.settings().set('SideBarGitTitle', object.title)
- except:
- view.settings().set('SideBarGitTitle', 'No Title')
- try:
- view.settings().set('SideBarGitNoResults', object.no_results)
- except:
- view.settings().set('SideBarGitNoResults', 'No output to show')
- try:
- view.settings().set('SideBarGitSyntaxFile', object.syntax_file)
- except:
- view.settings().set('SideBarGitSyntaxFile', False)
-
- content = "[SideBarGit@SublimeText "
- content += object.item.name().decode('utf-8')
- content += "/] "
- content += (" ".join(object.command)).decode('utf-8')
- content += "\n\n"
- content += "# Improve this command, the output or the tab title by posting here:"
- content += "\n"
- content += "# http://www.sublimetext.com/forum/viewtopic.php?f=5&t=3405"
- content += "\n"
- content += "# Tip: F5 will run the command again and refresh the contents of this tab"
- content += "\n\n"
- try:
- content += stdout
- except:
- content += unicode(stdout, 'UTF-8', errors='ignore')
-
- edit = view.begin_edit()
- view.replace(edit, sublime.Region(0, view.size()), content);
- view.sel().clear()
- view.sel().add(sublime.Region(0))
- view.end_edit(edit)
- return True
-
- def confirm(self, message, function, arg1):
- if int(sublime.version()) >= 2186:
- if sublime.ok_cancel_dialog(u'Side Bar Git : '+message):
- function(arg1, True)
- else:
- import functools
- sublime.active_window().run_command('hide_panel');
- sublime.active_window().show_input_panel("Confirmation Required:", message.decode('utf-8'), functools.partial(function, arg1, True), None, None)
-
- def prompt(self, message, default, function, arg1):
- import functools
- sublime.active_window().run_command('hide_panel');
- sublime.active_window().show_input_panel(message.decode('utf-8'), default.decode('utf-8'), functools.partial(function, arg1, True), None, None)
-
- def alert(self, message):
- try:
- sublime.error_message('Git : '+(message.decode('utf-8')))
- except:
- try:
- sublime.error_message('Git : '+message)
- except:
- print message
-
- def status(self, message):
- message = message[:200] + (message[200:] and '…')
- message = message.replace('\n', ' ')
- try:
- v = sublime.active_window().active_view()
- v.set_status('SideBarGit', 'Git : '+(message.decode('utf-8')))
- sublime.set_timeout(lambda: SideBarGit().statusRemove(v), 16000)
- except:#there is no tabs opened
- sublime.status_message('Git : '+(message.decode('utf-8')))
-
- def statusRemove(self, v):
- try:
- v.erase_status('SideBarGit')
- except:#this view is not there
- pass
-
- def quickPanel(self, function, extra, data):
- import functools
- window = sublime.active_window()
- # window.show_input_panel("BUG!", '', '', None, None)
- # window.run_command('hide_panel');
- data = [item[:70] for item in data]
- window.show_quick_panel(data, functools.partial(self.quickPanelDone, function, extra, data))
-
- def quickPanelDone(self, function, extra, data, result):
- if result != -1:
- function(extra, data, result)
-
- def getSelectedRepos(self, items):
- repos = []
- reposTemp = []
- for item in items:
- original = item.path()
- while not os.path.exists(item.join('.git')):
- if item.dirname() == item.path():
- break;
- item.path(item.dirname())
-
- if os.path.exists(item.join('.git')):
- try:
- index = reposTemp.index(item.path())
- except ValueError:
- reposTemp.append(item.path())
- index = reposTemp.index(item.path())
- repos.append(Object())
- repos[index].repository = item
- repos[index].items = []
- repos[index].items.append(SideBarItem(original, os.path.isdir(original)))
- return repos
-
- def escapeCMDWindows(self, string):
- return string.replace('^', '^^')
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/SideBarGit/sidebar/SideBarItem.py b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/SideBarGit/sidebar/SideBarItem.py
deleted file mode 100644
index 05a6971..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/SideBarGit/sidebar/SideBarItem.py
+++ /dev/null
@@ -1,480 +0,0 @@
-# coding=utf8
-import sublime
-import os
-import re
-import shutil
-
-from SideBarProject import SideBarProject
-
-try:
- import desktop
-except:
- pass
-
-class Object():
- pass
-
-def expand_vars(path):
- for k, v in os.environ.iteritems():
- try:
- # dirty hack, this should be autofixed in python3
- k = unicode(k.encode('utf8'))
- v = unicode(v.encode('utf8'))
- path = path.replace(u'%'+k+'%', v).replace(u'%'+k.lower()+'%', v)
- except:
- pass
- return path
-
-class SideBarItem:
-
- def __init__(self, path, is_directory):
- self._path = path
- self._is_directory = is_directory
-
- def path(self, path = ''):
- if path == '':
- return self._path
- else:
- self._path = path
- self._is_directory = os.path.isdir(path)
- return path
-
- def pathSystem(self):
- import sys
- return self.path().encode(sys.getfilesystemencoding())
-
- def pathWithoutProject(self):
- path = self.path()
- for directory in SideBarProject().getDirectories():
- path = path.replace(directory, '', 1)
- return path.replace('\\', '/')
-
- def pathProject(self):
- path = self.path()
- for directory in SideBarProject().getDirectories():
- path2 = path.replace(directory, '', 1)
- if path2 != path:
- return directory
- return False
-
- def projectURL(self, type):
- filename = os.path.normpath(os.path.join(sublime.packages_path(), '..', 'Settings', 'SideBarEnhancements.json'))
- if os.path.lexists(filename):
- #try:
- import json
- data = file(filename, 'r').read()
- data = data.replace('\t', ' ').replace('\\', '/').replace('\\', '/').replace('//', '/').replace('//', '/').replace('http:/', 'http://').replace('https:/', 'https://')
- data = json.loads(data, strict=False)
-
- for path in data.keys():
- path2 = expand_vars(path)
- print '-------------------------------------------------------'
- print 'searching:'
- path2 = path2.replace('\\', '/').replace('\\', '/').replace('//', '/').replace('//', '/')
- print path2
- print 'in:'
- path3 = self.path().replace('\\', '/').replace('\\', '/').replace('//', '/').replace('//', '/')
- print path3
- print '-------------------------------------------------------'
- path4 = re.sub(re.compile("^"+re.escape(path2), re.IGNORECASE), '', path3);
- print path4
- if path4 != path3:
- url = data[path][type]
- if url:
- if url[-1:] != '/':
- url = url+'/'
- import urllib
- return url+(re.sub("^/", '', urllib.quote(path4.encode('utf-8'))));
-
- #except:
- # return False
- else:
- return False
-
- def isUnderCurrentProject(self):
- path = self.path()
- path2 = self.path()
- for directory in SideBarProject().getDirectories():
- path2 = path2.replace(directory, '', 1)
- return path != path2
-
- def pathRelativeFromProject(self):
- return re.sub('^/+', '', self.pathWithoutProject())
-
- def pathRelativeFromProjectEncoded(self):
- import urllib
- return urllib.quote(self.pathRelativeFromProject().encode('utf-8'))
-
- def pathRelativeFromView(self):
- return os.path.relpath(self.path(), os.path.dirname(sublime.active_window().active_view().file_name())).replace('\\', '/')
-
- def pathRelativeFromViewEncoded(self):
- import urllib
- return urllib.quote(os.path.relpath(self.path(), os.path.dirname(sublime.active_window().active_view().file_name())).replace('\\', '/').encode('utf-8'))
-
- def pathAbsoluteFromProject(self):
- return self.pathWithoutProject()
-
- def pathAbsoluteFromProjectEncoded(self):
- import urllib
- return urllib.quote(self.pathAbsoluteFromProject().encode('utf-8'))
-
- def uri(self):
- import urllib
- return 'file:'+urllib.pathname2url(self.path().encode('utf-8'));
-
- def join(self, name):
- return os.path.join(self.path(), name)
-
- def dirname(self):
- branch, leaf = os.path.split(self.path())
- return branch;
-
- def forCwdSystemPath(self):
- if self.isDirectory():
- return self.pathSystem()
- else:
- return self.dirnameSystem()
-
- def forCwdSystemName(self):
- if self.isDirectory():
- return '.'
- else:
- path = self.pathSystem()
- branch = self.dirnameSystem()
- leaf = path.replace(branch, '', 1).replace('\\', '').replace('/', '')
- return leaf
-
- def forCwdSystemPathRelativeFrom(self, relativeFrom):
- relative = SideBarItem(relativeFrom, os.path.isdir(relativeFrom))
- path = self.pathSystem().replace(relative.pathSystem(), '', 1).replace('\\', '/')
- if path == '':
- return '.'
- else:
- return re.sub('^/+', '', path)
-
- def forCwdSystemPathRelativeFromRecursive(self, relativeFrom):
- relative = SideBarItem(relativeFrom, os.path.isdir(relativeFrom))
- path = self.pathSystem().replace(relative.pathSystem(), '', 1).replace('\\', '/')
- if path == '':
- return '.'
- else:
- if self.isDirectory():
- return re.sub('^/+', '', path)+'/'
- else:
- return re.sub('^/+', '', path)
-
- def dirnameSystem(self):
- import sys
- return self.dirname().encode(sys.getfilesystemencoding())
-
- def dirnameCreate(self):
- try:
- os.makedirs(self.dirname())
- except:
- pass
-
- def name(self):
- branch, leaf = os.path.split(self.path())
- return leaf;
-
- def nameSystem(self):
- import sys
- return self.name().encode(sys.getfilesystemencoding())
-
- def nameEncoded(self):
- import urllib
- return urllib.quote(self.name().encode('utf-8'));
-
- def namePretty(self):
- return self.name().replace(self.extension(), '').replace('-', ' ').replace('_', ' ').strip();
-
- def open(self):
- if sublime.platform() == 'osx':
- import subprocess
- subprocess.Popen(['open', '-a', self.nameSystem()], cwd=self.dirnameSystem())
- elif sublime.platform() == 'windows':
- import subprocess
- subprocess.Popen([self.nameSystem()], cwd=self.dirnameSystem(), shell=True)
- else:
- desktop.open(self.path())
-
- def edit(self):
- return sublime.active_window().open_file(self.path())
-
- def isDirectory(self):
- return self._is_directory
-
- def isFile(self):
- return self.isDirectory() == False
-
- def contentUTF8(self):
- import codecs
- return codecs.open(self.path(), 'r', 'utf-8').read()
-
- def contentBinary(self):
- return file(self.path(), "rb").read()
-
- def contentBase64(self):
- return 'data:'+self.mime()+';base64,'+(file(self.path(), "rb").read().encode("base64").replace('\n', ''))
-
- def reveal(self):
- sublime.active_window().run_command("open_dir", {"dir": self.dirname(), "file": self.name()} )
-
- def write(self, content):
- file(self.path(), 'w+').write(content)
-
- def mime(self):
- import mimetypes
- return mimetypes.guess_type(self.path())[0] or 'application/octet-stream'
-
- def extension(self):
- return os.path.splitext('name'+self.name())[1].lower()
-
- def exists(self):
- return os.path.isdir(self.path()) or os.path.isfile(self.path())
-
- def create(self):
- if self.isDirectory():
- self.dirnameCreate()
- os.makedirs(self.path())
- else:
- self.dirnameCreate()
- self.write('')
-
- def copy(self, location, replace = False):
- location = SideBarItem(location, os.path.isdir(location));
- if location.exists() and replace == False:
- return False
- elif location.exists() and location.isFile():
- os.remove(location.path())
-
- location.dirnameCreate();
- if self.isDirectory():
- if location.exists():
- self.copy_recursive(self.path(), location.path())
- else:
- shutil.copytree(self.path(), location.path())
- else:
- shutil.copy2(self.path(), location.path())
- return True
-
- def copy_recursive(self, _from, _to):
-
- if os.path.isfile(_from) or os.path.islink(_from):
- try:
- os.makedirs(os.path.dirname(_to));
- except:
- pass
- if os.path.exists(_to):
- os.remove(_to)
- shutil.copy2(_from, _to)
- else:
- try:
- os.makedirs(_to);
- except:
- pass
- for content in os.listdir(_from):
- __from = os.path.join(_from, content)
- __to = os.path.join(_to, content)
- self.copy_recursive(__from, __to)
-
- def move(self, location, replace = False):
- location = SideBarItem(location, os.path.isdir(location));
- if location.exists() and replace == False:
- if self.path().lower() == location.path().lower():
- pass
- else:
- return False
- elif location.exists() and location.isFile():
- os.remove(location.path())
-
- if self.path().lower() == location.path().lower():
- location.dirnameCreate();
- os.rename(self.path(), location.path()+'.sublime-temp')
- os.rename(location.path()+'.sublime-temp', location.path())
- self._move_moveViews(self.path(), location.path())
- else:
- location.dirnameCreate();
- if location.exists():
- self.move_recursive(self.path(), location.path())
- else:
- os.rename(self.path(), location.path())
- self._move_moveViews(self.path(), location.path())
- return True
-
- def move_recursive(self, _from, _to):
- if os.path.isfile(_from) or os.path.islink(_from):
- try:
- os.makedirs(os.path.dirname(_to));
- except:
- pass
- if os.path.exists(_to):
- os.remove(_to)
- os.rename(_from, _to)
- else:
- try:
- os.makedirs(_to);
- except:
- pass
- for content in os.listdir(_from):
- __from = os.path.join(_from, content)
- __to = os.path.join(_to, content)
- self.move_recursive(__from, __to)
- os.rmdir(_from)
-
- def _move_moveViews(self, old, location):
- for window in sublime.windows():
- active_view = window.active_view()
- views = []
- for view in window.views():
- if view.file_name():
- views.append(view)
- views.reverse();
- for view in views:
- if old == view.file_name():
- active_view = self._move_moveView(window, view, location, active_view)
- elif view.file_name().find(old+'\\') == 0:
- active_view = self._move_moveView(window, view, view.file_name().replace(old+'\\', location+'\\', 1), active_view)
- elif view.file_name().find(old+'/') == 0:
- active_view = self._move_moveView(window, view, view.file_name().replace(old+'/', location+'/', 1), active_view)
-
- def _move_moveView(self, window, view, location, active_view):
- if active_view == view:
- is_active_view = True
- else:
- is_active_view = False
-
- options = Object()
-
- options.scroll = view.viewport_position()
-
- options.selections = [[item.a, item.b] for item in view.sel()]
-
- options.marks = [[item.a, item.b] for item in view.get_regions("mark")]
-
- options.bookmarks = [[item.a, item.b] for item in view.get_regions("bookmarks")]
-
- if int(sublime.version()) >= 2167:
- options.folds = [[item.a, item.b] for item in view.folded_regions()]
- else:
- options.folds = [[item.a, item.b] for item in view.unfold(sublime.Region(0, view.size()))]
-
- options.syntax = view.settings().get('syntax')
-
- try:
- _window = window or view.window() or sublime.active_window()
- options.position = _window.get_view_index(view)
- except:
- options.position = False
-
- window.focus_view(view)
- if view.is_dirty():
- options.content = view.substr(sublime.Region(0, view.size()))
- view.window().run_command('revert')
- else:
- options.content = False
-
- _view = view
- view = window.open_file(location)
- window.focus_view(_view)
- window.run_command('close')
-
- sublime.set_timeout(lambda: self._move_restoreView(view, options, window), 200)
-
- if is_active_view:
- window.focus_view(view)
- return view
- else:
- window.focus_view(active_view)
- return active_view
-
- def _move_restoreView(self, view, options, window):
- if view.is_loading():
- sublime.set_timeout(lambda: self._move_restoreView(view, options, window), 100)
- else:
- if options.content != False:
- edit = view.begin_edit()
- view.replace(edit, sublime.Region(0, view.size()), options.content);
- view.sel().clear()
- view.sel().add(sublime.Region(0))
- view.end_edit(edit)
-
- if options.position != False:
- try:
- _window = window or view.window() or sublime.active_window()
- group, index = options.position
- _window.set_view_index(view, group, index)
- except:
- pass
-
- if options.syntax:
- view.settings().set('syntax', options.syntax);
-
- for r in options.folds:
- view.fold(sublime.Region(r[0], r[1]))
-
- view.sel().clear()
- for r in options.selections:
- view.sel().add(sublime.Region(r[0], r[1]))
-
- rs = []
- for r in options.marks:
- rs.append(sublime.Region(r[0], r[1]))
- if len(rs):
- view.add_regions("mark", rs, "mark", "dot", sublime.HIDDEN | sublime.PERSISTENT)
-
- rs = []
- for r in options.bookmarks:
- rs.append(sublime.Region(r[0], r[1]))
- if len(rs):
- view.add_regions("bookmarks", rs, "bookmarks", "bookmark", sublime.HIDDEN | sublime.PERSISTENT)
-
- view.set_viewport_position(options.scroll, False)
-
- def close_associated_buffers(self):
- path = self.path()
- closed_items = []
- for window in sublime.windows():
- active_view = window.active_view()
- views = []
- for view in window.views():
- if view.file_name():
- views.append(view)
- views.reverse();
- for view in views:
- if path == view.file_name():
- if view.window():
- closed_items.append([view.file_name(), view.window(), view.window().get_view_index(view)])
- if len(window.views()) == 1:
- window.new_file()
- window.focus_view(view)
- window.run_command('revert')
- window.run_command('close')
- elif view.file_name().find(path+'\\') == 0:
- if view.window():
- closed_items.append([view.file_name(), view.window(), view.window().get_view_index(view)])
- if len(window.views()) == 1:
- window.new_file()
- window.focus_view(view)
- window.run_command('revert')
- window.run_command('close')
- elif view.file_name().find(path+'/') == 0:
- if view.window():
- closed_items.append([view.file_name(), view.window(), view.window().get_view_index(view)])
- if len(window.views()) == 1:
- window.new_file()
- window.focus_view(view)
- window.run_command('revert')
- window.run_command('close')
-
- # try to repaint
- try:
- window.focus_view(active_view)
- window.focus_view(window.active_view())
- except:
- try:
- window.focus_view(window.active_view())
- except:
- pass
- return closed_items
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/SideBarGit/sidebar/SideBarProject.py b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/SideBarGit/sidebar/SideBarProject.py
deleted file mode 100644
index 7ceae07..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/SideBarGit/sidebar/SideBarProject.py
+++ /dev/null
@@ -1,119 +0,0 @@
-import sublime
-import re
-import os
-
-class SideBarProject:
-
- def getDirectories(self):
- return sublime.active_window().folders()
-
- def hasOpenedProject(self):
- return self.getProjectFile() != None
-
- def getDirectoryFromPath(self, path):
- for directory in self.getDirectories():
- maybe_path = path.replace(directory, '', 1)
- if maybe_path != path:
- return directory
-
- def getProjectFile(self):
- if not self.getDirectories():
- return None
- import json
- data = file(os.path.normpath(os.path.join(sublime.packages_path(), '..', 'Settings', 'Session.sublime_session')), 'r').read()
- data = data.replace('\t', ' ')
- data = json.loads(data, strict=False)
- projects = data['workspaces']['recent_workspaces']
-
- if os.path.lexists(os.path.join(sublime.packages_path(), '..', 'Settings', 'Auto Save Session.sublime_session')):
- data = file(os.path.normpath(os.path.join(sublime.packages_path(), '..', 'Settings', 'Auto Save Session.sublime_session')), 'r').read()
- data = data.replace('\t', ' ')
- data = json.loads(data, strict=False)
- if 'workspaces' in data and 'recent_workspaces' in data['workspaces'] and data['workspaces']['recent_workspaces']:
- projects += data['workspaces']['recent_workspaces']
- projects = list(set(projects))
- for project_file in projects:
- project_file = re.sub(r'^/([^/])/', '\\1:/', project_file);
- project_json = json.loads(file(project_file, 'r').read(), strict=False)
- if 'folders' in project_json:
- folders = project_json['folders']
- found_all = True
- for directory in self.getDirectories():
- found = False
- for folder in folders:
- folder_path = re.sub(r'^/([^/])/', '\\1:/', folder['path']);
- if folder_path == directory.replace('\\', '/'):
- found = True
- break;
- if found == False:
- found_all = False
- break;
- if found_all:
- return project_file
- return None
-
- def getProjectJson(self):
- if not self.hasOpenedProject():
- return None
- import json
- return json.loads(file(self.getProjectFile(), 'r').read(), strict=False)
-
- def excludeDirectory(self, path):
- import json
- project_file = self.getProjectFile();
- project = self.getProjectJson()
-
- path = re.sub(r'^([^/])\:/', '/\\1/', path.replace('\\', '/'))
-
- for folder in project['folders']:
- if path.find(folder['path']) == 0:
- try:
- folder['folder_exclude_patterns'].append(re.sub(r'/+$', '', path.replace(folder['path']+'/', '', 1)))
- except:
- folder['folder_exclude_patterns'] = [re.sub(r'/+$', '', path.replace(folder['path']+'/', '', 1))]
- file(project_file, 'w+').write(json.dumps(project, indent=1))
- return
-
- def excludeFile(self, path):
- import json
- project_file = self.getProjectFile();
- project = self.getProjectJson()
-
- path = re.sub(r'^([^/])\:/', '/\\1/', path.replace('\\', '/'))
-
- for folder in project['folders']:
- if path.find(folder['path']) == 0:
- try:
- folder['file_exclude_patterns'].append(path.replace(folder['path']+'/', '', 1))
- except:
- folder['file_exclude_patterns'] = [path.replace(folder['path']+'/', '', 1)]
- file(project_file, 'w+').write(json.dumps(project, indent=1))
- return
-
- def rootAdd(self, path):
- import json
- project_file = self.getProjectFile();
- project = self.getProjectJson()
-
- path = re.sub(r'^([^/])\:/', '/\\1/', path.replace('\\', '/'))
- project['folders'].append({'path':path});
-
- file(project_file, 'w+').write(json.dumps(project, indent=1))
-
- def refresh(self):
- try:
- sublime.set_timeout(lambda:sublime.active_window().run_command('refresh_folder_list'), 200);
- sublime.set_timeout(lambda:sublime.active_window().run_command('refresh_folder_list'), 600);
- sublime.set_timeout(lambda:sublime.active_window().run_command('refresh_folder_list'), 1300);
- sublime.set_timeout(lambda:sublime.active_window().run_command('refresh_folder_list'), 2300);
- except:
- pass
-
- def getPreference(self, name):
- if not self.hasOpenedProject():
- return None
- project = self.getProjectJson()
- try:
- return project[name]
- except:
- return None
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/SideBarGit/sidebar/SideBarSelection.py b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/SideBarGit/sidebar/SideBarSelection.py
deleted file mode 100644
index 00748e7..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/SideBarGit/sidebar/SideBarSelection.py
+++ /dev/null
@@ -1,186 +0,0 @@
-# coding=utf8
-import sublime
-import os
-import re
-
-from SideBarProject import SideBarProject
-from SideBarItem import SideBarItem
-
-class SideBarSelection:
-
- def __init__(self, paths = []):
-
- if len(paths) < 1:
- try:
- path = sublime.active_window().active_view().file_name()
- if self.isNone(path):
- paths = []
- else:
- paths = [path]
- except:
- paths = []
- self._paths = paths
- self._paths.sort()
- self._obtained_selection_information_basic = False
- self._obtained_selection_information_extended = False
-
- def len(self):
- return len(self._paths)
-
- def hasDirectories(self):
- self._obtainSelectionInformationBasic()
- return self._has_directories
-
- def hasFiles(self):
- self._obtainSelectionInformationBasic()
- return self._has_files
-
- def hasOnlyDirectories(self):
- self._obtainSelectionInformationBasic()
- return self._only_directories
-
- def hasOnlyFiles(self):
- self._obtainSelectionInformationBasic()
- return self._only_files
-
- def hasProjectDirectories(self):
- if self.hasDirectories():
- project_directories = SideBarProject().getDirectories()
- for item in self.getSelectedDirectories():
- if item.path() in project_directories:
- return True
- return False
- else:
- return False
-
- def hasItemsUnderProject(self):
- for item in self.getSelectedItems():
- if item.isUnderCurrentProject():
- return True
- return False
-
- def hasImages(self):
- return self.hasFilesWithExtension('gif|jpg|jpeg|png')
-
- def hasFilesWithExtension(self, extensions):
- extensions = re.compile('('+extensions+')$', re.I);
- for item in self.getSelectedFiles():
- if extensions.search(item.path()):
- return True;
- return False
-
- def getSelectedItems(self):
- self._obtainSelectionInformationExtended()
- return self._files + self._directories;
-
- def getSelectedItemsWithoutChildItems(self):
- self._obtainSelectionInformationExtended()
- items = []
- for item in self._items_without_containing_child_items:
- items.append(SideBarItem(item, os.path.isdir(item)))
- return items
-
- def getSelectedDirectories(self):
- self._obtainSelectionInformationExtended()
- return self._directories;
-
- def getSelectedFiles(self):
- self._obtainSelectionInformationExtended()
- return self._files;
-
- def getSelectedDirectoriesOrDirnames(self):
- self._obtainSelectionInformationExtended()
- return self._directories_or_dirnames;
-
- def getSelectedImages(self):
- return self.getSelectedFilesWithExtension('gif|jpg|jpeg|png')
-
- def getSelectedFilesWithExtension(self, extensions):
- items = []
- extensions = re.compile('('+extensions+')$', re.I);
- for item in self.getSelectedFiles():
- if extensions.search(item.path()):
- items.append(item)
- return items
-
- def _obtainSelectionInformationBasic(self):
- if not self._obtained_selection_information_basic:
- self._obtained_selection_information_basic = True
-
- self._has_directories = False
- self._has_files = False
- self._only_directories = False
- self._only_files = False
-
- for path in self._paths:
- if self._has_directories == False and os.path.isdir(path):
- self._has_directories = True
- if self._has_files == False and os.path.isdir(path) == False:
- self._has_files = True
- if self._has_files and self._has_directories:
- break
-
- if self._has_files and self._has_directories:
- self._only_directories = False
- self._only_files = False
- elif self._has_files:
- self._only_files = True
- elif self._has_directories:
- self._only_directories = True
-
- def _obtainSelectionInformationExtended(self):
- if not self._obtained_selection_information_extended:
- self._obtained_selection_information_extended = True
-
- self._directories = []
- self._files = []
- self._directories_or_dirnames = []
- self._items_without_containing_child_items = []
-
- _directories = []
- _files = []
- _directories_or_dirnames = []
- _items_without_containing_child_items = []
-
- for path in self._paths:
- if os.path.isdir(path):
- item = SideBarItem(path, True)
- if item.path() not in _directories:
- _directories.append(item.path())
- self._directories.append(item)
- if item.path() not in _directories_or_dirnames:
- _directories_or_dirnames.append(item.path())
- self._directories_or_dirnames.append(item)
- _items_without_containing_child_items = self._itemsWithoutContainingChildItems(_items_without_containing_child_items, item.path())
- else:
- item = SideBarItem(path, False)
- if item.path() not in _files:
- _files.append(item.path())
- self._files.append(item)
- _items_without_containing_child_items = self._itemsWithoutContainingChildItems(_items_without_containing_child_items, item.path())
- item = SideBarItem(os.path.dirname(path), True)
- if item.path() not in _directories_or_dirnames:
- _directories_or_dirnames.append(item.path())
- self._directories_or_dirnames.append(item)
-
- self._items_without_containing_child_items = _items_without_containing_child_items
-
- def _itemsWithoutContainingChildItems(self, items, item):
- new_list = []
- add = True
- for i in items:
- if i.find(item+'\\') == 0 or i.find(item+'/') == 0:
- continue
- else:
- new_list.append(i)
- if (item+'\\').find(i+'\\') == 0 or (item+'/').find(i+'/') == 0:
- add = False
- if add:
- new_list.append(item)
- return new_list
-
- def isNone(self, path):
- if path == None or path == '' or path == '.' or path == '..' or path == './' or path == '/' or path == '//' or path == '\\' or path == '\\\\' or path == '\\\\\\\\':
- return True
- else:
- return False
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/SideBarGit/sidebar/__init__.py b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/SideBarGit/sidebar/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/ZZZ.EthanBrown.SublimeKeyMap.Git/Default (OSX).sublime-keymap b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/ZZZ.EthanBrown.SublimeKeyMap.Git/Default (OSX).sublime-keymap
deleted file mode 100644
index dc1f592..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/ZZZ.EthanBrown.SublimeKeyMap.Git/Default (OSX).sublime-keymap
+++ /dev/null
@@ -1,34 +0,0 @@
-[
- // Git Chords - https://github.com/kemayo/sublime-text-2-git
- { "keys": ["ctrl+shift+g", "ctrl+shift+a"], "command": "git_add_choice" },
- { "keys": ["ctrl+shift+g", "ctrl+shift+b"], "command": "git_branch" },
- { "keys": ["ctrl+shift+g", "ctrl+shift+c"], "command": "git_commit" },
- { "keys": ["ctrl+shift+g", "ctrl+shift+d"], "command": "git_diff" },
- { "keys": ["ctrl+shift+g", "ctrl+shift+f"], "command": "git_fetch" },
- { "keys": ["ctrl+shift+g", "ctrl+shift+g"], "command": "git_graph" },
- { "keys": ["ctrl+shift+g", "ctrl+shift+h"], "command": "git_commit_history" },
- { "keys": ["ctrl+shift+g", "ctrl+shift+l"], "command": "git_log" },
- { "keys": ["ctrl+shift+g", "ctrl+shift+m"], "command": "git_merge" },
- { "keys": ["ctrl+shift+g", "ctrl+shift+n"], "command": "git_new_branch" },
- { "keys": ["ctrl+shift+g", "ctrl+shift+p"], "command": "git_pull_current_branch" },
- { "keys": ["ctrl+shift+g", "ctrl+shift+q"], "command": "git_quick_commit" },
- // dangerous
- // { "keys": ["ctrl+shift+g", "ctrl+shift+r"], "command": "git_reset_hard_head" },
- { "keys": ["ctrl+shift+g", "ctrl+shift+s"], "command": "git_status" },
- { "keys": ["ctrl+shift+g", "ctrl+shift+t"], "command": "git_new_tag" },
- { "keys": ["ctrl+shift+g", "ctrl+shift+z"], "command": "git_commit_amend" },
- { "keys": ["ctrl+shift+g", "ctrl+shift+up"], "command": "git_push" },
- { "keys": ["ctrl+shift+g", "ctrl+shift+down"], "command": "git_pull" },
- { "keys": ["ctrl+shift+g", "ctrl+shift+right"], "command": "git_stash" },
- { "keys": ["ctrl+shift+g", "ctrl+shift+left"], "command": "git_stash_pop" },
-
- //Modific - https://github.com/gornostal/Modific
- { "keys": ["ctrl+super+c"], "command": "show_original_part" },
- //using this binding with https://github.com/braindamageinc/SublimeHttpRequester
- //{ "keys": ["ctrl+super+r"], "command": "replace_modified_part" },
- //Git plugin does this already
- //{ "keys": ["ctrl+alt+d"], "command": "show_diff" },
- { "keys": ["ctrl+super+u"], "command": "uncommitted_files" }
- //{ "keys": ["ctrl+shift+pageup"], "command": "jump_between_changes", "args": {"direction": "prev"} },
- //{ "keys": ["ctrl+shift+pagedown"], "command": "jump_between_changes", "args": {"direction": "next"} }
-]
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/ZZZ.EthanBrown.SublimeKeyMap.Git/Default (Windows).sublime-keymap b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/ZZZ.EthanBrown.SublimeKeyMap.Git/Default (Windows).sublime-keymap
deleted file mode 100644
index 4ef3c72..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/ZZZ.EthanBrown.SublimeKeyMap.Git/Default (Windows).sublime-keymap
+++ /dev/null
@@ -1,34 +0,0 @@
-[
- // Git Chords - https://github.com/kemayo/sublime-text-2-git
- { "keys": ["ctrl+shift+g", "ctrl+shift+a"], "command": "git_add_choice" },
- { "keys": ["ctrl+shift+g", "ctrl+shift+b"], "command": "git_branch" },
- { "keys": ["ctrl+shift+g", "ctrl+shift+c"], "command": "git_commit" },
- { "keys": ["ctrl+shift+g", "ctrl+shift+d"], "command": "git_diff" },
- { "keys": ["ctrl+shift+g", "ctrl+shift+f"], "command": "git_fetch" },
- { "keys": ["ctrl+shift+g", "ctrl+shift+g"], "command": "git_graph" },
- { "keys": ["ctrl+shift+g", "ctrl+shift+h"], "command": "git_commit_history" },
- { "keys": ["ctrl+shift+g", "ctrl+shift+l"], "command": "git_log" },
- { "keys": ["ctrl+shift+g", "ctrl+shift+m"], "command": "git_merge" },
- { "keys": ["ctrl+shift+g", "ctrl+shift+n"], "command": "git_new_branch" },
- { "keys": ["ctrl+shift+g", "ctrl+shift+p"], "command": "git_pull_current_branch" },
- { "keys": ["ctrl+shift+g", "ctrl+shift+q"], "command": "git_quick_commit" },
- // dangerous
- // { "keys": ["ctrl+shift+g", "ctrl+shift+r"], "command": "git_reset_hard_head" },
- { "keys": ["ctrl+shift+g", "ctrl+shift+s"], "command": "git_status" },
- { "keys": ["ctrl+shift+g", "ctrl+shift+t"], "command": "git_new_tag" },
- { "keys": ["ctrl+shift+g", "ctrl+shift+z"], "command": "git_commit_amend" },
- { "keys": ["ctrl+shift+g", "ctrl+shift+up"], "command": "git_push" },
- { "keys": ["ctrl+shift+g", "ctrl+shift+down"], "command": "git_pull" },
- { "keys": ["ctrl+shift+g", "ctrl+shift+right"], "command": "git_stash" },
- { "keys": ["ctrl+shift+g", "ctrl+shift+left"], "command": "git_stash_pop" },
-
- //Modific - https://github.com/gornostal/Modific
- { "keys": ["ctrl+alt+c"], "command": "show_original_part" },
- //using this binding with https://github.com/braindamageinc/SublimeHttpRequester
- //{ "keys": ["ctrl+alt+r"], "command": "replace_modified_part" },
- //Git plugin does this already
- //{ "keys": ["ctrl+alt+d"], "command": "show_diff" },
- { "keys": ["ctrl+alt+u"], "command": "uncommitted_files" }
- //{ "keys": ["ctrl+shift+pageup"], "command": "jump_between_changes", "args": {"direction": "prev"} },
- //{ "keys": ["ctrl+shift+pagedown"], "command": "jump_between_changes", "args": {"direction": "next"} }
-]
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/ZZZ.EthanBrown.SublimeKeyMap.Git/README.md b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/ZZZ.EthanBrown.SublimeKeyMap.Git/README.md
deleted file mode 100644
index 5718983..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/ZZZ.EthanBrown.SublimeKeyMap.Git/README.md
+++ /dev/null
@@ -1,27 +0,0 @@
-SublimeKeyMap.Git
-=================
-
-A simple repository used to host / share my customized Sublime Text 2 key bindings for Git plugins
-
-Designed to be incorporated into `Package Control.sublime-settings` like:
-
-```json
-{
- "installed_packages":
- [
- "EditorConfig",
- "Git",
- "GitHubinator",
- "Modific",
- "SideBarGit",
- "sublime-github"
- ],
- "package_name_map": {
- "SublimeKeyMap.Git": "ZZZ.EthanBrown.SublimeKeyMap.Git"
- },
- "repositories":
- [
- "https://github.com/Iristyle/SublimeKeyMap.Git"
- ]
-}
-```
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/ZZZ.EthanBrown.SublimeKeyMap.Git/package-metadata.json b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/ZZZ.EthanBrown.SublimeKeyMap.Git/package-metadata.json
deleted file mode 100644
index 9838798..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/ZZZ.EthanBrown.SublimeKeyMap.Git/package-metadata.json
+++ /dev/null
@@ -1 +0,0 @@
-{"url": "https://github.com/Iristyle/SublimeKeyMap.Git", "version": "2013.09.17.01.37.21", "description": "A simple repository used to host / share my customized Sublime Text 2 key bindings for Git plugins"}
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/.gitignore b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/.gitignore
deleted file mode 100644
index 0d20b64..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-*.pyc
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/GitHub.sublime-settings b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/GitHub.sublime-settings
deleted file mode 100644
index 1b0c717..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/GitHub.sublime-settings
+++ /dev/null
@@ -1,37 +0,0 @@
-/* Sublime GitHub default settings */
-{
- "accounts": {
- "GitHub": {
- "base_uri": "https://api.github.com",
- "github_token": ""
- }
- },
-
- // You can add support for a private GitHub installation by adding another entry
- // to the accounts entry in the User settings file (Preferences ->
- // Package Settings -> GitHub -> Settings - User). You can then switch between
- // accounts via the GitHub: Switch Accounts command
- //
- // "YourCo": {
- // "base_uri": "https://github.yourco.com/api/v3",
- // "github_token": ""
- // }
-
- // The format of the each line in the list of gists.
- // The value is either a Python format string, or a list of Python format
- // strings. In the latter case, each element of the list will be a separate
- // line in the select list.
- // Valid parameters:
- // filename - filename of [first file in] gist
- // description - description of gist
- // index - 1-based index of gist in the list
- //
- // Some things to try:
- // "gist_list_format": "%(index)d. %(filename)s: %(description)s",
- // "gist_list_format": ["%(filename)s", "%(description)s"],
- "gist_list_format": "%(filename)s: %(description)s",
- // If true, display the list of gists in a monospace font
- "gist_list_monospace": false,
- // output debug info to the console
- "debug": false
-}
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/Github.sublime-commands b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/Github.sublime-commands
deleted file mode 100644
index ec1bd71..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/Github.sublime-commands
+++ /dev/null
@@ -1,18 +0,0 @@
-[
- { "caption": "GitHub: Private Gist from Selection", "command": "private_gist_from_selection" },
- { "caption": "GitHub: Public Gist from Selection", "command": "public_gist_from_selection" },
- { "caption": "GitHub: Copy Gist to Clipboard", "command": "open_gist" },
- { "caption": "GitHub: Copy Starred Gist to Clipboard", "command": "open_starred_gist" },
- { "caption": "GitHub: Open Gist in Editor", "command": "open_gist_in_editor" },
- { "caption": "GitHub: Open Starred Gist in Editor", "command": "open_starred_gist_in_editor" },
- { "caption": "GitHub: Copy Gist URL to Clipboard", "command": "open_gist_url" },
- { "caption": "GitHub: Open Gist in Browser", "command": "open_gist_in_browser" },
- { "caption": "GitHub: Open Starred Gist in Browser", "command": "open_starred_gist_in_browser" },
- { "caption": "GitHub: Update Gist", "command": "update_gist" },
- { "caption": "GitHub: Switch Accounts", "command": "switch_accounts" },
- { "caption": "GitHub: Copy Remote URL to Clipboard", "command": "copy_remote_url" },
- { "caption": "GitHub: Open Remote URL in Browser", "command": "open_remote_url" },
- { "caption": "GitHub: Blame", "command": "blame"},
- { "caption": "GitHub: History", "command": "history"},
- { "caption": "GitHub: Edit", "command": "edit"}
-]
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/LICENSE b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/LICENSE
deleted file mode 100644
index 859cc6e..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/LICENSE
+++ /dev/null
@@ -1,20 +0,0 @@
-Copyright (c) 2011 Brad Greenlee
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/Main.sublime-menu b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/Main.sublime-menu
deleted file mode 100644
index 23aa771..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/Main.sublime-menu
+++ /dev/null
@@ -1,34 +0,0 @@
-[
- {
- "caption": "Preferences",
- "mnemonic": "n",
- "id": "preferences",
- "children":
- [
- {
- "caption": "Package Settings",
- "mnemonic": "P",
- "id": "package-settings",
- "children":
- [
- {
- "caption": "GitHub",
- "children":
- [
- {
- "command": "open_file",
- "args": {"file": "${packages}/sublime-github/GitHub.sublime-settings"},
- "caption": "Settings – Default"
- },
- {
- "command": "open_file",
- "args": {"file": "${packages}/User/GitHub.sublime-settings"},
- "caption": "Settings – User"
- }
- ]
- }
- ]
- }
- ]
- }
-]
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/NOTICE b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/NOTICE
deleted file mode 100644
index 188a2f2..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/NOTICE
+++ /dev/null
@@ -1,18 +0,0 @@
-Sublime GitHub includes some external libraries to simplify installation.
-
-Requests License
-================
-
-Copyright (c) 2012 Kenneth Reitz.
-
-Permission to use, copy, modify, and/or distribute this software for any
-purpose with or without fee is hereby granted, provided that the above
-copyright notice and this permission notice appear in all copies.
-
-THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
-ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
-OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/README.md b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/README.md
deleted file mode 100644
index 361ff3d..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/README.md
+++ /dev/null
@@ -1,181 +0,0 @@
-# Sublime GitHub
-
-This is a plugin for the [Sublime Text](http://www.sublimetext.com/) text
-editor (both versions 2 and 3) that provides a number of useful commands for GitHub, including creating and browsing gists,
-opening and editing files on GitHub, and bringing up the blame and commit history views.
-
-## Installation
-
-You can install via [**Sublime Package Control**](http://wbond.net/sublime_packages/package_control) plugin.
-Just open "Package Control: Install Package" in your Command Palette and search for "sublime-github". The plugin should be picked up automatically. If not, restart Sublime Text.
-
-## Usage
-
-The first time you run one of the commands, it will ask you for your GitHub username and password in order to create a GitHub API access token, which gets saved in the Sublime GitHub user settings file. Your username and password are not stored anywhere, but if you would rather generate the access token yourself, see the "Generating Your Own Access Token" section below.
-
-The following commands are available in the Command Palette:
-
-* **GitHub: Switch Accounts**
-
- Switch to another GitHub account (see Adding Additional Accounts below)
-
-* **GitHub: Private Gist from Selection**
-
- Create a private gist from the currently selected text (or, if nothing is selected,
- the contents of the active editor.
-
-* **GitHub: Public Gist from Selection**
-
- Create a public gist from the currently selected text (or, if nothing is selected,
- the contents of the active editor.
-
-* **GitHub: Copy Gist to Clipboard**
-
- Displays a quick select panel listing all of your gists, and selecting one will
- copy the contents of that gist to your clipboard.
-
-* **GitHub: Copy Starred Gist to Clipboard**
-
- Displays a quick select panel listing only your starred gists, and selecting one will
- copy the contents of that gist to your clipboard.
-
-* **GitHub: Open Gist in Editor**
-
- Displays a quick select panel listing all of your gists, and selecting one will
- open a new editor tab with the contents of that gist.
-
-* **GitHub: Open Starred Gist in Editor**
-
- Displays a quick select panel listing only your starred gists, and selecting one will
- open a new editor tab with the contents of that gist.
-
-* **GitHub: Open Gist in Browser**
-
- Displays a quick select panel listing all of your gists, and selecting one will
- open that gist in your default web browser.
-
-* **GitHub: Open Starred Gist in Browser**
-
- Displays a quick select panel listing only your starred gists, and selecting one will
- open that gist in your default web browser.
-
-* **GitHub: Update Gist**
-
- Update the gist open in the current editor.
-
-**The following commands require the Git plugin, available through the Package Manager. After installing, restart Sublime Text.**
-
-* **GitHub: Open Remote URL in Browser**
-
- Open the current file's location in the repository in the browser.
-
-* **GitHub: Copy Remote URL to Clipboard**
-
- Put the url of the current file's location in the repository into the clipboard.
-
-* **GitHub: Blame**
-
- Open the GitHub blame view of the current file in the browser
-
-* **GitHub: History**
-
- Open the GitHub commit history view of the current file in the browser.
-
-* **GitHub: Edit**
-
- Open the current file for editing on GitHub. I'm not sure why you'd want to do that, but it was easy enough to add.
-
-## Adding Additional Accounts
-
-If have multiple GitHub accounts, or have a private GitHub installation, you can add the other
-accounts and switch between them whenever you like.
-
-Go to the GitHub user settings file (Preferences -> Package Settings -> GitHub -> Settings - User),
-and add another entry to the `accounts` dictionary. If it is another GitHub account, copy the
-`base_uri` for the default GitHub entry (if you don't see it, you can get it from Preferences ->
-Package Settings -> GitHub -> Settings - Default, or in the example below), and just give the
-account a different name. If you're adding a private GitHub installation, the `base_uri` will be
-whatever the base url is for your private GitHub, plus "/api/v3". For example:
-
- "accounts":
- {
- "GitHub":
- {
- "base_uri": "https://api.github.com",
- "github_token": "..."
- },
- "YourCo":
- {
- "base_uri": "https://github.yourco.com/api/v3",
- "github_token": ""
- }
- }
-
-Don't worry about setting the `github_token`--that will be set for you automatically, after you
-switch accounts (Shift-Cmd-P, "GitHub: Switch Accounts").
-
-## Key Bindings
-
-You can add your own keyboard shortcuts in Preferences -> Key Bindings - User. For example:
-
- [
- { "keys": ["ctrl+super+g", "ctrl+super+n"], "command": "public_gist_from_selection" },
- { "keys": ["ctrl+super+g", "ctrl+super+p","super+n"], "command": "private_gist_from_selection" },
- { "keys": ["ctrl+super+g", "ctrl+super+o"], "command": "open_gist_in_editor" },
- { "keys": ["ctrl+super+g", "ctrl+super+c"], "command": "open_gist_url" }
- ]
-
-(Note that `ctrl+super+g` (^⌘G) conflicts with Sublime Text's Quick Find All, so adjust accordingly.)
-Available commands can be seen in .
-
-## Issues
-
-* Linux requires the [curl](http://curl.haxx.se/) binary to be installed on your system (in one of:
-`/usr/local/sbin`, `/usr/local/bin`, `/usr/sbin`, `/usr/bin`, `/sbin`, or `/bin`).
-
-* Depending on the number of gists you have, there can be a considerable delay the first time your list of gists is fetched. Subsequent requests will be cached and should be a bit faster (although the GitHub API's ETags are currently not correct; once they fix that, it should speed things up). In the meantime, if there are gists that you open frequently, open them on GitHub and "Star" them, then access them via the Open/Copy Starred Gist commands.
-
-* Setting the file type for syntax highlighting when opening a gist in the editor does not work in Linux. I could get it to work with significant effort, so if you desperately want it, open an issue.
-
-## Generating Your Own Access Token
-
-If you feel uncomfortable giving your GitHub username and password to the plugin, you can generate a GitHub API access token yourself. Just open up a Terminal window/shell (on OS X, Linux or Cygwin), and run:
-
- curl -u username -d '{"scopes":["gist"]}' https://api.github.com/authorizations
-
-where `username` is your GitHub username. You'll be prompt for your password first. Then you'll get back a response that includes a 40-digit "token" value (e.g. `6423ba8429a152ff4a7279d1e8f4674029d3ef87`). Go to Sublime Text 2 -> Preferences -> Package Settings -> GitHub -> Settings - User, and insert the token there. It should look like:
-
- {
- "github_token": "6423ba8429a152ff4a7279d1e8f4674029d3ef87"
- }
-
-Restart Sublime.
-
-That's it!
-
-## Configuring a proxy
-
-If you are behind a proxy you can configure it for each account.
-
-Note that until a [bug](https://github.com/shazow/urllib3/pull/170) in urllib3 is fixed, in order to use a proxy you also have to force curl mode (Curl is required obviously).
-
-For example:
-
- "accounts":
- {
- "GitHub":
- {
- "base_uri": "https://api.github.com",
- "https_proxy": "...",
- "force_curl": true
- }
- }
-
-## Bugs and Feature Requests
-
-
-
-## Copyright
-
-Copyright © 2011+ Brad Greenlee. See LICENSE for details.
-
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/ca-bundle.crt b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/ca-bundle.crt
deleted file mode 100644
index 43203a8..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/ca-bundle.crt
+++ /dev/null
@@ -1,3920 +0,0 @@
-##
-## ca-bundle.crt -- Bundle of CA Root Certificates
-##
-## Certificate data from Mozilla as of: Thu Oct 18 19:05:59 2012
-##
-## This is a bundle of X.509 certificates of public Certificate Authorities
-## (CA). These were automatically extracted from Mozilla's root certificates
-## file (certdata.txt). This file can be found in the mozilla source tree:
-## http://mxr.mozilla.org/mozilla/source/security/nss/lib/ckfw/builtins/certdata.txt?raw=1
-##
-## It contains the certificates in PEM format and therefore
-## can be directly used with curl / libcurl / php_curl, or with
-## an Apache+mod_ssl webserver for SSL client authentication.
-## Just configure this file as the SSLCACertificateFile.
-##
-
-# @(#) $RCSfile: certdata.txt,v $ $Revision: 1.86 $ $Date: 2012/10/18 16:26:52 $
-
-GTE CyberTrust Global Root
-==========================
------BEGIN CERTIFICATE-----
-MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYDVQQKEw9HVEUg
-Q29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNvbHV0aW9ucywgSW5jLjEjMCEG
-A1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJvb3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEz
-MjM1OTAwWjB1MQswCQYDVQQGEwJVUzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQL
-Ex5HVEUgQ3liZXJUcnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0
-IEdsb2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrHiM3dFw4u
-sJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTSr41tiGeA5u2ylc9yMcql
-HHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X404Wqk2kmhXBIgD8SFcd5tB8FLztimQID
-AQABMA0GCSqGSIb3DQEBBAUAA4GBAG3rGwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMW
-M4ETCJ57NE7fQMh017l93PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OF
-NMQkpw0PlZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/
------END CERTIFICATE-----
-
-Thawte Server CA
-================
------BEGIN CERTIFICATE-----
-MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT
-DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs
-dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UE
-AxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5j
-b20wHhcNOTYwODAxMDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNV
-BAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29u
-c3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcG
-A1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0
-ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl
-/Kj0R1HahbUgdJSGHg91yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg7
-1CcEJRCXL+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGjEzAR
-MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG7oWDTSEwjsrZqG9J
-GubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6eQNuozDJ0uW8NxuOzRAvZim+aKZuZ
-GCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZqdq5snUb9kLy78fyGPmJvKP/iiMucEc=
------END CERTIFICATE-----
-
-Thawte Premium Server CA
-========================
------BEGIN CERTIFICATE-----
-MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkExFTATBgNVBAgT
-DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs
-dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UE
-AxMYVGhhd3RlIFByZW1pdW0gU2VydmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZl
-ckB0aGF3dGUuY29tMB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYT
-AlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMU
-VGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2
-aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNlcnZlciBDQTEoMCYGCSqGSIb3DQEJARYZ
-cHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2
-aovXwlue2oFBYo847kkEVdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIh
-Udib0GfQug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMRuHM/
-qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQFAAOBgQAm
-SCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUIhfzJATj/Tb7yFkJD57taRvvBxhEf
-8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JMpAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7t
-UCemDaYj+bvLpgcUQg==
------END CERTIFICATE-----
-
-Equifax Secure CA
-=================
------BEGIN CERTIFICATE-----
-MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEQMA4GA1UE
-ChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5
-MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoT
-B0VxdWlmYXgxLTArBgNVBAsTJEVxdWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCB
-nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPR
-fM6fBeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+AcJkVV5MW
-8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kCAwEAAaOCAQkwggEFMHAG
-A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UE
-CxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoG
-A1UdEAQTMBGBDzIwMTgwODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvS
-spXXR9gjIBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQFMAMB
-Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAFjOKer89961
-zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y7qj/WsjTVbJmcVfewCHrPSqnI0kB
-BIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee95
-70+sB3c4
------END CERTIFICATE-----
-
-Digital Signature Trust Co. Global CA 1
-=======================================
------BEGIN CERTIFICATE-----
-MIIDKTCCApKgAwIBAgIENnAVljANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJVUzEkMCIGA1UE
-ChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQLEwhEU1RDQSBFMTAeFw05ODEy
-MTAxODEwMjNaFw0xODEyMTAxODQwMjNaMEYxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFs
-IFNpZ25hdHVyZSBUcnVzdCBDby4xETAPBgNVBAsTCERTVENBIEUxMIGdMA0GCSqGSIb3DQEBAQUA
-A4GLADCBhwKBgQCgbIGpzzQeJN3+hijM3oMv+V7UQtLodGBmE5gGHKlREmlvMVW5SXIACH7TpWJE
-NySZj9mDSI+ZbZUTu0M7LklOiDfBu1h//uG9+LthzfNHwJmm8fOR6Hh8AMthyUQncWlVSn5JTe2i
-o74CTADKAqjuAQIxZA9SLRN0dja1erQtcQIBA6OCASQwggEgMBEGCWCGSAGG+EIBAQQEAwIABzBo
-BgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0
-dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgRTExDTALBgNVBAMTBENSTDEwKwYDVR0QBCQw
-IoAPMTk5ODEyMTAxODEwMjNagQ8yMDE4MTIxMDE4MTAyM1owCwYDVR0PBAQDAgEGMB8GA1UdIwQY
-MBaAFGp5fpFpRhgTCgJ3pVlbYJglDqL4MB0GA1UdDgQWBBRqeX6RaUYYEwoCd6VZW2CYJQ6i+DAM
-BgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4GB
-ACIS2Hod3IEGtgllsofIH160L+nEHvI8wbsEkBFKg05+k7lNQseSJqBcNJo4cvj9axY+IO6CizEq
-kzaFI4iKPANo08kJD038bKTaKHKTDomAsH3+gG9lbRgzl4vCa4nuYD3Im+9/KzJic5PLPON74nZ4
-RbyhkwS7hp86W0N6w4pl
------END CERTIFICATE-----
-
-Digital Signature Trust Co. Global CA 3
-=======================================
------BEGIN CERTIFICATE-----
-MIIDKTCCApKgAwIBAgIENm7TzjANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJVUzEkMCIGA1UE
-ChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQLEwhEU1RDQSBFMjAeFw05ODEy
-MDkxOTE3MjZaFw0xODEyMDkxOTQ3MjZaMEYxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFs
-IFNpZ25hdHVyZSBUcnVzdCBDby4xETAPBgNVBAsTCERTVENBIEUyMIGdMA0GCSqGSIb3DQEBAQUA
-A4GLADCBhwKBgQC/k48Xku8zExjrEH9OFr//Bo8qhbxe+SSmJIi2A7fBw18DW9Fvrn5C6mYjuGOD
-VvsoLeE4i7TuqAHhzhy2iCoiRoX7n6dwqUcUP87eZfCocfdPJmyMvMa1795JJ/9IKn3oTQPMx7JS
-xhcxEzu1TdvIxPbDDyQq2gyd55FbgM2UnQIBA6OCASQwggEgMBEGCWCGSAGG+EIBAQQEAwIABzBo
-BgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0
-dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgRTIxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQw
-IoAPMTk5ODEyMDkxOTE3MjZagQ8yMDE4MTIwOTE5MTcyNlowCwYDVR0PBAQDAgEGMB8GA1UdIwQY
-MBaAFB6CTShlgDzJQW6sNS5ay97u+DlbMB0GA1UdDgQWBBQegk0oZYA8yUFurDUuWsve7vg5WzAM
-BgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4GB
-AEeNg61i8tuwnkUiBbmi1gMOOHLnnvx75pO2mqWilMg0HZHRxdf0CiUPPXiBng+xZ8SQTGPdXqfi
-up/1902lMXucKS1M/mQ+7LZT/uqb7YLbdHVLB3luHtgZg3Pe9T7Qtd7nS2h9Qy4qIOF+oHhEngj1
-mPnHfxsb1gYgAlihw6ID
------END CERTIFICATE-----
-
-Verisign Class 3 Public Primary Certification Authority
-=======================================================
------BEGIN CERTIFICATE-----
-MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkGA1UEBhMCVVMx
-FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmltYXJ5
-IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVow
-XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAz
-IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA
-A4GNADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhEBarsAx94
-f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/isI19wKTakyYbnsZogy1Ol
-hec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0GCSqGSIb3DQEBAgUAA4GBALtMEivPLCYA
-TxQT3ab7/AoRhIzzKBxnki98tsX63/Dolbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59Ah
-WM1pF+NEHJwZRDmJXNycAA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2Omuf
-Tqj/ZA1k
------END CERTIFICATE-----
-
-Verisign Class 1 Public Primary Certification Authority - G2
-============================================================
------BEGIN CERTIFICATE-----
-MIIDAjCCAmsCEEzH6qqYPnHTkxD4PTqJkZIwDQYJKoZIhvcNAQEFBQAwgcExCzAJBgNVBAYTAlVT
-MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMgUHJpbWFy
-eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
-biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
-dCBOZXR3b3JrMB4XDTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVT
-MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMgUHJpbWFy
-eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
-biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
-dCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCq0Lq+Fi24g9TK0g+8djHKlNgd
-k4xWArzZbxpvUjZudVYKVdPfQ4chEWWKfo+9Id5rMj8bhDSVBZ1BNeuS65bdqlk/AVNtmU/t5eIq
-WpDBucSmFc/IReumXY6cPvBkJHalzasab7bYe1FhbqZ/h8jit+U03EGI6glAvnOSPWvndQIDAQAB
-MA0GCSqGSIb3DQEBBQUAA4GBAKlPww3HZ74sy9mozS11534Vnjty637rXC0Jh9ZrbWB85a7FkCMM
-XErQr7Fd88e2CtvgFZMN3QO8x3aKtd1Pw5sTdbgBwObJW2uluIncrKTdcu1OofdPvAbT6shkdHvC
-lUGcZXNY8ZCaPGqxmMnEh7zPRW1F4m4iP/68DzFc6PLZ
------END CERTIFICATE-----
-
-Verisign Class 2 Public Primary Certification Authority - G2
-============================================================
------BEGIN CERTIFICATE-----
-MIIDAzCCAmwCEQC5L2DMiJ+hekYJuFtwbIqvMA0GCSqGSIb3DQEBBQUAMIHBMQswCQYDVQQGEwJV
-UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGljIFByaW1h
-cnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNp
-Z24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1
-c3QgTmV0d29yazAeFw05ODA1MTgwMDAwMDBaFw0yODA4MDEyMzU5NTlaMIHBMQswCQYDVQQGEwJV
-UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGljIFByaW1h
-cnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNp
-Z24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1
-c3QgTmV0d29yazCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAp4gBIXQs5xoD8JjhlzwPIQjx
-nNuX6Zr8wgQGE75fUsjMHiwSViy4AWkszJkfrbCWrnkE8hM5wXuYuggs6MKEEyyqaekJ9MepAqRC
-wiNPStjwDqL7MWzJ5m+ZJwf15vRMeJ5t60aG+rmGyVTyssSv1EYcWskVMP8NbPUtDm3Of3cCAwEA
-ATANBgkqhkiG9w0BAQUFAAOBgQByLvl/0fFx+8Se9sVeUYpAmLho+Jscg9jinb3/7aHmZuovCfTK
-1+qlK5X2JGCGTUQug6XELaDTrnhpb3LabK4I8GOSN+a7xDAXrXfMSTWqz9iP0b63GJZHc2pUIjRk
-LbYWm1lbtFFZOrMLFPQS32eg9K0yZF6xRnInjBJ7xUS0rg==
------END CERTIFICATE-----
-
-Verisign Class 3 Public Primary Certification Authority - G2
-============================================================
------BEGIN CERTIFICATE-----
-MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJBgNVBAYTAlVT
-MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFy
-eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
-biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
-dCBOZXR3b3JrMB4XDTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVT
-MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFy
-eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
-biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
-dCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCO
-FoUgRm1HP9SFIIThbbP4pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71
-lSk8UOg013gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwIDAQAB
-MA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSkU01UbSuvDV1Ai2TT
-1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7iF6YM40AIOw7n60RzKprxaZLvcRTD
-Oaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpYoJ2daZH9
------END CERTIFICATE-----
-
-GlobalSign Root CA
-==================
------BEGIN CERTIFICATE-----
-MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkGA1UEBhMCQkUx
-GTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jvb3QgQ0ExGzAZBgNVBAMTEkds
-b2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAwMDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNV
-BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYD
-VQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDa
-DuaZjc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavpxy0Sy6sc
-THAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp1Wrjsok6Vjk4bwY8iGlb
-Kk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdGsnUOhugZitVtbNV4FpWi6cgKOOvyJBNP
-c1STE4U6G7weNLWLBYy5d4ux2x8gkasJU26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrX
-gzT/LCrBbBlDSgeF59N89iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV
-HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0BAQUF
-AAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOzyj1hTdNGCbM+w6Dj
-Y1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE38NflNUVyRRBnMRddWQVDf9VMOyG
-j/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymPAbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhH
-hm4qxFYxldBniYUr+WymXUadDKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveC
-X4XSQRjbgbMEHMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
------END CERTIFICATE-----
-
-GlobalSign Root CA - R2
-=======================
------BEGIN CERTIFICATE-----
-MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4GA1UECxMXR2xv
-YmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh
-bFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT
-aWduIFJvb3QgQ0EgLSBSMjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln
-bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6
-ErPLv4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8eoLrvozp
-s6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklqtTleiDTsvHgMCJiEbKjN
-S7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzdC9XZzPnqJworc5HGnRusyMvo4KD0L5CL
-TfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pazq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6C
-ygPCm48CAwEAAaOBnDCBmTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E
-FgQUm+IHV2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9i
-YWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG3lm0mi3f3BmGLjAN
-BgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4GsJ0/WwbgcQ3izDJr86iw8bmEbTUsp
-9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu
-01yiPqFbQfXf5WRDLenVOavSot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG7
-9G+dwfCMNYxdAfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7
-TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==
------END CERTIFICATE-----
-
-ValiCert Class 1 VA
-===================
------BEGIN CERTIFICATE-----
-MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp
-b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
-YXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh
-bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNTIy
-MjM0OFoXDTE5MDYyNTIyMjM0OFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0
-d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEg
-UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0
-LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA
-A4GNADCBiQKBgQDYWYJ6ibiWuqYvaG9YLqdUHAZu9OqNSLwxlBfw8068srg1knaw0KWlAdcAAxIi
-GQj4/xEjm84H9b9pGib+TunRf50sQB1ZaG6m+FiwnRqP0z/x3BkGgagO4DrdyFNFCQbmD3DD+kCm
-DuJWBQ8YTfwggtFzVXSNdnKgHZ0dwN0/cQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFBoPUn0LBwG
-lN+VYH+Wexf+T3GtZMjdd9LvWVXoP+iOBSoh8gfStadS/pyxtuJbdxdA6nLWI8sogTLDAHkY7FkX
-icnGah5xyf23dKUlRWnFSKsZ4UWKJWsZ7uW7EvV/96aNUcPwnXS3qT6gpf+2SQMT2iLM7XGCK5nP
-Orf1LXLI
------END CERTIFICATE-----
-
-ValiCert Class 2 VA
-===================
------BEGIN CERTIFICATE-----
-MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp
-b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
-YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh
-bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAw
-MTk1NFoXDTE5MDYyNjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0
-d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIg
-UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0
-LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA
-A4GNADCBiQKBgQDOOnHK5avIWZJV16vYdA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVC
-CSRrCl6zfN1SLUzm1NZ9WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7Rf
-ZHM047QSv4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9vUJSZ
-SWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTuIYEZoDJJKPTEjlbV
-UjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwCW/POuZ6lcg5Ktz885hZo+L7tdEy8
-W9ViH0Pd
------END CERTIFICATE-----
-
-RSA Root Certificate 1
-======================
------BEGIN CERTIFICATE-----
-MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp
-b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
-YXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh
-bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAw
-MjIzM1oXDTE5MDYyNjAwMjIzM1owgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0
-d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMg
-UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0
-LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA
-A4GNADCBiQKBgQDjmFGWHOjVsQaBalfDcnWTq8+epvzzFlLWLU2fNUSoLgRNB0mKOCn1dzfnt6td
-3zZxFJmP3MKS8edgkpfs2Ejcv8ECIMYkpChMMFp2bbFc893enhBxoYjHW5tBbcqwuI4V7q0zK89H
-BFx1cQqYJJgpp0lZpd34t0NiYfPT4tBVPwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFa7AliEZwgs
-3x/be0kz9dNnnfS0ChCzycUs4pJqcXgn8nCDQtM+z6lU9PHYkhaM0QTLS6vJn0WuPIqpsHEzXcjF
-V9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/APhmcGcwTTYJBtYze4D1gCCAPRX5r
-on+jjBXu
------END CERTIFICATE-----
-
-Verisign Class 1 Public Primary Certification Authority - G3
-============================================================
------BEGIN CERTIFICATE-----
-MIIEGjCCAwICEQCLW3VWhFSFCwDPrzhIzrGkMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
-UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
-cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
-IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
-dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
-CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
-dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
-cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDEgUHVibGljIFByaW1hcnkg
-Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
-ggEBAN2E1Lm0+afY8wR4nN493GwTFtl63SRRZsDHJlkNrAYIwpTRMx/wgzUfbhvI3qpuFU5UJ+/E
-bRrsC+MO8ESlV8dAWB6jRx9x7GD2bZTIGDnt/kIYVt/kTEkQeE4BdjVjEjbdZrwBBDajVWjVojYJ
-rKshJlQGrT/KFOCsyq0GHZXi+J3x4GD/wn91K0zM2v6HmSHquv4+VNfSWXjbPG7PoBMAGrgnoeS+
-Z5bKoMWznN3JdZ7rMJpfo83ZrngZPyPpXNspva1VyBtUjGP26KbqxzcSXKMpHgLZ2x87tNcPVkeB
-FQRKr4Mn0cVYiMHd9qqnoxjaaKptEVHhv2Vrn5Z20T0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
-q2aN17O6x5q25lXQBfGfMY1aqtmqRiYPce2lrVNWYgFHKkTp/j90CxObufRNG7LRX7K20ohcs5/N
-y9Sn2WCVhDr4wTcdYcrnsMXlkdpUpqwxga6X3s0IrLjAl4B/bnKk52kTlWUfxJM8/XmPBNQ+T+r3
-ns7NZ3xPZQL/kYVUc8f/NveGLezQXk//EZ9yBta4GvFMDSZl4kSAHsef493oCtrspSCAaWihT37h
-a88HQfqDjrw43bAuEbFrskLMmrz5SCJ5ShkPshw+IHTZasO+8ih4E1Z5T21Q6huwtVexN2ZYI/Pc
-D98Kh8TvhgXVOBRgmaNL3gaWcSzy27YfpO8/7g==
------END CERTIFICATE-----
-
-Verisign Class 2 Public Primary Certification Authority - G3
-============================================================
------BEGIN CERTIFICATE-----
-MIIEGTCCAwECEGFwy0mMX5hFKeewptlQW3owDQYJKoZIhvcNAQEFBQAwgcoxCzAJBgNVBAYTAlVT
-MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29y
-azE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ug
-b25seTFFMEMGA1UEAxM8VmVyaVNpZ24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0
-aW9uIEF1dGhvcml0eSAtIEczMB4XDTk5MTAwMTAwMDAwMFoXDTM2MDcxNjIzNTk1OVowgcoxCzAJ
-BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1
-c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9y
-aXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNpZ24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBD
-ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
-AQEArwoNwtUs22e5LeWUJ92lvuCwTY+zYVY81nzD9M0+hsuiiOLh2KRpxbXiv8GmR1BeRjmL1Za6
-tW8UvxDOJxOeBUebMXoT2B/Z0wI3i60sR/COgQanDTAM6/c8DyAd3HJG7qUCyFvDyVZpTMUYwZF7
-C9UTAJu878NIPkZgIIUq1ZC2zYugzDLdt/1AVbJQHFauzI13TccgTacxdu9okoqQHgiBVrKtaaNS
-0MscxCM9H5n+TOgWY47GCI72MfbS+uV23bUckqNJzc0BzWjNqWm6o+sdDZykIKbBoMXRRkwXbdKs
-Zj+WjOCE1Db/IlnF+RFgqF8EffIa9iVCYQ/ESrg+iQIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQA0
-JhU8wI1NQ0kdvekhktdmnLfexbjQ5F1fdiLAJvmEOjr5jLX77GDx6M4EsMjdpwOPMPOY36TmpDHf
-0xwLRtxyID+u7gU8pDM/CzmscHhzS5kr3zDCVLCoO1Wh/hYozUK9dG6A2ydEp85EXdQbkJgNHkKU
-sQAsBNB0owIFImNjzYO1+8FtYmtpdf1dcEG59b98377BMnMiIYtYgXsVkXq642RIsH/7NiXaldDx
-JBQX3RiAa0YjOVT1jmIJBB2UkKab5iXiQkWquJCtvgiPqQtCGJTPcjnhsUPgKM+351psE2tJs//j
-GHyJizNdrDPXp/naOlXJWBD5qu9ats9LS98q
------END CERTIFICATE-----
-
-Verisign Class 3 Public Primary Certification Authority - G3
-============================================================
------BEGIN CERTIFICATE-----
-MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
-UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
-cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
-IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
-dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
-CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
-dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
-cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkg
-Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
-ggEBAMu6nFL8eB8aHm8bN3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1
-EUGO+i2tKmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGukxUc
-cLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBmCC+Vk7+qRy+oRpfw
-EuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJXwzw3sJ2zq/3avL6QaaiMxTJ5Xpj
-055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWuimi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
-ERSWwauSCPc/L8my/uRan2Te2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5f
-j267Cz3qWhMeDGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC
-/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565pF4ErWjfJXir0
-xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGtTxzhT5yvDwyd93gN2PQ1VoDa
-t20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ==
------END CERTIFICATE-----
-
-Verisign Class 4 Public Primary Certification Authority - G3
-============================================================
------BEGIN CERTIFICATE-----
-MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
-UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
-cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
-IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
-dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
-CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
-dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
-cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkg
-Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
-ggEBAK3LpRFpxlmr8Y+1GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaS
-tBO3IFsJ+mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0GbdU6LM
-8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLmNxdLMEYH5IBtptiW
-Lugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XYufTsgsbSPZUd5cBPhMnZo0QoBmrX
-Razwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
-j/ola09b5KROJ1WrIhVZPMq1CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXtt
-mhwwjIDLk5Mqg6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm
-fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c2NU8Qh0XwRJd
-RTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/bLvSHgCwIe34QWKCudiyxLtG
-UPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg==
------END CERTIFICATE-----
-
-Entrust.net Secure Server CA
-============================
------BEGIN CERTIFICATE-----
-MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMCVVMxFDASBgNV
-BAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5uZXQvQ1BTIGluY29ycC4gYnkg
-cmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRl
-ZDE6MDgGA1UEAxMxRW50cnVzdC5uZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhv
-cml0eTAeFw05OTA1MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIG
-A1UEChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBi
-eSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1p
-dGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0
-aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQ
-aO2f55M28Qpku0f1BBc/I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5
-gXpa0zf3wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OCAdcw
-ggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHboIHYpIHVMIHSMQsw
-CQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5l
-dC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF
-bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENl
-cnRpZmljYXRpb24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu
-dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0MFqBDzIwMTkw
-NTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8BdiE1U9s/8KAGv7UISX8+1i0Bow
-HQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAaMAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EA
-BAwwChsEVjQuMAMCBJAwDQYJKoZIhvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyN
-Ewr75Ji174z4xRAN95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9
-n9cd2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI=
------END CERTIFICATE-----
-
-Entrust.net Premium 2048 Secure Server CA
-=========================================
------BEGIN CERTIFICATE-----
-MIIEXDCCA0SgAwIBAgIEOGO5ZjANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u
-ZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBpbmNvcnAuIGJ5IHJlZi4gKGxp
-bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV
-BAMTKkVudHJ1c3QubmV0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQx
-NzUwNTFaFw0xOTEyMjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3
-d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl
-MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5u
-ZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
-MIIBCgKCAQEArU1LqRKGsuqjIAcVFmQqK0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOL
-Gp18EzoOH1u3Hs/lJBQesYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSr
-hRSGlVuXMlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVTXTzW
-nLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/HoZdenoVve8AjhUi
-VBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH4QIDAQABo3QwcjARBglghkgBhvhC
-AQEEBAMCAAcwHwYDVR0jBBgwFoAUVeSB0RGAvtiJuQijMfmhJAkWuXAwHQYDVR0OBBYEFFXkgdER
-gL7YibkIozH5oSQJFrlwMB0GCSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0B
-AQUFAAOCAQEAWUesIYSKF8mciVMeuoCFGsY8Tj6xnLZ8xpJdGGQC49MGCBFhfGPjK50xA3B20qMo
-oPS7mmNz7W3lKtvtFKkrxjYR0CvrB4ul2p5cGZ1WEvVUKcgF7bISKo30Axv/55IQh7A6tcOdBTcS
-o8f0FbnVpDkWm1M6I5HxqIKiaohowXkCIryqptau37AUX7iH0N18f3v/rxzP5tsHrV7bhZ3QKw0z
-2wTR5klAEyt2+z7pnIkPFc4YsIV4IU9rTw76NmfNB/L/CNDi3tm/Kq+4h4YhPATKt5Rof8886ZjX
-OP/swNlQ8C5LWK5Gb9Auw2DaclVyvUxFnmG6v4SBkgPR0ml8xQ==
------END CERTIFICATE-----
-
-Baltimore CyberTrust Root
-=========================
------BEGIN CERTIFICATE-----
-MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJRTESMBAGA1UE
-ChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYDVQQDExlCYWx0aW1vcmUgQ3li
-ZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoXDTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMC
-SUUxEjAQBgNVBAoTCUJhbHRpbW9yZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFs
-dGltb3JlIEN5YmVyVHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKME
-uyKrmD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjrIZ3AQSsB
-UnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeKmpYcqWe4PwzV9/lSEy/C
-G9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSuXmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9
-XbIGevOF6uvUA65ehD5f/xXtabz5OTZydc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjpr
-l3RjM71oGDHweI12v/yejl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoI
-VDaGezq1BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEB
-BQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT929hkTI7gQCvlYpNRh
-cL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3WgxjkzSswF07r51XgdIGn9w/xZchMB5
-hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsa
-Y71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H
-RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp
------END CERTIFICATE-----
-
-Equifax Secure Global eBusiness CA
-==================================
------BEGIN CERTIFICATE-----
-MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
-RXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBTZWN1cmUgR2xvYmFsIGVCdXNp
-bmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIwMDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMx
-HDAaBgNVBAoTE0VxdWlmYXggU2VjdXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEds
-b2JhbCBlQnVzaW5lc3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRV
-PEnCUdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc58O/gGzN
-qfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/o5brhTMhHD4ePmBudpxn
-hcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAHMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0j
-BBgwFoAUvqigdHJQa0S3ySPY+6j/s1draGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hs
-MA0GCSqGSIb3DQEBBAUAA4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okEN
-I7SS+RkAZ70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv8qIY
-NMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV
------END CERTIFICATE-----
-
-Equifax Secure eBusiness CA 1
-=============================
------BEGIN CERTIFICATE-----
-MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
-RXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENB
-LTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQwMDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UE
-ChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNz
-IENBLTEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ
-1MRoRvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBuWqDZQu4a
-IZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKwEnv+j6YDAgMBAAGjZjBk
-MBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFEp4MlIR21kW
-Nl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRKeDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQF
-AAOBgQB1W6ibAxHm6VZMzfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5
-lSE/9dR+WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN/Bf+
-KpYrtWKmpj29f5JZzVoqgrI3eQ==
------END CERTIFICATE-----
-
-Equifax Secure eBusiness CA 2
-=============================
------BEGIN CERTIFICATE-----
-MIIDIDCCAomgAwIBAgIEN3DPtTANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEXMBUGA1UE
-ChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2VjdXJlIGVCdXNpbmVzcyBDQS0y
-MB4XDTk5MDYyMzEyMTQ0NVoXDTE5MDYyMzEyMTQ0NVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoT
-DkVxdWlmYXggU2VjdXJlMSYwJAYDVQQLEx1FcXVpZmF4IFNlY3VyZSBlQnVzaW5lc3MgQ0EtMjCB
-nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA5Dk5kx5SBhsoNviyoynF7Y6yEb3+6+e0dMKP/wXn
-2Z0GvxLIPw7y1tEkshHe0XMJitSxLJgJDR5QRrKDpkWNYmi7hRsgcDKqQM2mll/EcTc/BPO3QSQ5
-BxoeLmFYoBIL5aXfxavqN3HMHMg3OrmXUqesxWoklE6ce8/AatbfIb0CAwEAAaOCAQkwggEFMHAG
-A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORXF1aWZheCBTZWN1cmUx
-JjAkBgNVBAsTHUVxdWlmYXggU2VjdXJlIGVCdXNpbmVzcyBDQS0yMQ0wCwYDVQQDEwRDUkwxMBoG
-A1UdEAQTMBGBDzIwMTkwNjIzMTIxNDQ1WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUUJ4L6q9e
-uSBIplBqy/3YIHqngnYwHQYDVR0OBBYEFFCeC+qvXrkgSKZQasv92CB6p4J2MAwGA1UdEwQFMAMB
-Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAAyGgq3oThr1
-jokn4jVYPSm0B482UJW/bsGe68SQsoWou7dC4A8HOd/7npCy0cE+U58DRLB+S/Rv5Hwf5+Kx5Lia
-78O9zt4LMjTZ3ijtM2vE1Nc9ElirfQkty3D1E4qUoSek1nDFbZS1yX2doNLGCEnZZpum0/QL3MUm
-V+GRMOrN
------END CERTIFICATE-----
-
-AddTrust Low-Value Services Root
-================================
------BEGIN CERTIFICATE-----
-MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
-QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRU
-cnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMwMTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQsw
-CQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBO
-ZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEB
-AQUAA4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ulCDtbKRY6
-54eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6ntGO0/7Gcrjyvd7ZWxbWr
-oulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyldI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1
-Zmne3yzxbrww2ywkEtvrNTVokMsAsJchPXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJui
-GMx1I4S+6+JNM3GOGvDC+Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8w
-HQYDVR0OBBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8EBTAD
-AQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBlMQswCQYDVQQGEwJT
-RTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEw
-HwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxt
-ZBsfzQ3duQH6lmM0MkhHma6X7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0Ph
-iVYrqW9yTkkz43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY
-eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJlpz/+0WatC7xr
-mYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOAWiFeIc9TVPC6b4nbqKqVz4vj
-ccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk=
------END CERTIFICATE-----
-
-AddTrust External Root
-======================
------BEGIN CERTIFICATE-----
-MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
-QWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYD
-VQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEw
-NDgzOFowbzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRU
-cnVzdCBFeHRlcm5hbCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0Eg
-Um9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvtH7xsD821
-+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9uMq/NzgtHj6RQa1wVsfw
-Tz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzXmk6vBbOmcZSccbNQYArHE504B4YCqOmo
-aSYYkKtMsE8jqzpPhNjfzp/haW+710LXa0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy
-2xSoRcRdKn23tNbE7qzNE0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv7
-7+ldU9U0WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYDVR0P
-BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0Jvf6xCZU7wO94CTL
-VBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEmMCQGA1UECxMdQWRk
-VHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsxIjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENB
-IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZl
-j7DYd7usQWxHYINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5
-6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvCNr4TDea9Y355
-e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEXc4g/VhsxOBi0cQ+azcgOno4u
-G+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5amnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
------END CERTIFICATE-----
-
-AddTrust Public Services Root
-=============================
------BEGIN CERTIFICATE-----
-MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
-QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSAwHgYDVQQDExdBZGRU
-cnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAxMDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJ
-BgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5l
-dHdvcmsxIDAeBgNVBAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEF
-AAOCAQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV6tsfSlbu
-nyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nXGCwwfQ56HmIexkvA/X1i
-d9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnPdzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSG
-Aa2Il+tmzV7R/9x98oTaunet3IAIx6eH1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAw
-HM+A+WD+eeSI8t0A65RF62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0G
-A1UdDgQWBBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
-/zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDELMAkGA1UEBhMCU0Ux
-FDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29yazEgMB4G
-A1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4
-JNojVhaTdt02KLmuG7jD8WS6IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL
-+YPoRNWyQSW/iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao
-GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh4SINhwBk/ox9
-Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQmXiLsks3/QppEIW1cxeMiHV9H
-EufOX1362KqxMy3ZdvJOOjMMK7MtkAY=
------END CERTIFICATE-----
-
-AddTrust Qualified Certificates Root
-====================================
------BEGIN CERTIFICATE-----
-MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
-QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSMwIQYDVQQDExpBZGRU
-cnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcx
-CzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQ
-IE5ldHdvcmsxIzAhBgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG
-9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwqxBb/4Oxx
-64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G87B4pfYOQnrjfxvM0PC3
-KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i2O+tCBGaKZnhqkRFmhJePp1tUvznoD1o
-L/BLcHwTOK28FSXx1s6rosAx1i+f4P8UWfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GR
-wVY18BTcZTYJbqukB8c10cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HU
-MIHRMB0GA1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/
-BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6FrpGkwZzELMAkGA1UE
-BhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29y
-azEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlmaWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQAD
-ggEBABmrder4i2VhlRO6aQTvhsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxG
-GuoYQ992zPlmhpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X
-dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3P6CxB9bpT9ze
-RXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9YiQBCYz95OdBEsIJuQRno3eDB
-iFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5noxqE=
------END CERTIFICATE-----
-
-Entrust Root Certification Authority
-====================================
------BEGIN CERTIFICATE-----
-MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMCVVMxFjAUBgNV
-BAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0Lm5ldC9DUFMgaXMgaW5jb3Jw
-b3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMWKGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsG
-A1UEAxMkRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0
-MloXDTI2MTEyNzIwNTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMu
-MTkwNwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSByZWZlcmVu
-Y2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNVBAMTJEVudHJ1c3QgUm9v
-dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
-ALaVtkNC+sZtKm9I35RMOVcF7sN5EUFoNu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYsz
-A9u3g3s+IIRe7bJWKKf44LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOww
-Cj0Yzfv9KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGIrb68
-j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi94DkZfs0Nw4pgHBN
-rziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOBsDCBrTAOBgNVHQ8BAf8EBAMCAQYw
-DwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAigA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1
-MzQyWjAfBgNVHSMEGDAWgBRokORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DH
-hmak8fdLQ/uEvW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA
-A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9tO1KzKtvn1ISM
-Y/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6ZuaAGAT/3B+XxFNSRuzFVJ7yVTa
-v52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTS
-W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0
-tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8
------END CERTIFICATE-----
-
-RSA Security 2048 v3
-====================
------BEGIN CERTIFICATE-----
-MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6MRkwFwYDVQQK
-ExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJpdHkgMjA0OCBWMzAeFw0wMTAy
-MjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAXBgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAb
-BgNVBAsTFFJTQSBTZWN1cml0eSAyMDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
-AQEAt49VcdKA3XtpeafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37RqtBaB4Y6lXIL5F4iSj7
-Jylg/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3OTsor8udGuorryGlwSMiuLgb
-WhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYqODGBDSnhAMFRD0xS+ARaqn1y07iH
-KrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP
-+Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpuAWgXIszACwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/
-MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4E
-FgQUB8NRMKSq6UWuNST6/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYcHnmY
-v/3VEhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/Zb5gEydxiKRz44Rj
-0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+f00/FGj1EVDVwfSQpQgdMWD/YIwj
-VAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJqaHVOrSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395
-nzIlQnQFgCi/vcEkllgVsRch6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kA
-pKnXwiJPZ9d37CAFYd4=
------END CERTIFICATE-----
-
-GeoTrust Global CA
-==================
------BEGIN CERTIFICATE-----
-MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVTMRYwFAYDVQQK
-Ew1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9iYWwgQ0EwHhcNMDIwNTIxMDQw
-MDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j
-LjEbMBkGA1UEAxMSR2VvVHJ1c3QgR2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
-CgKCAQEA2swYYzD99BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjo
-BbdqfnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDviS2Aelet
-8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU1XupGc1V3sjs0l44U+Vc
-T4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+bw8HHa8sHo9gOeL6NlMTOdReJivbPagU
-vTLrGAMoUgRx5aszPeE4uwc2hGKceeoWMPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTAD
-AQH/MB0GA1UdDgQWBBTAephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVk
-DBF9qn1luMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKInZ57Q
-zxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfStQWVYrmm3ok9Nns4
-d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcFPseKUgzbFbS9bZvlxrFUaKnjaZC2
-mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Unhw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6p
-XE0zX5IJL4hmXXeXxx12E6nV5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvm
-Mw==
------END CERTIFICATE-----
-
-GeoTrust Global CA 2
-====================
------BEGIN CERTIFICATE-----
-MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
-R2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwHhcNMDQwMzA0MDUw
-MDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j
-LjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
-ggEKAoIBAQDvPE1APRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/
-NTL8Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hLTytCOb1k
-LUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL5mkWRxHCJ1kDs6ZgwiFA
-Vvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7S4wMcoKK+xfNAGw6EzywhIdLFnopsk/b
-HdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQF
-MAMBAf8wHQYDVR0OBBYEFHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNH
-K266ZUapEBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6tdEPx7
-srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv/NgdRN3ggX+d6Yvh
-ZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywNA0ZF66D0f0hExghAzN4bcLUprbqL
-OzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkC
-x1YAzUm5s2x7UwQa4qjJqhIFI8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqF
-H4z1Ir+rzoPz4iIprn2DQKi6bA==
------END CERTIFICATE-----
-
-GeoTrust Universal CA
-=====================
------BEGIN CERTIFICATE-----
-MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
-R2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVyc2FsIENBMB4XDTA0MDMwNDA1
-MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IElu
-Yy4xHjAcBgNVBAMTFUdlb1RydXN0IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIP
-ADCCAgoCggIBAKYVVaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9t
-JPi8cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTTQjOgNB0e
-RXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFhF7em6fgemdtzbvQKoiFs
-7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2vc7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d
-8Lsrlh/eezJS/R27tQahsiFepdaVaH/wmZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7V
-qnJNk22CDtucvc+081xdVHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3Cga
-Rr0BHdCXteGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZf9hB
-Z3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfReBi9Fi1jUIxaS5BZu
-KGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+nhutxx9z3SxPGWX9f5NAEC7S8O08
-ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0
-XG0D08DYj3rWMB8GA1UdIwQYMBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIB
-hjANBgkqhkiG9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc
-aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fXIwjhmF7DWgh2
-qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzynANXH/KttgCJwpQzgXQQpAvvL
-oJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0zuzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsK
-xr2EoyNB3tZ3b4XUhRxQ4K5RirqNPnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxF
-KyDuSN/n3QmOGKjaQI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2
-DFKWkoRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9ER/frslK
-xfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQtDF4JbAiXfKM9fJP/P6EU
-p8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/SfuvmbJxPgWp6ZKy7PtXny3YuxadIwVyQD8vI
-P/rmMuGNG2+k5o7Y+SlIis5z/iw=
------END CERTIFICATE-----
-
-GeoTrust Universal CA 2
-=======================
------BEGIN CERTIFICATE-----
-MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
-R2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwHhcNMDQwMzA0
-MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3Qg
-SW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUA
-A4ICDwAwggIKAoICAQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0
-DE81WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUGFF+3Qs17
-j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdqXbboW0W63MOhBW9Wjo8Q
-JqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxLse4YuU6W3Nx2/zu+z18DwPw76L5GG//a
-QMJS9/7jOvdqdzXQ2o3rXhhqMcceujwbKNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2
-WP0+GfPtDCapkzj4T8FdIgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP
-20gaXT73y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRthAAn
-ZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgocQIgfksILAAX/8sgC
-SqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4Lt1ZrtmhN79UNdxzMk+MBB4zsslG
-8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2
-+/CfXGJx7Tz0RzgQKzAfBgNVHSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8E
-BAMCAYYwDQYJKoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z
-dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQL1EuxBRa3ugZ
-4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgrFg5fNuH8KrUwJM/gYwx7WBr+
-mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSoag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpq
-A1Ihn0CoZ1Dy81of398j9tx4TuaYT1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpg
-Y+RdM4kX2TGq2tbzGDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiP
-pm8m1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJVOCiNUW7d
-FGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH6aLcr34YEoP9VhdBLtUp
-gn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwXQMAJKOSLakhT2+zNVVXxxvjpoixMptEm
-X36vWkzaH6byHCx+rgIW0lbQL1dTR+iS
------END CERTIFICATE-----
-
-UTN-USER First-Network Applications
-===================================
------BEGIN CERTIFICATE-----
-MIIEZDCCA0ygAwIBAgIQRL4Mi1AAJLQR0zYwS8AzdzANBgkqhkiG9w0BAQUFADCBozELMAkGA1UE
-BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
-IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzAp
-BgNVBAMTIlVUTi1VU0VSRmlyc3QtTmV0d29yayBBcHBsaWNhdGlvbnMwHhcNOTkwNzA5MTg0ODM5
-WhcNMTkwNzA5MTg1NzQ5WjCBozELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5T
-YWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
-dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzApBgNVBAMTIlVUTi1VU0VSRmlyc3QtTmV0d29yayBB
-cHBsaWNhdGlvbnMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCz+5Gh5DZVhawGNFug
-mliy+LUPBXeDrjKxdpJo7CNKyXY/45y2N3kDuatpjQclthln5LAbGHNhSuh+zdMvZOOmfAz6F4Cj
-DUeJT1FxL+78P/m4FoCHiZMlIJpDgmkkdihZNaEdwH+DBmQWICzTSaSFtMBhf1EI+GgVkYDLpdXu
-Ozr0hAReYFmnjDRy7rh4xdE7EkpvfmUnuaRVxblvQ6TFHSyZwFKkeEwVs0CYCGtDxgGwenv1axwi
-P8vv/6jQOkt2FZ7S0cYu49tXGzKiuG/ohqY/cKvlcJKrRB5AUPuco2LkbG6gyN7igEL66S/ozjIE
-j3yNtxyjNTwV3Z7DrpelAgMBAAGjgZEwgY4wCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8w
-HQYDVR0OBBYEFPqGydvguul49Uuo1hXf8NPhahQ8ME8GA1UdHwRIMEYwRKBCoECGPmh0dHA6Ly9j
-cmwudXNlcnRydXN0LmNvbS9VVE4tVVNFUkZpcnN0LU5ldHdvcmtBcHBsaWNhdGlvbnMuY3JsMA0G
-CSqGSIb3DQEBBQUAA4IBAQCk8yXM0dSRgyLQzDKrm5ZONJFUICU0YV8qAhXhi6r/fWRRzwr/vH3Y
-IWp4yy9Rb/hCHTO967V7lMPDqaAt39EpHx3+jz+7qEUqf9FuVSTiuwL7MT++6LzsQCv4AdRWOOTK
-RIK1YSAhZ2X28AvnNPilwpyjXEAfhZOVBt5P1CeptqX8Fs1zMT+4ZSfP1FMa8Kxun08FDAOBp4Qp
-xFq9ZFdyrTvPNximmMatBrTcCKME1SmklpoSZ0qMYEWd8SOasACcaLWYUNPvji6SZbFIPiG+FTAq
-DbUMo2s/rn9X9R+WfN9v3YIwLGUbQErNaLly7HF27FSOH4UMAWr6pjisH8SE
------END CERTIFICATE-----
-
-America Online Root Certification Authority 1
-=============================================
------BEGIN CERTIFICATE-----
-MIIDpDCCAoygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
-QW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBPbmxpbmUgUm9vdCBDZXJ0aWZp
-Y2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyODA2MDAwMFoXDTM3MTExOTIwNDMwMFowYzELMAkG
-A1UEBhMCVVMxHDAaBgNVBAoTE0FtZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2Eg
-T25saW5lIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIwDQYJKoZIhvcNAQEBBQAD
-ggEPADCCAQoCggEBAKgv6KRpBgNHw+kqmP8ZonCaxlCyfqXfaE0bfA+2l2h9LaaLl+lkhsmj76CG
-v2BlnEtUiMJIxUo5vxTjWVXlGbR0yLQFOVwWpeKVBeASrlmLojNoWBym1BW32J/X3HGrfpq/m44z
-DyL9Hy7nBzbvYjnF3cu6JRQj3gzGPTzOggjmZj7aUTsWOqMFf6Dch9Wc/HKpoH145LcxVR5lu9Rh
-sCFg7RAycsWSJR74kEoYeEfffjA3PlAb2xzTa5qGUwew76wGePiEmf4hjUyAtgyC9mZweRrTT6PP
-8c9GsEsPPt2IYriMqQkoO3rHl+Ee5fSfwMCuJKDIodkP1nsmgmkyPacCAwEAAaNjMGEwDwYDVR0T
-AQH/BAUwAwEB/zAdBgNVHQ4EFgQUAK3Zo/Z59m50qX8zPYEX10zPM94wHwYDVR0jBBgwFoAUAK3Z
-o/Z59m50qX8zPYEX10zPM94wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBBQUAA4IBAQB8itEf
-GDeC4Liwo+1WlchiYZwFos3CYiZhzRAW18y0ZTTQEYqtqKkFZu90821fnZmv9ov761KyBZiibyrF
-VL0lvV+uyIbqRizBs73B6UlwGBaXCBOMIOAbLjpHyx7kADCVW/RFo8AasAFOq73AI25jP4BKxQft
-3OJvx8Fi8eNy1gTIdGcL+oiroQHIb/AUr9KZzVGTfu0uOMe9zkZQPXLjeSWdm4grECDdpbgyn43g
-Kd8hdIaC2y+CMMbHNYaz+ZZfRtsMRf3zUMNvxsNIrUam4SdHCh0Om7bCd39j8uB9Gr784N/Xx6ds
-sPmuujz9dLQR6FgNgLzTqIA6me11zEZ7
------END CERTIFICATE-----
-
-America Online Root Certification Authority 2
-=============================================
------BEGIN CERTIFICATE-----
-MIIFpDCCA4ygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
-QW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBPbmxpbmUgUm9vdCBDZXJ0aWZp
-Y2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyODA2MDAwMFoXDTM3MDkyOTE0MDgwMFowYzELMAkG
-A1UEBhMCVVMxHDAaBgNVBAoTE0FtZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2Eg
-T25saW5lIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIwDQYJKoZIhvcNAQEBBQAD
-ggIPADCCAgoCggIBAMxBRR3pPU0Q9oyxQcngXssNt79Hc9PwVU3dxgz6sWYFas14tNwC206B89en
-fHG8dWOgXeMHDEjsJcQDIPT/DjsS/5uN4cbVG7RtIuOx238hZK+GvFciKtZHgVdEglZTvYYUAQv8
-f3SkWq7xuhG1m1hagLQ3eAkzfDJHA1zEpYNI9FdWboE2JxhP7JsowtS013wMPgwr38oE18aO6lhO
-qKSlGBxsRZijQdEt0sdtjRnxrXm3gT+9BoInLRBYBbV4Bbkv2wxrkJB+FFk4u5QkE+XRnRTf04JN
-RvCAOVIyD+OEsnpD8l7eXz8d3eOyG6ChKiMDbi4BFYdcpnV1x5dhvt6G3NRI270qv0pV2uh9UPu0
-gBe4lL8BPeraunzgWGcXuVjgiIZGZ2ydEEdYMtA1fHkqkKJaEBEjNa0vzORKW6fIJ/KD3l67Xnfn
-6KVuY8INXWHQjNJsWiEOyiijzirplcdIz5ZvHZIlyMbGwcEMBawmxNJ10uEqZ8A9W6Wa6897Gqid
-FEXlD6CaZd4vKL3Ob5Rmg0gp2OpljK+T2WSfVVcmv2/LNzGZo2C7HK2JNDJiuEMhBnIMoVxtRsX6
-Kc8w3onccVvdtjc+31D1uAclJuW8tf48ArO3+L5DwYcRlJ4jbBeKuIonDFRH8KmzwICMoCfrHRnj
-B453cMor9H124HhnAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFE1FwWg4u3Op
-aaEg5+31IqEjFNeeMB8GA1UdIwQYMBaAFE1FwWg4u3OpaaEg5+31IqEjFNeeMA4GA1UdDwEB/wQE
-AwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAZ2sGuV9FOypLM7PmG2tZTiLMubekJcmnxPBUlgtk87FY
-T15R/LKXeydlwuXK5w0MJXti4/qftIe3RUavg6WXSIylvfEWK5t2LHo1YGwRgJfMqZJS5ivmae2p
-+DYtLHe/YUjRYwu5W1LtGLBDQiKmsXeu3mnFzcccobGlHBD7GL4acN3Bkku+KVqdPzW+5X1R+FXg
-JXUjhx5c3LqdsKyzadsXg8n33gy8CNyRnqjQ1xU3c6U1uPx+xURABsPr+CKAXEfOAuMRn0T//Zoy
-zH1kUQ7rVyZ2OuMeIjzCpjbdGe+n/BLzJsBZMYVMnNjP36TMzCmT/5RtdlwTCJfy7aULTd3oyWgO
-ZtMADjMSW7yV5TKQqLPGbIOtd+6Lfn6xqavT4fG2wLHqiMDn05DpKJKUe2h7lyoKZy2FAjgQ5ANh
-1NolNscIWC2hp1GvMApJ9aZphwctREZ2jirlmjvXGKL8nDgQzMY70rUXOm/9riW99XJZZLF0Kjhf
-GEzfz3EEWjbUvy+ZnOjZurGV5gJLIaFb1cFPj65pbVPbAZO1XB4Y3WRayhgoPmMEEf0cjQAPuDff
-Z4qdZqkCapH/E8ovXYO8h5Ns3CRRFgQlZvqz2cK6Kb6aSDiCmfS/O0oxGfm/jiEzFMpPVF/7zvuP
-cX/9XhmgD0uRuMRUvAawRY8mkaKO/qk=
------END CERTIFICATE-----
-
-Visa eCommerce Root
-===================
------BEGIN CERTIFICATE-----
-MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBrMQswCQYDVQQG
-EwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2Ug
-QXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2
-WhcNMjIwNjI0MDAxNjEyWjBrMQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMm
-VmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv
-bW1lcmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h2mCxlCfL
-F9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4ElpF7sDPwsRROEW+1QK8b
-RaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdVZqW1LS7YgFmypw23RuwhY/81q6UCzyr0
-TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI
-/k4+oKsGGelT84ATB+0tvz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzs
-GHxBvfaLdXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEG
-MB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUFAAOCAQEAX/FBfXxc
-CLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcRzCSs00Rsca4BIGsDoo8Ytyk6feUW
-YFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pz
-zkWKsKZJ/0x9nXGIxHYdkFsd7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBu
-YQa7FkKMcPcw++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt
-398znM/jra6O1I7mT1GvFpLgXPYHDw==
------END CERTIFICATE-----
-
-Certum Root CA
-==============
------BEGIN CERTIFICATE-----
-MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQK
-ExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBDQTAeFw0wMjA2MTExMDQ2Mzla
-Fw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8u
-by4xEjAQBgNVBAMTCUNlcnR1bSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6x
-wS7TT3zNJc4YPk/EjG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdL
-kKWoePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GIULdtlkIJ
-89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapuOb7kky/ZR6By6/qmW6/K
-Uz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUgAKpoC6EahQGcxEZjgoi2IrHu/qpGWX7P
-NSzVttpd90gzFFS269lvzs2I1qsb2pY7HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkq
-hkiG9w0BAQUFAAOCAQEAuI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+
-GXYkHAQaTOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTgxSvg
-GrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1qCjqTE5s7FCMTY5w/
-0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5xO/fIR/RpbxXyEV6DHpx8Uq79AtoS
-qFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs6GAqm4VKQPNriiTsBhYscw==
------END CERTIFICATE-----
-
-Comodo AAA Services root
-========================
------BEGIN CERTIFICATE-----
-MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
-R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
-TGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAw
-MFoXDTI4MTIzMTIzNTk1OVowezELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hl
-c3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNV
-BAMMGEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
-ggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQuaBtDFcCLNSS1UY8y2bmhG
-C1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe3M/vg4aijJRPn2jymJBGhCfHdr/jzDUs
-i14HZGWCwEiwqJH5YZ92IFCokcdmtet4YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszW
-Y19zjNoFmag4qMsXeDZRrOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjH
-Ypy+g8cmez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQUoBEK
-Iz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wewYDVR0f
-BHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNl
-cy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29tb2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2Vz
-LmNybDANBgkqhkiG9w0BAQUFAAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm
-7l3sAg9g1o1QGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz
-Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z
-8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C
-12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
------END CERTIFICATE-----
-
-Comodo Secure Services root
-===========================
------BEGIN CERTIFICATE-----
-MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
-R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
-TGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAw
-MDAwMFoXDTI4MTIzMTIzNTk1OVowfjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFu
-Y2hlc3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAi
-BgNVBAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP
-ADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPMcm3ye5drswfxdySRXyWP
-9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3SHpR7LZQdqnXXs5jLrLxkU0C8j6ysNstc
-rbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rC
-oznl2yY4rYsK7hljxxwk3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3V
-p6ea5EQz6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNVHQ4E
-FgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w
-gYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL1NlY3VyZUNlcnRpZmlj
-YXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRwOi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlm
-aWNhdGVTZXJ2aWNlcy5jcmwwDQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm
-4J4oqF7Tt/Q05qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj
-Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtIgKvcnDe4IRRL
-DXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJaD61JlfutuC23bkpgHl9j6Pw
-pCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDlizeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1H
-RR3B7Hzs/Sk=
------END CERTIFICATE-----
-
-Comodo Trusted Services root
-============================
------BEGIN CERTIFICATE-----
-MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
-R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
-TGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEw
-MDAwMDBaFw0yODEyMzEyMzU5NTlaMH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1h
-bmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUw
-IwYDVQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0BAQEFAAOC
-AQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWWfnJSoBVC21ndZHoa0Lh7
-3TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMtTGo87IvDktJTdyR0nAducPy9C1t2ul/y
-/9c3S0pgePfw+spwtOpZqqPOSC+pw7ILfhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6
-juljatEPmsbS9Is6FARW1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsS
-ivnkBbA7kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0GA1Ud
-DgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
-/zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21vZG9jYS5jb20vVHJ1c3RlZENlcnRp
-ZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRodHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENl
-cnRpZmljYXRlU2VydmljZXMuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8Ntw
-uleGFTQQuS9/HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32
-pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxISjBc/lDb+XbDA
-BHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+xqFx7D+gIIxmOom0jtTYsU0l
-R+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/AtyjcndBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O
-9y5Xt5hwXsjEeLBi
------END CERTIFICATE-----
-
-QuoVadis Root CA
-================
------BEGIN CERTIFICATE-----
-MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJCTTEZMBcGA1UE
-ChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
-eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAz
-MTkxODMzMzNaFw0yMTAzMTcxODMzMzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRp
-cyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQD
-EyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF
-AAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Ypli4kVEAkOPcahdxYTMuk
-J0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2DrOpm2RgbaIr1VxqYuvXtdj182d6UajtL
-F8HVj71lODqV0D1VNk7feVcxKh7YWWVJWCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeL
-YzcS19Dsw3sgQUSj7cugF+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWen
-AScOospUxbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCCAk4w
-PQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVvdmFkaXNvZmZzaG9y
-ZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREwggENMIIBCQYJKwYBBAG+WAABMIH7
-MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNlIG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmlj
-YXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJs
-ZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh
-Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYIKwYBBQUHAgEW
-Fmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3TKbkGGew5Oanwl4Rqy+/fMIGu
-BgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rqy+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkw
-FwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0
-aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6
-tlCLMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSkfnIYj9lo
-fFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf87C9TqnN7Az10buYWnuul
-LsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1RcHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2x
-gI4JVrmcGmD+XcHXetwReNDWXcG31a0ymQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi
-5upZIof4l/UO/erMkqQWxFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi
-5nrQNiOKSnQ2+Q==
------END CERTIFICATE-----
-
-QuoVadis Root CA 2
-==================
------BEGIN CERTIFICATE-----
-MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT
-EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMjAeFw0wNjExMjQx
-ODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM
-aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4IC
-DwAwggIKAoICAQCaGMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6
-XJxgFyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55JWpzmM+Yk
-lvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bBrrcCaoF6qUWD4gXmuVbB
-lDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp+ARz8un+XJiM9XOva7R+zdRcAitMOeGy
-lZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt
-66/3FsvbzSUr5R/7mp/iUcw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1Jdxn
-wQ5hYIizPtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og/zOh
-D7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UHoycR7hYQe7xFSkyy
-BNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuIyV77zGHcizN300QyNQliBJIWENie
-J0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1Ud
-DgQWBBQahGK8SEwzJQTU7tD2A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGU
-a6FJpEcwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT
-ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2fBluornFdLwUv
-Z+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzng/iN/Ae42l9NLmeyhP3ZRPx3
-UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2BlfF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodm
-VjB3pjd4M1IQWK4/YY7yarHvGH5KWWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK
-+JDSV6IZUaUtl0HaB0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrW
-IozchLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPRTUIZ3Ph1
-WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWDmbA4CD/pXvk1B+TJYm5X
-f6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0ZohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II
-4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8
-VCLAAVBpQ570su9t+Oza8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u
------END CERTIFICATE-----
-
-QuoVadis Root CA 3
-==================
------BEGIN CERTIFICATE-----
-MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT
-EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMzAeFw0wNjExMjQx
-OTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM
-aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4IC
-DwAwggIKAoICAQDMV0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNgg
-DhoB4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUrH556VOij
-KTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd8lyyBTNvijbO0BNO/79K
-DDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9CabwvvWhDFlaJKjdhkf2mrk7AyxRllDdLkgbv
-BNDInIjbC3uBr7E9KsRlOni27tyAsdLTmZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwp
-p5ijJUMv7/FfJuGITfhebtfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8
-nT8KKdjcT5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDtWAEX
-MJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZc6tsgLjoC2SToJyM
-Gf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A4iLItLRkT9a6fUg+qGkM17uGcclz
-uD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYDVR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHT
-BgkrBgEEAb5YAAMwgcUwgZMGCCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmlj
-YXRlIGNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0
-aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVudC4wLQYIKwYB
-BQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2NwczALBgNVHQ8EBAMCAQYwHQYD
-VR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4GA1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4
-ywLQoUmkRzBFMQswCQYDVQQGEwJCTTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UE
-AxMSUXVvVmFkaXMgUm9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZV
-qyM07ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSemd1o417+s
-hvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd+LJ2w/w4E6oM3kJpK27z
-POuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2
-Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadNt54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp
-8kokUvd0/bpO5qgdAm6xDYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBC
-bjPsMZ57k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6szHXu
-g/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0jWy10QJLZYxkNc91p
-vGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeTmJlglFwjz1onl14LBQaTNx47aTbr
-qZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK4SVhM7JZG+Ju1zdXtg2pEto=
------END CERTIFICATE-----
-
-Security Communication Root CA
-==============================
------BEGIN CERTIFICATE-----
-MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP
-U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw
-HhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP
-U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw
-ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw
-8yl89f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJDKaVv0uM
-DPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9Ms+k2Y7CI9eNqPPYJayX
-5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/NQV3Is00qVUarH9oe4kA92819uZKAnDfd
-DJZkndwi92SL32HeFZRSFaB9UslLqCHJxrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2
-JChzAgMBAAGjPzA9MB0GA1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYw
-DwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vGkl3g
-0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfrUj94nK9NrvjVT8+a
-mCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5Bw+SUEmK3TGXX8npN6o7WWWXlDLJ
-s58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJUJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ
-6rBK+1YWc26sTfcioU+tHXotRSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAi
-FL39vmwLAw==
------END CERTIFICATE-----
-
-Sonera Class 1 Root CA
-======================
------BEGIN CERTIFICATE-----
-MIIDIDCCAgigAwIBAgIBJDANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG
-U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MxIENBMB4XDTAxMDQwNjEwNDkxM1oXDTIxMDQw
-NjEwNDkxM1owOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh
-IENsYXNzMSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALWJHytPZwp5/8Ue+H88
-7dF+2rDNbS82rDTG29lkFwhjMDMiikzujrsPDUJVyZ0upe/3p4zDq7mXy47vPxVnqIJyY1MPQYx9
-EJUkoVqlBvqSV536pQHydekfvFYmUk54GWVYVQNYwBSujHxVX3BbdyMGNpfzJLWaRpXk3w0LBUXl
-0fIdgrvGE+D+qnr9aTCU89JFhfzyMlsy3uhsXR/LpCJ0sICOXZT3BgBLqdReLjVQCfOAl/QMF645
-2F/NM8EcyonCIvdFEu1eEpOdY6uCLrnrQkFEy0oaAIINnvmLVz5MxxftLItyM19yejhW1ebZrgUa
-HXVFsculJRwSVzb9IjcCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQIR+IMi/ZT
-iFIwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQCLGrLJXWG04bkruVPRsoWdd44W7hE9
-28Jj2VuXZfsSZ9gqXLar5V7DtxYvyOirHYr9qxp81V9jz9yw3Xe5qObSIjiHBxTZ/75Wtf0HDjxV
-yhbMp6Z3N/vbXB9OWQaHowND9Rart4S9Tu+fMTfwRvFAttEMpWT4Y14h21VOTzF2nBBhjrZTOqMR
-vq9tfB69ri3iDGnHhVNoomG6xT60eVR4ngrHAr5i0RGCS2UvkVrCqIexVmiUefkl98HVrhq4uz2P
-qYo4Ffdz0Fpg0YCw8NzVUM1O7pJIae2yIx4wzMiUyLb1O4Z/P6Yun/Y+LLWSlj7fLJOK/4GMDw9Z
-IRlXvVWa
------END CERTIFICATE-----
-
-Sonera Class 2 Root CA
-======================
------BEGIN CERTIFICATE-----
-MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG
-U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAxMDQwNjA3Mjk0MFoXDTIxMDQw
-NjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh
-IENsYXNzMiBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3
-/Ei9vX+ALTU74W+oZ6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybT
-dXnt5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s3TmVToMG
-f+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2EjvOr7nQKV0ba5cTppCD8P
-tOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu8nYybieDwnPz3BjotJPqdURrBGAgcVeH
-nfO+oJAjPYok4doh28MCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITT
-XjwwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt
-0jSv9zilzqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/3DEI
-cbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvDFNr450kkkdAdavph
-Oe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6Tk6ezAyNlNzZRZxe7EJQY670XcSx
-EtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLH
-llpwrN9M
------END CERTIFICATE-----
-
-Staat der Nederlanden Root CA
-=============================
------BEGIN CERTIFICATE-----
-MIIDujCCAqKgAwIBAgIEAJiWijANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQGEwJOTDEeMBwGA1UE
-ChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQDEx1TdGFhdCBkZXIgTmVkZXJsYW5kZW4g
-Um9vdCBDQTAeFw0wMjEyMTcwOTIzNDlaFw0xNTEyMTYwOTE1MzhaMFUxCzAJBgNVBAYTAk5MMR4w
-HAYDVQQKExVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xJjAkBgNVBAMTHVN0YWF0IGRlciBOZWRlcmxh
-bmRlbiBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmNK1URF6gaYUmHFt
-vsznExvWJw56s2oYHLZhWtVhCb/ekBPHZ+7d89rFDBKeNVU+LCeIQGv33N0iYfXCxw719tV2U02P
-jLwYdjeFnejKScfST5gTCaI+Ioicf9byEGW07l8Y1Rfj+MX94p2i71MOhXeiD+EwR+4A5zN9RGca
-C1Hoi6CeUJhoNFIfLm0B8mBF8jHrqTFoKbt6QZ7GGX+UtFE5A3+y3qcym7RHjm+0Sq7lr7HcsBth
-vJly3uSJt3omXdozSVtSnA71iq3DuD3oBmrC1SoLbHuEvVYFy4ZlkuxEK7COudxwC0barbxjiDn6
-22r+I/q85Ej0ZytqERAhSQIDAQABo4GRMIGOMAwGA1UdEwQFMAMBAf8wTwYDVR0gBEgwRjBEBgRV
-HSAAMDwwOgYIKwYBBQUHAgEWLmh0dHA6Ly93d3cucGtpb3ZlcmhlaWQubmwvcG9saWNpZXMvcm9v
-dC1wb2xpY3kwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSofeu8Y6R0E3QA7Jbg0zTBLL9s+DAN
-BgkqhkiG9w0BAQUFAAOCAQEABYSHVXQ2YcG70dTGFagTtJ+k/rvuFbQvBgwp8qiSpGEN/KtcCFtR
-EytNwiphyPgJWPwtArI5fZlmgb9uXJVFIGzmeafR2Bwp/MIgJ1HI8XxdNGdphREwxgDS1/PTfLbw
-MVcoEoJz6TMvplW0C5GUR5z6u3pCMuiufi3IvKwUv9kP2Vv8wfl6leF9fpb8cbDCTMjfRTTJzg3y
-nGQI0DvDKcWy7ZAEwbEpkcUwb8GpcjPM/l0WFywRaed+/sWDCN+83CI6LiBpIzlWYGeQiy52OfsR
-iJf2fL1LuCAWZwWN4jvBcj+UlTfHXbme2JOhF4//DGYVwSR8MnwDHTuhWEUykw==
------END CERTIFICATE-----
-
-TDC Internet Root CA
-====================
------BEGIN CERTIFICATE-----
-MIIEKzCCAxOgAwIBAgIEOsylTDANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJESzEVMBMGA1UE
-ChMMVERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTAeFw0wMTA0MDUx
-NjMzMTdaFw0yMTA0MDUxNzAzMTdaMEMxCzAJBgNVBAYTAkRLMRUwEwYDVQQKEwxUREMgSW50ZXJu
-ZXQxHTAbBgNVBAsTFFREQyBJbnRlcm5ldCBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
-MIIBCgKCAQEAxLhAvJHVYx/XmaCLDEAedLdInUaMArLgJF/wGROnN4NrXceO+YQwzho7+vvOi20j
-xsNuZp+Jpd/gQlBn+h9sHvTQBda/ytZO5GhgbEaqHF1j4QeGDmUApy6mcca8uYGoOn0a0vnRrEvL
-znWv3Hv6gXPU/Lq9QYjUdLP5Xjg6PEOo0pVOd20TDJ2PeAG3WiAfAzc14izbSysseLlJ28TQx5yc
-5IogCSEWVmb/Bexb4/DPqyQkXsN/cHoSxNK1EKC2IeGNeGlVRGn1ypYcNIUXJXfi9i8nmHj9eQY6
-otZaQ8H/7AQ77hPv01ha/5Lr7K7a8jcDR0G2l8ktCkEiu7vmpwIDAQABo4IBJTCCASEwEQYJYIZI
-AYb4QgEBBAQDAgAHMGUGA1UdHwReMFwwWqBYoFakVDBSMQswCQYDVQQGEwJESzEVMBMGA1UEChMM
-VERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTENMAsGA1UEAxMEQ1JM
-MTArBgNVHRAEJDAigA8yMDAxMDQwNTE2MzMxN1qBDzIwMjEwNDA1MTcwMzE3WjALBgNVHQ8EBAMC
-AQYwHwYDVR0jBBgwFoAUbGQBx/2FbazI2p5QCIUItTxWqFAwHQYDVR0OBBYEFGxkAcf9hW2syNqe
-UAiFCLU8VqhQMAwGA1UdEwQFMAMBAf8wHQYJKoZIhvZ9B0EABBAwDhsIVjUuMDo0LjADAgSQMA0G
-CSqGSIb3DQEBBQUAA4IBAQBOQ8zR3R0QGwZ/t6T609lN+yOfI1Rb5osvBCiLtSdtiaHsmGnc540m
-gwV5dOy0uaOXwTUA/RXaOYE6lTGQ3pfphqiZdwzlWqCE/xIWrG64jcN7ksKsLtB9KOy282A4aW8+
-2ARVPp7MVdK6/rtHBNcK2RYKNCn1WBPVT8+PVkuzHu7TmHnaCB4Mb7j4Fifvwm899qNLPg7kbWzb
-O0ESm70NRyN/PErQr8Cv9u8btRXE64PECV90i9kR+8JWsTz4cMo0jUNAE4z9mQNUecYu6oah9jrU
-Cbz0vGbMPVjQV0kK7iXiQe4T+Zs4NNEA9X7nlB38aQNiuJkFBT1reBK9sG9l
------END CERTIFICATE-----
-
-TDC OCES Root CA
-================
------BEGIN CERTIFICATE-----
-MIIFGTCCBAGgAwIBAgIEPki9xDANBgkqhkiG9w0BAQUFADAxMQswCQYDVQQGEwJESzEMMAoGA1UE
-ChMDVERDMRQwEgYDVQQDEwtUREMgT0NFUyBDQTAeFw0wMzAyMTEwODM5MzBaFw0zNzAyMTEwOTA5
-MzBaMDExCzAJBgNVBAYTAkRLMQwwCgYDVQQKEwNUREMxFDASBgNVBAMTC1REQyBPQ0VTIENBMIIB
-IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArGL2YSCyz8DGhdfjeebM7fI5kqSXLmSjhFuH
-nEz9pPPEXyG9VhDr2y5h7JNp46PMvZnDBfwGuMo2HP6QjklMxFaaL1a8z3sM8W9Hpg1DTeLpHTk0
-zY0s2RKY+ePhwUp8hjjEqcRhiNJerxomTdXkoCJHhNlktxmW/OwZ5LKXJk5KTMuPJItUGBxIYXvV
-iGjaXbXqzRowwYCDdlCqT9HU3Tjw7xb04QxQBr/q+3pJoSgrHPb8FTKjdGqPqcNiKXEx5TukYBde
-dObaE+3pHx8b0bJoc8YQNHVGEBDjkAB2QMuLt0MJIf+rTpPGWOmlgtt3xDqZsXKVSQTwtyv6e1mO
-3QIDAQABo4ICNzCCAjMwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwgewGA1UdIASB
-5DCB4TCB3gYIKoFQgSkBAQEwgdEwLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuY2VydGlmaWthdC5k
-ay9yZXBvc2l0b3J5MIGdBggrBgEFBQcCAjCBkDAKFgNUREMwAwIBARqBgUNlcnRpZmlrYXRlciBm
-cmEgZGVubmUgQ0EgdWRzdGVkZXMgdW5kZXIgT0lEIDEuMi4yMDguMTY5LjEuMS4xLiBDZXJ0aWZp
-Y2F0ZXMgZnJvbSB0aGlzIENBIGFyZSBpc3N1ZWQgdW5kZXIgT0lEIDEuMi4yMDguMTY5LjEuMS4x
-LjARBglghkgBhvhCAQEEBAMCAAcwgYEGA1UdHwR6MHgwSKBGoESkQjBAMQswCQYDVQQGEwJESzEM
-MAoGA1UEChMDVERDMRQwEgYDVQQDEwtUREMgT0NFUyBDQTENMAsGA1UEAxMEQ1JMMTAsoCqgKIYm
-aHR0cDovL2NybC5vY2VzLmNlcnRpZmlrYXQuZGsvb2Nlcy5jcmwwKwYDVR0QBCQwIoAPMjAwMzAy
-MTEwODM5MzBagQ8yMDM3MDIxMTA5MDkzMFowHwYDVR0jBBgwFoAUYLWF7FZkfhIZJ2cdUBVLc647
-+RIwHQYDVR0OBBYEFGC1hexWZH4SGSdnHVAVS3OuO/kSMB0GCSqGSIb2fQdBAAQQMA4bCFY2LjA6
-NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEACromJkbTc6gJ82sLMJn9iuFXehHTuJTXCRBuo7E4
-A9G28kNBKWKnctj7fAXmMXAnVBhOinxO5dHKjHiIzxvTkIvmI/gLDjNDfZziChmPyQE+dF10yYsc
-A+UYyAFMP8uXBV2YcaaYb7Z8vTd/vuGTJW1v8AqtFxjhA7wHKcitJuj4YfD9IQl+mo6paH1IYnK9
-AOoBmbgGglGBTvH1tJFUuSN6AJqfXY3gPGS5GhKSKseCRHI53OI8xthV9RVOyAUO28bQYqbsFbS1
-AoLbrIyigfCbmTH1ICCoiGEKB5+U/NDXG8wuF/MEJ3Zn61SD/aSQfgY9BKNDLdr8C2LqL19iUw==
------END CERTIFICATE-----
-
-UTN DATACorp SGC Root CA
-========================
------BEGIN CERTIFICATE-----
-MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCBkzELMAkGA1UE
-BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
-IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZ
-BgNVBAMTElVUTiAtIERBVEFDb3JwIFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBa
-MIGTMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4w
-HAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRy
-dXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjANBgkqhkiG9w0BAQEFAAOC
-AQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ys
-raP6LnD43m77VkIVni5c7yPeIbkFdicZD0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlo
-wHDyUwDAXlCCpVZvNvlK4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA
-9P4yPykqlXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulWbfXv
-33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQABo4GrMIGoMAsGA1Ud
-DwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRTMtGzz3/64PGgXYVOktKeRR20TzA9
-BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dD
-LmNybDAqBgNVHSUEIzAhBggrBgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3
-DQEBBQUAA4IBAQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft
-Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyjj98C5OBxOvG0
-I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVHKWss5nbZqSl9Mt3JNjy9rjXx
-EZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwP
-DPafepE39peC4N1xaf92P2BNPM/3mfnGV/TJVTl4uix5yaaIK/QI
------END CERTIFICATE-----
-
-UTN USERFirst Email Root CA
-===========================
------BEGIN CERTIFICATE-----
-MIIEojCCA4qgAwIBAgIQRL4Mi1AAJLQR0zYlJWfJiTANBgkqhkiG9w0BAQUFADCBrjELMAkGA1UE
-BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
-IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xNjA0
-BgNVBAMTLVVUTi1VU0VSRmlyc3QtQ2xpZW50IEF1dGhlbnRpY2F0aW9uIGFuZCBFbWFpbDAeFw05
-OTA3MDkxNzI4NTBaFw0xOTA3MDkxNzM2NThaMIGuMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQx
-FzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsx
-ITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRydXN0LmNvbTE2MDQGA1UEAxMtVVROLVVTRVJGaXJz
-dC1DbGllbnQgQXV0aGVudGljYXRpb24gYW5kIEVtYWlsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
-MIIBCgKCAQEAsjmFpPJ9q0E7YkY3rs3BYHW8OWX5ShpHornMSMxqmNVNNRm5pELlzkniii8efNIx
-B8dOtINknS4p1aJkxIW9hVE1eaROaJB7HHqkkqgX8pgV8pPMyaQylbsMTzC9mKALi+VuG6JG+ni8
-om+rWV6lL8/K2m2qL+usobNqqrcuZzWLeeEeaYji5kbNoKXqvgvOdjp6Dpvq/NonWz1zHyLmSGHG
-TPNpsaguG7bUMSAsvIKKjqQOpdeJQ/wWWq8dcdcRWdq6hw2v+vPhwvCkxWeM1tZUOt4KpLoDd7Nl
-yP0e03RiqhjKaJMeoYV+9Udly/hNVyh00jT/MLbu9mIwFIws6wIDAQABo4G5MIG2MAsGA1UdDwQE
-AwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSJgmd9xJ0mcABLtFBIfN49rgRufTBYBgNV
-HR8EUTBPME2gS6BJhkdodHRwOi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLVVTRVJGaXJzdC1DbGll
-bnRBdXRoZW50aWNhdGlvbmFuZEVtYWlsLmNybDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUH
-AwQwDQYJKoZIhvcNAQEFBQADggEBALFtYV2mGn98q0rkMPxTbyUkxsrt4jFcKw7u7mFVbwQ+zzne
-xRtJlOTrIEy05p5QLnLZjfWqo7NK2lYcYJeA3IKirUq9iiv/Cwm0xtcgBEXkzYABurorbs6q15L+
-5K/r9CYdFip/bDCVNy8zEqx/3cfREYxRmLLQo5HQrfafnoOTHh1CuEava2bwm3/q4wMC5QJRwarV
-NZ1yQAOJujEdxRBoUp7fooXFXAimeOZTT7Hot9MUnpOmw2TjrH5xzbyf6QMbzPvprDHBr3wVdAKZ
-w7JHpsIyYdfHb0gkUSeh1YdV8nuPmD0Wnu51tvjQjvLzxq4oW6fw8zYX/MMF08oDSlQ=
------END CERTIFICATE-----
-
-UTN USERFirst Hardware Root CA
-==============================
------BEGIN CERTIFICATE-----
-MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCBlzELMAkGA1UE
-BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
-IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAd
-BgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgx
-OTIyWjCBlzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0
-eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVz
-ZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwggEiMA0GCSqGSIb3
-DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlI
-wrthdBKWHTxqctU8EGc6Oe0rE81m65UJM6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFd
-tqdt++BxF2uiiPsA3/4aMXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8
-i4fDidNdoI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqIDsjf
-Pe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9KsyoUhbAgMBAAGjgbkw
-gbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFKFyXyYbKJhDlV0HN9WF
-lp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNF
-UkZpcnN0LUhhcmR3YXJlLmNybDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUF
-BwMGBggrBgEFBQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM
-//bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28GpgoiskliCE7/yMgUsogW
-XecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gECJChicsZUN/KHAG8HQQZexB2
-lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kn
-iCrVWFCVH/A7HFe7fRQ5YiuayZSSKqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67
-nfhmqA==
------END CERTIFICATE-----
-
-UTN USERFirst Object Root CA
-============================
------BEGIN CERTIFICATE-----
-MIIEZjCCA06gAwIBAgIQRL4Mi1AAJLQR0zYt4LNfGzANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UE
-BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
-IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHTAb
-BgNVBAMTFFVUTi1VU0VSRmlyc3QtT2JqZWN0MB4XDTk5MDcwOTE4MzEyMFoXDTE5MDcwOTE4NDAz
-NlowgZUxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJVVDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkx
-HjAcBgNVBAoTFVRoZSBVU0VSVFJVU1QgTmV0d29yazEhMB8GA1UECxMYaHR0cDovL3d3dy51c2Vy
-dHJ1c3QuY29tMR0wGwYDVQQDExRVVE4tVVNFUkZpcnN0LU9iamVjdDCCASIwDQYJKoZIhvcNAQEB
-BQADggEPADCCAQoCggEBAM6qgT+jo2F4qjEAVZURnicPHxzfOpuCaDDASmEd8S8O+r5596Uj71VR
-loTN2+O5bj4x2AogZ8f02b+U60cEPgLOKqJdhwQJ9jCdGIqXsqoc/EHSoTbL+z2RuufZcDX65OeQ
-w5ujm9M89RKZd7G3CeBo5hy485RjiGpq/gt2yb70IuRnuasaXnfBhQfdDWy/7gbHd2pBnqcP1/vu
-lBe3/IW+pKvEHDHd17bR5PDv3xaPslKT16HUiaEHLr/hARJCHhrh2JU022R5KP+6LhHC5ehbkkj7
-RwvCbNqtMoNB86XlQXD9ZZBt+vpRxPm9lisZBCzTbafc8H9vg2XiaquHhnUCAwEAAaOBrzCBrDAL
-BgNVHQ8EBAMCAcYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU2u1kdBScFDyr3ZmpvVsoTYs8
-ydgwQgYDVR0fBDswOTA3oDWgM4YxaHR0cDovL2NybC51c2VydHJ1c3QuY29tL1VUTi1VU0VSRmly
-c3QtT2JqZWN0LmNybDApBgNVHSUEIjAgBggrBgEFBQcDAwYIKwYBBQUHAwgGCisGAQQBgjcKAwQw
-DQYJKoZIhvcNAQEFBQADggEBAAgfUrE3RHjb/c652pWWmKpVZIC1WkDdIaXFwfNfLEzIR1pp6ujw
-NTX00CXzyKakh0q9G7FzCL3Uw8q2NbtZhncxzaeAFK4T7/yxSPlrJSUtUbYsbUXBmMiKVl0+7kNO
-PmsnjtA6S4ULX9Ptaqd1y9Fahy85dRNacrACgZ++8A+EVCBibGnU4U3GDZlDAQ0Slox4nb9QorFE
-qmrPF3rPbw/U+CRVX/A0FklmPlBGyWNxODFiuGK581OtbLUrohKqGU8J2l7nk8aOFAj+8DCAGKCG
-hU3IfdeLA/5u1fedFqySLKAj5ZyRUh+U3xeUc8OzwcFxBSAAeL0TUh2oPs0AH8g=
------END CERTIFICATE-----
-
-Camerfirma Chambers of Commerce Root
-====================================
------BEGIN CERTIFICATE-----
-MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe
-QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i
-ZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAx
-NjEzNDNaFw0zNzA5MzAxNjEzNDRaMH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZp
-cm1hIFNBIENJRiBBODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3Jn
-MSIwIAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0BAQEFAAOC
-AQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtbunXF/KGIJPov7coISjlU
-xFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0dBmpAPrMMhe5cG3nCYsS4No41XQEMIwRH
-NaqbYE6gZj3LJgqcQKH0XZi/caulAGgq7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jW
-DA+wWFjbw2Y3npuRVDM30pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFV
-d9oKDMyXroDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIGA1Ud
-EwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5jaGFtYmVyc2lnbi5v
-cmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p26EpW1eLTXYGduHRooowDgYDVR0P
-AQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hh
-bWJlcnNpZ24ub3JnMCcGA1UdEgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYD
-VR0gBFEwTzBNBgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz
-aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEBAAxBl8IahsAi
-fJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZdp0AJPaxJRUXcLo0waLIJuvvD
-L8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wN
-UPf6s+xCX6ndbcj0dc97wXImsQEcXCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/n
-ADydb47kMgkdTXg0eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1
-erfutGWaIZDgqtCYvDi1czyL+Nw=
------END CERTIFICATE-----
-
-Camerfirma Global Chambersign Root
-==================================
------BEGIN CERTIFICATE-----
-MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe
-QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i
-ZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYx
-NDE4WhcNMzcwOTMwMTYxNDE4WjB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJt
-YSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEg
-MB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUAA4IBDQAw
-ggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0Mi+ITaFgCPS3CU6gSS9J
-1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/sQJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8O
-by4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpVeAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl
-6DJWk0aJqCWKZQbua795B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c
-8lCrEqWhz0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0TAQH/
-BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1iZXJzaWduLm9yZy9j
-aGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4wTcbOX60Qq+UDpfqpFDAOBgNVHQ8B
-Af8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAHMCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBj
-aGFtYmVyc2lnbi5vcmcwKgYDVR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9y
-ZzBbBgNVHSAEVDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh
-bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0BAQUFAAOCAQEA
-PDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUMbKGKfKX0j//U2K0X1S0E0T9Y
-gOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXiryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJ
-PJ7oKXqJ1/6v/2j1pReQvayZzKWGVwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4
-IBHNfTIzSJRUTN3cecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREes
-t2d/AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A==
------END CERTIFICATE-----
-
-NetLock Qualified (Class QA) Root
-=================================
------BEGIN CERTIFICATE-----
-MIIG0TCCBbmgAwIBAgIBezANBgkqhkiG9w0BAQUFADCByTELMAkGA1UEBhMCSFUxETAPBgNVBAcT
-CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV
-BAsTEVRhbnVzaXR2YW55a2lhZG9rMUIwQAYDVQQDEzlOZXRMb2NrIE1pbm9zaXRldHQgS296amVn
-eXpvaSAoQ2xhc3MgUUEpIFRhbnVzaXR2YW55a2lhZG8xHjAcBgkqhkiG9w0BCQEWD2luZm9AbmV0
-bG9jay5odTAeFw0wMzAzMzAwMTQ3MTFaFw0yMjEyMTUwMTQ3MTFaMIHJMQswCQYDVQQGEwJIVTER
-MA8GA1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRvbnNhZ2kgS2Z0
-LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxQjBABgNVBAMTOU5ldExvY2sgTWlub3NpdGV0
-dCBLb3pqZWd5em9pIChDbGFzcyBRQSkgVGFudXNpdHZhbnlraWFkbzEeMBwGCSqGSIb3DQEJARYP
-aW5mb0BuZXRsb2NrLmh1MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx1Ilstg91IRV
-CacbvWy5FPSKAtt2/GoqeKvld/Bu4IwjZ9ulZJm53QE+b+8tmjwi8F3JV6BVQX/yQ15YglMxZc4e
-8ia6AFQer7C8HORSjKAyr7c3sVNnaHRnUPYtLmTeriZ539+Zhqurf4XsoPuAzPS4DB6TRWO53Lhb
-m+1bOdRfYrCnjnxmOCyqsQhjF2d9zL2z8cM/z1A57dEZgxXbhxInlrfa6uWdvLrqOU+L73Sa58XQ
-0uqGURzk/mQIKAR5BevKxXEOC++r6uwSEaEYBTJp0QwsGj0lmT+1fMptsK6ZmfoIYOcZwvK9UdPM
-0wKswREMgM6r3JSda6M5UzrWhQIDAMV9o4ICwDCCArwwEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNV
-HQ8BAf8EBAMCAQYwggJ1BglghkgBhvhCAQ0EggJmFoICYkZJR1lFTEVNISBFemVuIHRhbnVzaXR2
-YW55IGEgTmV0TG9jayBLZnQuIE1pbm9zaXRldHQgU3pvbGdhbHRhdGFzaSBTemFiYWx5emF0YWJh
-biBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0LiBBIG1pbm9zaXRldHQgZWxla3Ryb25p
-a3VzIGFsYWlyYXMgam9naGF0YXMgZXJ2ZW55ZXN1bGVzZW5laywgdmFsYW1pbnQgZWxmb2dhZGFz
-YW5hayBmZWx0ZXRlbGUgYSBNaW5vc2l0ZXR0IFN6b2xnYWx0YXRhc2kgU3phYmFseXphdGJhbiwg
-YXogQWx0YWxhbm9zIFN6ZXJ6b2Rlc2kgRmVsdGV0ZWxla2JlbiBlbG9pcnQgZWxsZW5vcnplc2kg
-ZWxqYXJhcyBtZWd0ZXRlbGUuIEEgZG9rdW1lbnR1bW9rIG1lZ3RhbGFsaGF0b2sgYSBodHRwczov
-L3d3dy5uZXRsb2NrLmh1L2RvY3MvIGNpbWVuIHZhZ3kga2VyaGV0b2sgYXogaW5mb0BuZXRsb2Nr
-Lm5ldCBlLW1haWwgY2ltZW4uIFdBUk5JTkchIFRoZSBpc3N1YW5jZSBhbmQgdGhlIHVzZSBvZiB0
-aGlzIGNlcnRpZmljYXRlIGFyZSBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIFF1YWxpZmllZCBDUFMg
-YXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3Lm5ldGxvY2suaHUvZG9jcy8gb3IgYnkgZS1tYWlsIGF0
-IGluZm9AbmV0bG9jay5uZXQwHQYDVR0OBBYEFAlqYhaSsFq7VQ7LdTI6MuWyIckoMA0GCSqGSIb3
-DQEBBQUAA4IBAQCRalCc23iBmz+LQuM7/KbD7kPgz/PigDVJRXYC4uMvBcXxKufAQTPGtpvQMznN
-wNuhrWw3AkxYQTvyl5LGSKjN5Yo5iWH5Upfpvfb5lHTocQ68d4bDBsxafEp+NFAwLvt/MpqNPfMg
-W/hqyobzMUwsWYACff44yTB1HLdV47yfuqhthCgFdbOLDcCRVCHnpgu0mfVRQdzNo0ci2ccBgcTc
-R08m6h/t280NmPSjnLRzMkqWmf68f8glWPhY83ZmiVSkpj7EUFy6iRiCdUgh0k8T6GB+B3bbELVR
-5qq5aKrN9p2QdRLqOBrKROi3macqaJVmlaut74nLYKkGEsaUR+ko
------END CERTIFICATE-----
-
-NetLock Notary (Class A) Root
-=============================
------BEGIN CERTIFICATE-----
-MIIGfTCCBWWgAwIBAgICAQMwDQYJKoZIhvcNAQEEBQAwga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQI
-EwdIdW5nYXJ5MREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6
-dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9j
-ayBLb3pqZWd5em9pIChDbGFzcyBBKSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNDIzMTQ0N1oX
-DTE5MDIxOTIzMTQ0N1owga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQH
-EwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQuMRowGAYD
-VQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBLb3pqZWd5em9pIChDbGFz
-cyBBKSBUYW51c2l0dmFueWtpYWRvMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvHSM
-D7tM9DceqQWC2ObhbHDqeLVu0ThEDaiDzl3S1tWBxdRL51uUcCbbO51qTGL3cfNk1mE7PetzozfZ
-z+qMkjvN9wfcZnSX9EUi3fRc4L9t875lM+QVOr/bmJBVOMTtplVjC7B4BPTjbsE/jvxReB+SnoPC
-/tmwqcm8WgD/qaiYdPv2LD4VOQ22BFWoDpggQrOxJa1+mm9dU7GrDPzr4PN6s6iz/0b2Y6LYOph7
-tqyF/7AlT3Rj5xMHpQqPBffAZG9+pyeAlt7ULoZgx2srXnN7F+eRP2QM2EsiNCubMvJIH5+hCoR6
-4sKtlz2O1cH5VqNQ6ca0+pii7pXmKgOM3wIDAQABo4ICnzCCApswDgYDVR0PAQH/BAQDAgAGMBIG
-A1UdEwEB/wQIMAYBAf8CAQQwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaC
-Ak1GSUdZRUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pv
-bGdhbHRhdGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQu
-IEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2Vn
-LWJpenRvc2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0
-ZXRlbGUgYXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFz
-IGxlaXJhc2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBh
-IGh0dHBzOi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVu
-b3J6ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1YW5jZSBh
-bmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sg
-Q1BTIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFp
-bCBhdCBjcHNAbmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4IBAQBIJEb3ulZv+sgoA0BO5TE5
-ayZrU3/b39/zcT0mwBQOxmd7I6gMc90Bu8bKbjc5VdXHjFYgDigKDtIqpLBJUsY4B/6+CgmM0ZjP
-ytoUMaFP0jn8DxEsQ8Pdq5PHVT5HfBgaANzze9jyf1JsIPQLX2lS9O74silg6+NJMSEN1rUQQeJB
-CWziGppWS3cC9qCbmieH6FUpccKQn0V4GuEVZD3QDtigdp+uxdAu6tYPVuxkf1qbFFgBJ34TUMdr
-KuZoPL9coAob4Q566eKAw+np9v1sEZ7Q5SgnK1QyQhSCdeZK8CtmdWOMovsEPoMOmzbwGOQmIMOM
-8CgHrTwXZoi1/baI
------END CERTIFICATE-----
-
-NetLock Business (Class B) Root
-===============================
------BEGIN CERTIFICATE-----
-MIIFSzCCBLSgAwIBAgIBaTANBgkqhkiG9w0BAQQFADCBmTELMAkGA1UEBhMCSFUxETAPBgNVBAcT
-CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV
-BAsTEVRhbnVzaXR2YW55a2lhZG9rMTIwMAYDVQQDEylOZXRMb2NrIFV6bGV0aSAoQ2xhc3MgQikg
-VGFudXNpdHZhbnlraWFkbzAeFw05OTAyMjUxNDEwMjJaFw0xOTAyMjAxNDEwMjJaMIGZMQswCQYD
-VQQGEwJIVTERMA8GA1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRv
-bnNhZ2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxMjAwBgNVBAMTKU5ldExvY2sg
-VXpsZXRpIChDbGFzcyBCKSBUYW51c2l0dmFueWtpYWRvMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB
-iQKBgQCx6gTsIKAjwo84YM/HRrPVG/77uZmeBNwcf4xKgZjupNTKihe5In+DCnVMm8Bp2GQ5o+2S
-o/1bXHQawEfKOml2mrriRBf8TKPV/riXiK+IA4kfpPIEPsgHC+b5sy96YhQJRhTKZPWLgLViqNhr
-1nGTLbO/CVRY7QbrqHvcQ7GhaQIDAQABo4ICnzCCApswEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNV
-HQ8BAf8EBAMCAAYwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1GSUdZ
-RUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pvbGdhbHRh
-dGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQuIEEgaGl0
-ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2VnLWJpenRv
-c2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUg
-YXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJh
-c2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBhIGh0dHBz
-Oi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVub3J6ZXNA
-bmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1YW5jZSBhbmQgdGhl
-IHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sgQ1BTIGF2
-YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBj
-cHNAbmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4GBAATbrowXr/gOkDFOzT4JwG06sPgzTEdM
-43WIEJessDgVkcYplswhwG08pXTP2IKlOcNl40JwuyKQ433bNXbhoLXan3BukxowOR0w2y7jfLKR
-stE3Kfq51hdcR0/jHTjrn9V7lagonhVK0dHQKwCXoOKSNitjrFgBazMpUIaD8QFI
------END CERTIFICATE-----
-
-NetLock Express (Class C) Root
-==============================
------BEGIN CERTIFICATE-----
-MIIFTzCCBLigAwIBAgIBaDANBgkqhkiG9w0BAQQFADCBmzELMAkGA1UEBhMCSFUxETAPBgNVBAcT
-CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV
-BAsTEVRhbnVzaXR2YW55a2lhZG9rMTQwMgYDVQQDEytOZXRMb2NrIEV4cHJlc3N6IChDbGFzcyBD
-KSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNTE0MDgxMVoXDTE5MDIyMDE0MDgxMVowgZsxCzAJ
-BgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6
-dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE0MDIGA1UEAxMrTmV0TG9j
-ayBFeHByZXNzeiAoQ2xhc3MgQykgVGFudXNpdHZhbnlraWFkbzCBnzANBgkqhkiG9w0BAQEFAAOB
-jQAwgYkCgYEA6+ywbGGKIyWvYCDj2Z/8kwvbXY2wobNAOoLO/XXgeDIDhlqGlZHtU/qdQPzm6N3Z
-W3oDvV3zOwzDUXmbrVWg6dADEK8KuhRC2VImESLH0iDMgqSaqf64gXadarfSNnU+sYYJ9m5tfk63
-euyucYT2BDMIJTLrdKwWRMbkQJMdf60CAwEAAaOCAp8wggKbMBIGA1UdEwEB/wQIMAYBAf8CAQQw
-DgYDVR0PAQH/BAQDAgAGMBEGCWCGSAGG+EIBAQQEAwIABzCCAmAGCWCGSAGG+EIBDQSCAlEWggJN
-RklHWUVMRU0hIEV6ZW4gdGFudXNpdHZhbnkgYSBOZXRMb2NrIEtmdC4gQWx0YWxhbm9zIFN6b2xn
-YWx0YXRhc2kgRmVsdGV0ZWxlaWJlbiBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0LiBB
-IGhpdGVsZXNpdGVzIGZvbHlhbWF0YXQgYSBOZXRMb2NrIEtmdC4gdGVybWVrZmVsZWxvc3NlZy1i
-aXp0b3NpdGFzYSB2ZWRpLiBBIGRpZ2l0YWxpcyBhbGFpcmFzIGVsZm9nYWRhc2FuYWsgZmVsdGV0
-ZWxlIGF6IGVsb2lydCBlbGxlbm9yemVzaSBlbGphcmFzIG1lZ3RldGVsZS4gQXogZWxqYXJhcyBs
-ZWlyYXNhIG1lZ3RhbGFsaGF0byBhIE5ldExvY2sgS2Z0LiBJbnRlcm5ldCBob25sYXBqYW4gYSBo
-dHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIGNpbWVuIHZhZ3kga2VyaGV0byBheiBlbGxlbm9y
-emVzQG5ldGxvY2submV0IGUtbWFpbCBjaW1lbi4gSU1QT1JUQU5UISBUaGUgaXNzdWFuY2UgYW5k
-IHRoZSB1c2Ugb2YgdGhpcyBjZXJ0aWZpY2F0ZSBpcyBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIENQ
-UyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cubmV0bG9jay5uZXQvZG9jcyBvciBieSBlLW1haWwg
-YXQgY3BzQG5ldGxvY2submV0LjANBgkqhkiG9w0BAQQFAAOBgQAQrX/XDDKACtiG8XmYta3UzbM2
-xJZIwVzNmtkFLp++UOv0JhQQLdRmF/iewSf98e3ke0ugbLWrmldwpu2gpO0u9f38vf5NNwgMvOOW
-gyL1SRt/Syu0VMGAfJlOHdCM7tCs5ZL6dVb+ZKATj7i4Fp1hBWeAyNDYpQcCNJgEjTME1A==
------END CERTIFICATE-----
-
-XRamp Global CA Root
-====================
------BEGIN CERTIFICATE-----
-MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UE
-BhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2Vj
-dXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB
-dXRob3JpdHkwHhcNMDQxMTAxMTcxNDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMx
-HjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkg
-U2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
-dHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS638eMpSe2OAtp87ZOqCwu
-IR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCPKZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMx
-foArtYzAQDsRhtDLooY2YKTVMIJt2W7QDxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FE
-zG+gSqmUsE3a56k0enI4qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqs
-AxcZZPRaJSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNViPvry
-xS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud
-EwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASsjVy16bYbMDYGA1UdHwQvMC0wK6Ap
-oCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMC
-AQEwDQYJKoZIhvcNAQEFBQADggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc
-/Kh4ZzXxHfARvbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt
-qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLaIR9NmXmd4c8n
-nxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSyi6mx5O+aGtA9aZnuqCij4Tyz
-8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQO+7ETPTsJ3xCwnR8gooJybQDJbw=
------END CERTIFICATE-----
-
-Go Daddy Class 2 CA
-===================
------BEGIN CERTIFICATE-----
-MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMY
-VGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRp
-ZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkG
-A1UEBhMCVVMxITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g
-RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQAD
-ggENADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCAPVYYYwhv
-2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6wwdhFJ2+qN1j3hybX2C32
-qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXiEqITLdiOr18SPaAIBQi2XKVlOARFmR6j
-YGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmY
-vLEHZ6IVDd2gWMZEewo+YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0O
-BBYEFNLEsNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h/t2o
-atTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMu
-MTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwG
-A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wim
-PQoZ+YeAEW5p5JYXMP80kWNyOO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKt
-I3lpjbi2Tc7PTMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ
-HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mERdEr/VxqHD3VI
-Ls9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5CufReYNnyicsbkqWletNw+vHX/b
-vZ8=
------END CERTIFICATE-----
-
-Starfield Class 2 CA
-====================
------BEGIN CERTIFICATE-----
-MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzElMCMGA1UEChMc
-U3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZpZWxkIENsYXNzIDIg
-Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQwNjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBo
-MQswCQYDVQQGEwJVUzElMCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAG
-A1UECxMpU3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqG
-SIb3DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf8MOh2tTY
-bitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN+lq2cwQlZut3f+dZxkqZ
-JRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVm
-epsZGD3/cVE8MC5fvj13c7JdBmzDI1aaK4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSN
-F4Azbl5KXZnJHoe0nRrA1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HF
-MIHCMB0GA1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fRzt0f
-hvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNo
-bm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBDbGFzcyAyIENlcnRpZmljYXRpb24g
-QXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGs
-afPzWdqbAYcaT1epoXkJKtv3L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLM
-PUxA2IGvd56Deruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl
-xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynpVSJYACPq4xJD
-KVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEYWQPJIrSPnNVeKtelttQKbfi3
-QBFGmh95DmK/D5fs4C8fF5Q=
------END CERTIFICATE-----
-
-StartCom Certification Authority
-================================
------BEGIN CERTIFICATE-----
-MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN
-U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu
-ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0
-NjM2WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk
-LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg
-U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
-ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y
-o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/
-Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d
-eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt
-2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z
-6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ
-osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/
-untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc
-UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT
-37uMdBNSSwIDAQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE
-FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9jZXJ0LnN0YXJ0
-Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3JsLnN0YXJ0Y29tLm9yZy9zZnNj
-YS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFMBgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUH
-AgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRw
-Oi8vY2VydC5zdGFydGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYg
-U3RhcnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlhYmlsaXR5
-LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2YgdGhlIFN0YXJ0Q29tIENl
-cnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFpbGFibGUgYXQgaHR0cDovL2NlcnQuc3Rh
-cnRjb20ub3JnL3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilT
-dGFydENvbSBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOC
-AgEAFmyZ9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8jhvh
-3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUWFjgKXlf2Ysd6AgXm
-vB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJzewT4F+irsfMuXGRuczE6Eri8sxHk
-fY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3
-fsNrarnDy0RLrHiQi+fHLB5LEUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZ
-EoalHmdkrQYuL6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq
-yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuCO3NJo2pXh5Tl
-1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6Vum0ABj6y6koQOdjQK/W/7HW/
-lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkyShNOsF/5oirpt9P/FlUQqmMGqz9IgcgA38coro
-g14=
------END CERTIFICATE-----
-
-Taiwan GRCA
-===========
------BEGIN CERTIFICATE-----
-MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/MQswCQYDVQQG
-EwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4X
-DTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1owPzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dv
-dmVybm1lbnQgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQAD
-ggIPADCCAgoCggIBAJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qN
-w8XRIePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1qgQdW8or5
-BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKyyhwOeYHWtXBiCAEuTk8O
-1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAtsF/tnyMKtsc2AtJfcdgEWFelq16TheEfO
-htX7MfP6Mb40qij7cEwdScevLJ1tZqa2jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wov
-J5pGfaENda1UhhXcSTvxls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7
-Q3hub/FCVGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHKYS1t
-B6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoHEgKXTiCQ8P8NHuJB
-O9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThNXo+EHWbNxWCWtFJaBYmOlXqYwZE8
-lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1UdDgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNV
-HRMEBTADAQH/MDkGBGcqBwAEMTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg2
-09yewDL7MTqKUWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZ
-TulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyfqzvS/3WXy6Tj
-Zwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaKZEk9GhiHkASfQlK3T8v+R0F2
-Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFEJPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlU
-D7gsL0u8qV1bYH+Mh6XgUmMqvtg7hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6Qz
-DxARvBMB1uUO07+1EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+Hbk
-Z6MmnD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WXudpVBrkk
-7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44VbnzssQwmSNOXfJIoRIM3BKQ
-CZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDeLMDDav7v3Aun+kbfYNucpllQdSNpc5Oy
-+fwC00fmcc4QAu4njIT/rEUNE1yDMuAlpYYsfPQS
------END CERTIFICATE-----
-
-Firmaprofesional Root CA
-========================
------BEGIN CERTIFICATE-----
-MIIEVzCCAz+gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBnTELMAkGA1UEBhMCRVMxIjAgBgNVBAcT
-GUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMTOUF1dG9yaWRhZCBkZSBDZXJ0aWZp
-Y2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2ODEmMCQGCSqGSIb3DQEJARYXY2FA
-ZmlybWFwcm9mZXNpb25hbC5jb20wHhcNMDExMDI0MjIwMDAwWhcNMTMxMDI0MjIwMDAwWjCBnTEL
-MAkGA1UEBhMCRVMxIjAgBgNVBAcTGUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMT
-OUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2
-ODEmMCQGCSqGSIb3DQEJARYXY2FAZmlybWFwcm9mZXNpb25hbC5jb20wggEiMA0GCSqGSIb3DQEB
-AQUAA4IBDwAwggEKAoIBAQDnIwNvbyOlXnjOlSztlB5uCp4Bx+ow0Syd3Tfom5h5VtP8c9/Qit5V
-j1H5WuretXDE7aTt/6MNbg9kUDGvASdYrv5sp0ovFy3Tc9UTHI9ZpTQsHVQERc1ouKDAA6XPhUJH
-lShbz++AbOCQl4oBPB3zhxAwJkh91/zpnZFx/0GaqUC1N5wpIE8fUuOgfRNtVLcK3ulqTgesrBlf
-3H5idPayBQC6haD9HThuy1q7hryUZzM1gywfI834yJFxzJeL764P3CkDG8A563DtwW4O2GcLiam8
-NeTvtjS0pbbELaW+0MOUJEjb35bTALVmGotmBQ/dPz/LP6pemkr4tErvlTcbAgMBAAGjgZ8wgZww
-KgYDVR0RBCMwIYYfaHR0cDovL3d3dy5maXJtYXByb2Zlc2lvbmFsLmNvbTASBgNVHRMBAf8ECDAG
-AQH/AgEBMCsGA1UdEAQkMCKADzIwMDExMDI0MjIwMDAwWoEPMjAxMzEwMjQyMjAwMDBaMA4GA1Ud
-DwEB/wQEAwIBBjAdBgNVHQ4EFgQUMwugZtHq2s7eYpMEKFK1FH84aLcwDQYJKoZIhvcNAQEFBQAD
-ggEBAEdz/o0nVPD11HecJ3lXV7cVVuzH2Fi3AQL0M+2TUIiefEaxvT8Ub/GzR0iLjJcG1+p+o1wq
-u00vR+L4OQbJnC4xGgN49Lw4xiKLMzHwFgQEffl25EvXwOaD7FnMP97/T2u3Z36mhoEyIwOdyPdf
-wUpgpZKpsaSgYMN4h7Mi8yrrW6ntBas3D7Hi05V2Y1Z0jFhyGzflZKG+TQyTmAyX9odtsz/ny4Cm
-7YjHX1BiAuiZdBbQ5rQ58SfLyEDW44YQqSMSkuBpQWOnryULwMWSyx6Yo1q6xTMPoJcB3X/ge9YG
-VM+h4k0460tQtcsm9MracEpqoeJ5quGnM/b9Sh/22WA=
------END CERTIFICATE-----
-
-Wells Fargo Root CA
-===================
------BEGIN CERTIFICATE-----
-MIID5TCCAs2gAwIBAgIEOeSXnjANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UEBhMCVVMxFDASBgNV
-BAoTC1dlbGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhv
-cml0eTEvMC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN
-MDAxMDExMTY0MTI4WhcNMjEwMTE0MTY0MTI4WjCBgjELMAkGA1UEBhMCVVMxFDASBgNVBAoTC1dl
-bGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEv
-MC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqG
-SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDVqDM7Jvk0/82bfuUER84A4n135zHCLielTWi5MbqNQ1mX
-x3Oqfz1cQJ4F5aHiidlMuD+b+Qy0yGIZLEWukR5zcUHESxP9cMIlrCL1dQu3U+SlK93OvRw6esP3
-E48mVJwWa2uv+9iWsWCaSOAlIiR5NM4OJgALTqv9i86C1y8IcGjBqAr5dE8Hq6T54oN+J3N0Prj5
-OEL8pahbSCOz6+MlsoCultQKnMJ4msZoGK43YjdeUXWoWGPAUe5AeH6orxqg4bB4nVCMe+ez/I4j
-sNtlAHCEAQgAFG5Uhpq6zPk3EPbg3oQtnaSFN9OH4xXQwReQfhkhahKpdv0SAulPIV4XAgMBAAGj
-YTBfMA8GA1UdEwEB/wQFMAMBAf8wTAYDVR0gBEUwQzBBBgtghkgBhvt7hwcBCzAyMDAGCCsGAQUF
-BwIBFiRodHRwOi8vd3d3LndlbGxzZmFyZ28uY29tL2NlcnRwb2xpY3kwDQYJKoZIhvcNAQEFBQAD
-ggEBANIn3ZwKdyu7IvICtUpKkfnRLb7kuxpo7w6kAOnu5+/u9vnldKTC2FJYxHT7zmu1Oyl5GFrv
-m+0fazbuSCUlFLZWohDo7qd/0D+j0MNdJu4HzMPBJCGHHt8qElNvQRbn7a6U+oxy+hNH8Dx+rn0R
-OhPs7fpvcmR7nX1/Jv16+yWt6j4pf0zjAFcysLPp7VMX2YuyFA4w6OXVE8Zkr8QA1dhYJPz1j+zx
-x32l2w8n0cbyQIjmH/ZhqPRCyLk306m+LFZ4wnKbWV01QIroTmMatukgalHizqSQ33ZwmVxwQ023
-tqcZZE6St8WRPH9IFmV7Fv3L/PvZ1dZPIWU7Sn9Ho/s=
------END CERTIFICATE-----
-
-Swisscom Root CA 1
-==================
------BEGIN CERTIFICATE-----
-MIIF2TCCA8GgAwIBAgIQXAuFXAvnWUHfV8w/f52oNjANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQG
-EwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0YWwgQ2VydGlmaWNhdGUgU2Vy
-dmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3QgQ0EgMTAeFw0wNTA4MTgxMjA2MjBaFw0yNTA4
-MTgyMjA2MjBaMGQxCzAJBgNVBAYTAmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGln
-aXRhbCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAxMIIC
-IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0LmwqAzZuz8h+BvVM5OAFmUgdbI9m2BtRsiM
-MW8Xw/qabFbtPMWRV8PNq5ZJkCoZSx6jbVfd8StiKHVFXqrWW/oLJdihFvkcxC7mlSpnzNApbjyF
-NDhhSbEAn9Y6cV9Nbc5fuankiX9qUvrKm/LcqfmdmUc/TilftKaNXXsLmREDA/7n29uj/x2lzZAe
-AR81sH8A25Bvxn570e56eqeqDFdvpG3FEzuwpdntMhy0XmeLVNxzh+XTF3xmUHJd1BpYwdnP2IkC
-b6dJtDZd0KTeByy2dbcokdaXvij1mB7qWybJvbCXc9qukSbraMH5ORXWZ0sKbU/Lz7DkQnGMU3nn
-7uHbHaBuHYwadzVcFh4rUx80i9Fs/PJnB3r1re3WmquhsUvhzDdf/X/NTa64H5xD+SpYVUNFvJbN
-cA78yeNmuk6NO4HLFWR7uZToXTNShXEuT46iBhFRyePLoW4xCGQMwtI89Tbo19AOeCMgkckkKmUp
-WyL3Ic6DXqTz3kvTaI9GdVyDCW4pa8RwjPWd1yAv/0bSKzjCL3UcPX7ape8eYIVpQtPM+GP+HkM5
-haa2Y0EQs3MevNP6yn0WR+Kn1dCjigoIlmJWbjTb2QK5MHXjBNLnj8KwEUAKrNVxAmKLMb7dxiNY
-MUJDLXT5xp6mig/p/r+D5kNXJLrvRjSq1xIBOO0CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYw
-HQYDVR0hBBYwFDASBgdghXQBUwABBgdghXQBUwABMBIGA1UdEwEB/wQIMAYBAf8CAQcwHwYDVR0j
-BBgwFoAUAyUv3m+CATpcLNwroWm1Z9SM0/0wHQYDVR0OBBYEFAMlL95vggE6XCzcK6FptWfUjNP9
-MA0GCSqGSIb3DQEBBQUAA4ICAQA1EMvspgQNDQ/NwNurqPKIlwzfky9NfEBWMXrrpA9gzXrzvsMn
-jgM+pN0S734edAY8PzHyHHuRMSG08NBsl9Tpl7IkVh5WwzW9iAUPWxAaZOHHgjD5Mq2eUCzneAXQ
-MbFamIp1TpBcahQq4FJHgmDmHtqBsfsUC1rxn9KVuj7QG9YVHaO+htXbD8BJZLsuUBlL0iT43R4H
-VtA4oJVwIHaM190e3p9xxCPvgxNcoyQVTSlAPGrEqdi3pkSlDfTgnXceQHAm/NrZNuR55LU/vJtl
-vrsRls/bxig5OgjOR1tTWsWZ/l2p3e9M1MalrQLmjAcSHm8D0W+go/MpvRLHUKKwf4ipmXeascCl
-OS5cfGniLLDqN2qk4Vrh9VDlg++luyqI54zb/W1elxmofmZ1a3Hqv7HHb6D0jqTsNFFbjCYDcKF3
-1QESVwA12yPeDooomf2xEG9L/zgtYE4snOtnta1J7ksfrK/7DZBaZmBwXarNeNQk7shBoJMBkpxq
-nvy5JMWzFYJ+vq6VK+uxwNrjAWALXmmshFZhvnEX/h0TD/7Gh0Xp/jKgGg0TpJRVcaUWi7rKibCy
-x/yP2FS1k2Kdzs9Z+z0YzirLNRWCXf9UIltxUvu3yf5gmwBBZPCqKuy2QkPOiWaByIufOVQDJdMW
-NY6E0F/6MBr1mmz0DlP5OlvRHA==
------END CERTIFICATE-----
-
-DigiCert Assured ID Root CA
-===========================
------BEGIN CERTIFICATE-----
-MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQG
-EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw
-IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzEx
-MTEwMDAwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL
-ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0Ew
-ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7cJpSIqvTO
-9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYPmDI2dsze3Tyoou9q+yHy
-UmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW
-/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpy
-oeb6pNnVFzF1roV9Iq4/AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whf
-GHdPAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRF
-66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzANBgkq
-hkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRCdWKuh+vy1dneVrOfzM4UKLkNl2Bc
-EkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTffwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38Fn
-SbNd67IJKusm7Xi+fT8r87cmNW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i
-8b5QZ7dsvfPxH2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe
-+o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g==
------END CERTIFICATE-----
-
-DigiCert Global Root CA
-=======================
------BEGIN CERTIFICATE-----
-MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQG
-EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw
-HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBDQTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAw
-MDAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3
-dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkq
-hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsBCSDMAZOn
-TjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97nh6Vfe63SKMI2tavegw5
-BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt43C/dxC//AH2hdmoRBBYMql1GNXRor5H
-4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7PT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y
-7vrTC0LUq7dBMtoM1O/4gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQAB
-o2MwYTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbRTLtm
-8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDQYJKoZIhvcNAQEF
-BQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/EsrhMAtudXH/vTBH1jLuG2cenTnmCmr
-EbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIt
-tep3Sp+dWOIrWcBAI+0tKIJFPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886
-UAb3LujEV0lsYSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
-CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
------END CERTIFICATE-----
-
-DigiCert High Assurance EV Root CA
-==================================
------BEGIN CERTIFICATE-----
-MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQG
-EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSsw
-KQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5jZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAw
-MFoXDTMxMTExMDAwMDAwMFowbDELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZ
-MBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFu
-Y2UgRVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm+9S75S0t
-Mqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTWPNt0OKRKzE0lgvdKpVMS
-OO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEMxChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3
-MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFBIk5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQ
-NAQTXKFx01p8VdteZOE3hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUe
-h10aUAsgEsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMB
-Af8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaAFLE+w2kD+L9HAdSY
-JhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3NecnzyIZgYIVyHbIUf4KmeqvxgydkAQ
-V8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6zeM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFp
-myPInngiK3BD41VHMWEZ71jFhS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkK
-mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
-vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K
------END CERTIFICATE-----
-
-Certplus Class 2 Primary CA
-===========================
------BEGIN CERTIFICATE-----
-MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAwPTELMAkGA1UE
-BhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFzcyAyIFByaW1hcnkgQ0EwHhcN
-OTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2Vy
-dHBsdXMxGzAZBgNVBAMTEkNsYXNzIDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP
-ADCCAQoCggEBANxQltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR
-5aiRVhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyLkcAbmXuZ
-Vg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCdEgETjdyAYveVqUSISnFO
-YFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yasH7WLO7dDWWuwJKZtkIvEcupdM5i3y95e
-e++U8Rs+yskhwcWYAqqi9lt3m/V+llU0HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRME
-CDAGAQH/AgEKMAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJ
-YIZIAYb4QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMuY29t
-L0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/AN9WM2K191EBkOvD
-P9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8yfFC82x/xXp8HVGIutIKPidd3i1R
-TtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMRFcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+
-7UCmnYR0ObncHoUW2ikbhiMAybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW
-//1IMwrh3KWBkJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7
-l7+ijrRU
------END CERTIFICATE-----
-
-DST Root CA X3
-==============
------BEGIN CERTIFICATE-----
-MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/MSQwIgYDVQQK
-ExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMTDkRTVCBSb290IENBIFgzMB4X
-DTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVowPzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1
-cmUgVHJ1c3QgQ28uMRcwFQYDVQQDEw5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQAD
-ggEPADCCAQoCggEBAN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmT
-rE4Orz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEqOLl5CjH9
-UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9bxiqKqy69cK3FCxolkHRy
-xXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40d
-utolucbY38EVAjqr2m7xPi71XAicPNaDaeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0T
-AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQ
-MA0GCSqGSIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69ikug
-dB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXrAvHRAosZy5Q6XkjE
-GB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZzR8srzJmwN0jP41ZL9c8PDHIyh8bw
-RLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubS
-fZGL+T0yjWW06XyxV3bqxbYoOb8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ
------END CERTIFICATE-----
-
-DST ACES CA X6
-==============
------BEGIN CERTIFICATE-----
-MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBbMQswCQYDVQQG
-EwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QxETAPBgNVBAsTCERTVCBBQ0VT
-MRcwFQYDVQQDEw5EU1QgQUNFUyBDQSBYNjAeFw0wMzExMjAyMTE5NThaFw0xNzExMjAyMTE5NTha
-MFsxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdDERMA8GA1UE
-CxMIRFNUIEFDRVMxFzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjANBgkqhkiG9w0BAQEFAAOC
-AQ8AMIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5WZFcRt2SPp/5DgO0PWGSvSMmtWPuktKe1jzI
-DZBfZIGxqAgNTNj50wUoUrQBJcWVHAx+PhCEdc/BGZFjz+iokYi5Q1K7gLFViYsx+tC3dr5BPTCa
-pCIlF3PoHuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZHfAjIgrrep4c9oW24MFbCswKBXy314pow
-GCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4aahELfrd755jWjHZvwTvbUJN+5dCOHze4vbrGn2zpfDPy
-MjwmR/onJALJfh1biEITajV8fTXpLmaRcpPVMibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1Ud
-EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rkc3Qu
-Y29tMGIGA1UdIARbMFkwVwYKYIZIAWUDAgEBATBJMEcGCCsGAQUFBwIBFjtodHRwOi8vd3d3LnRy
-dXN0ZHN0LmNvbS9jZXJ0aWZpY2F0ZXMvcG9saWN5L0FDRVMtaW5kZXguaHRtbDAdBgNVHQ4EFgQU
-CXIGThhDD+XWzMNqizF7eI+og7gwDQYJKoZIhvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V2
-5FYrnJmQ6AgwbN99Pe7lv7UkQIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6t
-Fr8hlxCBPeP/h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8smk/f3rPanTK+gQq
-nExaBqXpIK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir42NInPRmJX1p7ijvMDNpRrscL9yuwNwXs
-vFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf29w4LTJxoeHtxMcfrHuBnQfO3
-oKfN5XozNmr6mis=
------END CERTIFICATE-----
-
-TURKTRUST Certificate Services Provider Root 1
-==============================================
------BEGIN CERTIFICATE-----
-MIID+zCCAuOgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBtzE/MD0GA1UEAww2VMOcUktUUlVTVCBF
-bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGDAJUUjEP
-MA0GA1UEBwwGQU5LQVJBMVYwVAYDVQQKDE0oYykgMjAwNSBUw5xSS1RSVVNUIEJpbGdpIMSwbGV0
-acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjAeFw0wNTA1MTMx
-MDI3MTdaFw0xNTAzMjIxMDI3MTdaMIG3MT8wPQYDVQQDDDZUw5xSS1RSVVNUIEVsZWt0cm9uaWsg
-U2VydGlmaWthIEhpem1ldCBTYcSfbGF5xLFjxLFzxLExCzAJBgNVBAYMAlRSMQ8wDQYDVQQHDAZB
-TktBUkExVjBUBgNVBAoMTShjKSAyMDA1IFTDnFJLVFJVU1QgQmlsZ2kgxLBsZXRpxZ9pbSB2ZSBC
-aWxpxZ9pbSBHw7x2ZW5sacSfaSBIaXptZXRsZXJpIEEuxZ4uMIIBIjANBgkqhkiG9w0BAQEFAAOC
-AQ8AMIIBCgKCAQEAylIF1mMD2Bxf3dJ7XfIMYGFbazt0K3gNfUW9InTojAPBxhEqPZW8qZSwu5GX
-yGl8hMW0kWxsE2qkVa2kheiVfrMArwDCBRj1cJ02i67L5BuBf5OI+2pVu32Fks66WJ/bMsW9Xe8i
-Si9BB35JYbOG7E6mQW6EvAPs9TscyB/C7qju6hJKjRTP8wrgUDn5CDX4EVmt5yLqS8oUBt5CurKZ
-8y1UiBAG6uEaPj1nH/vO+3yC6BFdSsG5FOpU2WabfIl9BJpiyelSPJ6c79L1JuTm5Rh8i27fbMx4
-W09ysstcP4wFjdFMjK2Sx+F4f2VsSQZQLJ4ywtdKxnWKWU51b0dewQIDAQABoxAwDjAMBgNVHRME
-BTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAV9VX/N5aAWSGk/KEVTCD21F/aAyT8z5Aa9CEKmu46
-sWrv7/hg0Uw2ZkUd82YCdAR7kjCo3gp2D++Vbr3JN+YaDayJSFvMgzbC9UZcWYJWtNX+I7TYVBxE
-q8Sn5RTOPEFhfEPmzcSBCYsk+1Ql1haolgxnB2+zUEfjHCQo3SqYpGH+2+oSN7wBGjSFvW5P55Fy
-B0SFHljKVETd96y5y4khctuPwGkplyqjrhgjlxxBKot8KsF8kOipKMDTkcatKIdAaLX/7KfS0zgY
-nNN9aV3wxqUeJBujR/xpB2jn5Jq07Q+hh4cCzofSSE7hvP/L8XKSRGQDJereW26fyfJOrN3H
------END CERTIFICATE-----
-
-TURKTRUST Certificate Services Provider Root 2
-==============================================
------BEGIN CERTIFICATE-----
-MIIEPDCCAySgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBF
-bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEP
-MA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUg
-QmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwHhcN
-MDUxMTA3MTAwNzU3WhcNMTUwOTE2MTAwNzU3WjCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBFbGVr
-dHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEPMA0G
-A1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmls
-acWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwggEiMA0G
-CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCpNn7DkUNMwxmYCMjHWHtPFoylzkkBH3MOrHUTpvqe
-LCDe2JAOCtFp0if7qnefJ1Il4std2NiDUBd9irWCPwSOtNXwSadktx4uXyCcUHVPr+G1QRT0mJKI
-x+XlZEdhR3n9wFHxwZnn3M5q+6+1ATDcRhzviuyV79z/rxAc653YsKpqhRgNF8k+v/Gb0AmJQv2g
-QrSdiVFVKc8bcLyEVK3BEx+Y9C52YItdP5qtygy/p1Zbj3e41Z55SZI/4PGXJHpsmxcPbe9TmJEr
-5A++WXkHeLuXlfSfadRYhwqp48y2WBmfJiGxxFmNskF1wK1pzpwACPI2/z7woQ8arBT9pmAPAgMB
-AAGjQzBBMB0GA1UdDgQWBBTZN7NOBf3Zz58SFq62iS/rJTqIHDAPBgNVHQ8BAf8EBQMDBwYAMA8G
-A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAHJglrfJ3NgpXiOFX7KzLXb7iNcX/ntt
-Rbj2hWyfIvwqECLsqrkw9qtY1jkQMZkpAL2JZkH7dN6RwRgLn7Vhy506vvWolKMiVW4XSf/SKfE4
-Jl3vpao6+XF75tpYHdN0wgH6PmlYX63LaL4ULptswLbcoCb6dxriJNoaN+BnrdFzgw2lGh1uEpJ+
-hGIAF728JRhX8tepb1mIvDS3LoV4nZbcFMMsilKbloxSZj2GFotHuFEJjOp9zYhys2AzsfAKRO8P
-9Qk3iCQOLGsgOqL6EfJANZxEaGM7rDNvY7wsu/LSy3Z9fYjYHcgFHW68lKlmjHdxx/qR+i9Rnuk5
-UrbnBEI=
------END CERTIFICATE-----
-
-SwissSign Platinum CA - G2
-==========================
------BEGIN CERTIFICATE-----
-MIIFwTCCA6mgAwIBAgIITrIAZwwDXU8wDQYJKoZIhvcNAQEFBQAwSTELMAkGA1UEBhMCQ0gxFTAT
-BgNVBAoTDFN3aXNzU2lnbiBBRzEjMCEGA1UEAxMaU3dpc3NTaWduIFBsYXRpbnVtIENBIC0gRzIw
-HhcNMDYxMDI1MDgzNjAwWhcNMzYxMDI1MDgzNjAwWjBJMQswCQYDVQQGEwJDSDEVMBMGA1UEChMM
-U3dpc3NTaWduIEFHMSMwIQYDVQQDExpTd2lzc1NpZ24gUGxhdGludW0gQ0EgLSBHMjCCAiIwDQYJ
-KoZIhvcNAQEBBQADggIPADCCAgoCggIBAMrfogLi2vj8Bxax3mCq3pZcZB/HL37PZ/pEQtZ2Y5Wu
-669yIIpFR4ZieIbWIDkm9K6j/SPnpZy1IiEZtzeTIsBQnIJ71NUERFzLtMKfkr4k2HtnIuJpX+UF
-eNSH2XFwMyVTtIc7KZAoNppVRDBopIOXfw0enHb/FZ1glwCNioUD7IC+6ixuEFGSzH7VozPY1kne
-WCqv9hbrS3uQMpe5up1Y8fhXSQQeol0GcN1x2/ndi5objM89o03Oy3z2u5yg+gnOI2Ky6Q0f4nIo
-j5+saCB9bzuohTEJfwvH6GXp43gOCWcwizSC+13gzJ2BbWLuCB4ELE6b7P6pT1/9aXjvCR+htL/6
-8++QHkwFix7qepF6w9fl+zC8bBsQWJj3Gl/QKTIDE0ZNYWqFTFJ0LwYfexHihJfGmfNtf9dng34T
-aNhxKFrYzt3oEBSa/m0jh26OWnA81Y0JAKeqvLAxN23IhBQeW71FYyBrS3SMvds6DsHPWhaPpZjy
-domyExI7C3d3rLvlPClKknLKYRorXkzig3R3+jVIeoVNjZpTxN94ypeRSCtFKwH3HBqi7Ri6Cr2D
-+m+8jVeTO9TUps4e8aCxzqv9KyiaTxvXw3LbpMS/XUz13XuWae5ogObnmLo2t/5u7Su9IPhlGdpV
-CX4l3P5hYnL5fhgC72O00Puv5TtjjGePAgMBAAGjgawwgakwDgYDVR0PAQH/BAQDAgEGMA8GA1Ud
-EwEB/wQFMAMBAf8wHQYDVR0OBBYEFFCvzAeHFUdvOMW0ZdHelarp35zMMB8GA1UdIwQYMBaAFFCv
-zAeHFUdvOMW0ZdHelarp35zMMEYGA1UdIAQ/MD0wOwYJYIV0AVkBAQEBMC4wLAYIKwYBBQUHAgEW
-IGh0dHA6Ly9yZXBvc2l0b3J5LnN3aXNzc2lnbi5jb20vMA0GCSqGSIb3DQEBBQUAA4ICAQAIhab1
-Fgz8RBrBY+D5VUYI/HAcQiiWjrfFwUF1TglxeeVtlspLpYhg0DB0uMoI3LQwnkAHFmtllXcBrqS3
-NQuB2nEVqXQXOHtYyvkv+8Bldo1bAbl93oI9ZLi+FHSjClTTLJUYFzX1UWs/j6KWYTl4a0vlpqD4
-U99REJNi54Av4tHgvI42Rncz7Lj7jposiU0xEQ8mngS7twSNC/K5/FqdOxa3L8iYq/6KUFkuozv8
-KV2LwUvJ4ooTHbG/u0IdUt1O2BReEMYxB+9xJ/cbOQncguqLs5WGXv312l0xpuAxtpTmREl0xRbl
-9x8DYSjFyMsSoEJL+WuICI20MhjzdZ/EfwBPBZWcoxcCw7NTm6ogOSkrZvqdr16zktK1puEa+S1B
-aYEUtLS17Yk9zvupnTVCRLEcFHOBzyoBNZox1S2PbYTfgE1X4z/FhHXaicYwu+uPyyIIoK6q8QNs
-OktNCaUOcsZWayFCTiMlFGiudgp8DAdwZPmaL/YFOSbGDI8Zf0NebvRbFS/bYV3mZy8/CJT5YLSY
-Mdp08YSTcU1f+2BY0fvEwW2JorsgH51xkcsymxM9Pn2SUjWskpSi0xjCfMfqr3YFFt1nJ8J+HAci
-IfNAChs0B0QTwoRqjt8ZWr9/6x3iGjjRXK9HkmuAtTClyY3YqzGBH9/CZjfTk6mFhnll0g==
------END CERTIFICATE-----
-
-SwissSign Gold CA - G2
-======================
------BEGIN CERTIFICATE-----
-MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNVBAYTAkNIMRUw
-EwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2lnbiBHb2xkIENBIC0gRzIwHhcN
-MDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBFMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dp
-c3NTaWduIEFHMR8wHQYDVQQDExZTd2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0B
-AQEFAAOCAg8AMIICCgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUq
-t2/876LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+bbqBHH5C
-jCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c6bM8K8vzARO/Ws/BtQpg
-vd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqEemA8atufK+ze3gE/bk3lUIbLtK/tREDF
-ylqM2tIrfKjuvqblCqoOpd8FUrdVxyJdMmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvR
-AiTysybUa9oEVeXBCsdtMDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuend
-jIj3o02yMszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69yFGkO
-peUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPiaG59je883WX0XaxR
-7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxMgI93e2CaHt+28kgeDrpOVG2Y4OGi
-GqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUw
-AwEB/zAdBgNVHQ4EFgQUWyV7lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64
-OfPAeGZe6Drn8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov
-L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe645R88a7A3hfm
-5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczOUYrHUDFu4Up+GC9pWbY9ZIEr
-44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOf
-Mke6UiI0HTJ6CVanfCU2qT1L2sCCbwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6m
-Gu6uLftIdxf+u+yvGPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxp
-mo/a77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCChdiDyyJk
-vC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid392qgQmwLOM7XdVAyksLf
-KzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEppLd6leNcG2mqeSz53OiATIgHQv2ieY2Br
-NU0LbbqhPcCT4H8js1WtciVORvnSFu+wZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6Lqj
-viOvrv1vA+ACOzB2+httQc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ
------END CERTIFICATE-----
-
-SwissSign Silver CA - G2
-========================
------BEGIN CERTIFICATE-----
-MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCQ0gxFTAT
-BgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMB4X
-DTA2MTAyNTA4MzI0NloXDTM2MTAyNTA4MzI0NlowRzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3
-aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkqhkiG
-9w0BAQEFAAOCAg8AMIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dOcbpLj6VzHVxumK4DV644
-N0MvFz0fyM5oEMF4rhkDKxD6LHmD9ui5aLlV8gREpzn5/ASLHvGiTSf5YXu6t+WiE7brYT7QbNHm
-+/pe7R20nqA1W6GSy/BJkv6FCgU+5tkL4k+73JU3/JHpMjUi0R86TieFnbAVlDLaYQ1HTWBCrpJH
-6INaUFjpiou5XaHc3ZlKHzZnu0jkg7Y360g6rw9njxcH6ATK72oxh9TAtvmUcXtnZLi2kUpCe2Uu
-MGoM9ZDulebyzYLs2aFK7PayS+VFheZteJMELpyCbTapxDFkH4aDCyr0NQp4yVXPQbBH6TCfmb5h
-qAaEuSh6XzjZG6k4sIN/c8HDO0gqgg8hm7jMqDXDhBuDsz6+pJVpATqJAHgE2cn0mRmrVn5bi4Y5
-FZGkECwJMoBgs5PAKrYYC51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRHHTBs
-ROopN4WSaGa8gzj+ezku01DwH/teYLappvonQfGbGHLy9YR0SslnxFSuSGTfjNFusB3hB48IHpmc
-celM2KX3RxIfdNFRnobzwqIjQAtz20um53MGjMGg6cFZrEb65i/4z3GcRm25xBWNOHkDRUjvxF3X
-CO6HOSKGsg0PWEP3calILv3q1h8CAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/
-BAUwAwEB/zAdBgNVHQ4EFgQUF6DNweRBtjpbO8tFnb0cwpj6hlgwHwYDVR0jBBgwFoAUF6DNweRB
-tjpbO8tFnb0cwpj6hlgwRgYDVR0gBD8wPTA7BglghXQBWQEDAQEwLjAsBggrBgEFBQcCARYgaHR0
-cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBAHPGgeAn0i0P
-4JUw4ppBf1AsX19iYamGamkYDHRJ1l2E6kFSGG9YrVBWIGrGvShpWJHckRE1qTodvBqlYJ7YH39F
-kWnZfrt4csEGDyrOj4VwYaygzQu4OSlWhDJOhrs9xCrZ1x9y7v5RoSJBsXECYxqCsGKrXlcSH9/L
-3XWgwF15kIwb4FDm3jH+mHtwX6WQ2K34ArZv02DdQEsixT2tOnqfGhpHkXkzuoLcMmkDlm4fS/Bx
-/uNncqCxv1yL5PqZIseEuRuNI5c/7SXgz2W79WEE790eslpBIlqhn10s6FvJbakMDHiqYMZWjwFa
-DGi8aRl5xB9+lwW/xekkUV7U1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHkFlt4dR2Xem1ZqSqP
-e97Dh4kQmUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQRdAtq/gsD/KNVV4n+Ssuu
-WxcFyPKNIzFTONItaj+CuY0IavdeQXRuwxF+B6wpYJE/OMpXEA29MC/HpeZBoNquBYeaoKRlbEwJ
-DIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+hAhm0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ub
-DgEj8Z+7fNzcbBGXJbLytGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u
------END CERTIFICATE-----
-
-GeoTrust Primary Certification Authority
-========================================
------BEGIN CERTIFICATE-----
-MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQG
-EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMoR2VvVHJ1c3QgUHJpbWFyeSBD
-ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjExMjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgx
-CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQ
-cmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
-CgKCAQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9AWbK7hWN
-b6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjAZIVcFU2Ix7e64HXprQU9
-nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE07e9GceBrAqg1cmuXm2bgyxx5X9gaBGge
-RwLmnWDiNpcB3841kt++Z8dtd1k7j53WkBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGt
-tm/81w7a4DSwDRp35+MImO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
-AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJKoZI
-hvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ16CePbJC/kRYkRj5K
-Ts4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl4b7UVXGYNTq+k+qurUKykG/g/CFN
-NWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6KoKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHa
-Floxt/m0cYASSJlyc1pZU8FjUjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG
-1riR/aYNKxoUAT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk=
------END CERTIFICATE-----
-
-thawte Primary Root CA
-======================
------BEGIN CERTIFICATE-----
-MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCBqTELMAkGA1UE
-BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2
-aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv
-cml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3
-MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwg
-SW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMv
-KGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMT
-FnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCs
-oPD7gFnUnMekz52hWXMJEEUMDSxuaPFsW0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ
-1CRfBsDMRJSUjQJib+ta3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGc
-q/gcfomk6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6Sk/K
-aAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94JNqR32HuHUETVPm4p
-afs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYD
-VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XPr87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUF
-AAOCAQEAeRHAS7ORtvzw6WfUDW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeE
-uzLlQRHAd9mzYJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX
-xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2/qxAeeWsEG89
-jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/LHbTY5xZ3Y+m4Q6gLkH3LpVH
-z7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7jVaMaA==
------END CERTIFICATE-----
-
-VeriSign Class 3 Public Primary Certification Authority - G5
-============================================================
------BEGIN CERTIFICATE-----
-MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE
-BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO
-ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk
-IHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRp
-ZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCB
-yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2ln
-biBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBh
-dXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmlt
-YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
-ggEKAoIBAQCvJAgIKXo1nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKz
-j/i5Vbext0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIzSdhD
-Y2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQGBO+QueQA5N06tRn/
-Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+rCpSx4/VBEnkjWNHiDxpg8v+R70r
-fk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/
-BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2Uv
-Z2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy
-aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKvMzEzMA0GCSqG
-SIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzEp6B4Eq1iDkVwZMXnl2YtmAl+
-X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKE
-KQsTb47bDN0lAtukixlE0kF6BWlKWE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiC
-Km0oHw0LxOXnGiYZ4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vE
-ZV8NhnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq
------END CERTIFICATE-----
-
-SecureTrust CA
-==============
------BEGIN CERTIFICATE-----
-MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBIMQswCQYDVQQG
-EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xFzAVBgNVBAMTDlNlY3VyZVRy
-dXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIzMTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAe
-BgNVBAoTF1NlY3VyZVRydXN0IENvcnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCC
-ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQX
-OZEzZum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO0gMdA+9t
-DWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIaowW8xQmxSPmjL8xk037uH
-GFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b
-01k/unK8RCSc43Oz969XL0Imnal0ugBS8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmH
-ursCAwEAAaOBnTCBmjATBgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/
-BAUwAwEB/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCegJYYj
-aHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ
-KoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt36Z3q059c4EVlew3KW+JwULKUBRSu
-SceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHf
-mbx8IVQr5Fiiu1cprp6poxkmD5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZ
-nMUFdAvnZyPSCPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR
-3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE=
------END CERTIFICATE-----
-
-Secure Global CA
-================
------BEGIN CERTIFICATE-----
-MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQG
-EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBH
-bG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkxMjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEg
-MB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwg
-Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jx
-YDiJiQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa/FHtaMbQ
-bqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJjnIFHovdRIWCQtBJwB1g
-8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnIHmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYV
-HDGA76oYa8J719rO+TMg1fW9ajMtgQT7sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi
-0XPnj3pDAgMBAAGjgZ0wgZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud
-EwEB/wQFMAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCswKaAn
-oCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsGAQQBgjcVAQQDAgEA
-MA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0LURYD7xh8yOOvaliTFGCRsoTciE6+
-OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXOH0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cn
-CDpOGR86p1hcF895P4vkp9MmI50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/5
-3CYNv6ZHdAbYiNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc
-f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW
------END CERTIFICATE-----
-
-COMODO Certification Authority
-==============================
------BEGIN CERTIFICATE-----
-MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCBgTELMAkGA1UE
-BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG
-A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNVBAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1
-dGhvcml0eTAeFw0wNjEyMDEwMDAwMDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEb
-MBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFD
-T01PRE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
-MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3UcEbVASY06m/weaKXTuH
-+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI2GqGd0S7WWaXUF601CxwRM/aN5VCaTww
-xHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV
-4EajcNxo2f8ESIl33rXp+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA
-1KGzqSX+DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5OnKVI
-rLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW/zAOBgNVHQ8BAf8E
-BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6gPKA6hjhodHRwOi8vY3JsLmNvbW9k
-b2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOC
-AQEAPpiem/Yb6dc5t3iuHXIYSdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CP
-OGEIqB6BCsAvIC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/
-RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4zJVSk/BwJVmc
-IGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5ddBA6+C4OmF4O5MBKgxTMVBbkN
-+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IBZQ==
------END CERTIFICATE-----
-
-Network Solutions Certificate Authority
-=======================================
------BEGIN CERTIFICATE-----
-MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQG
-EwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydOZXR3b3Jr
-IFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMx
-MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu
-MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G
-CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwzc7MEL7xx
-jOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPPOCwGJgl6cvf6UDL4wpPT
-aaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rlmGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXT
-crA/vGp97Eh/jcOrqnErU2lBUzS1sLnFBgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc
-/Qzpf14Dl847ABSHJ3A4qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMB
-AAGjgZcwgZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIBBjAP
-BgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwubmV0c29sc3NsLmNv
-bS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3JpdHkuY3JsMA0GCSqGSIb3DQEBBQUA
-A4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc86fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q
-4LqILPxFzBiwmZVRDuwduIj/h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/
-GGUsyfJj4akH/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv
-wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHNpGxlaKFJdlxD
-ydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey
------END CERTIFICATE-----
-
-WellsSecure Public Root Certificate Authority
-=============================================
------BEGIN CERTIFICATE-----
-MIIEvTCCA6WgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoM
-F1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYw
-NAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN
-MDcxMjEzMTcwNzU0WhcNMjIxMjE0MDAwNzU0WjCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dl
-bGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYD
-VQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G
-CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDub7S9eeKPCCGeOARBJe+rWxxTkqxtnt3CxC5FlAM1
-iGd0V+PfjLindo8796jE2yljDpFoNoqXjopxaAkH5OjUDk/41itMpBb570OYj7OeUt9tkTmPOL13
-i0Nj67eT/DBMHAGTthP796EfvyXhdDcsHqRePGj4S78NuR4uNuip5Kf4D8uCdXw1LSLWwr8L87T8
-bJVhHlfXBIEyg1J55oNjz7fLY4sR4r1e6/aN7ZVyKLSsEmLpSjPmgzKuBXWVvYSV2ypcm44uDLiB
-K0HmOFafSZtsdvqKXfcBeYF8wYNABf5x/Qw/zE5gCQ5lRxAvAcAFP4/4s0HvWkJ+We/SlwxlAgMB
-AAGjggE0MIIBMDAPBgNVHRMBAf8EBTADAQH/MDkGA1UdHwQyMDAwLqAsoCqGKGh0dHA6Ly9jcmwu
-cGtpLndlbGxzZmFyZ28uY29tL3dzcHJjYS5jcmwwDgYDVR0PAQH/BAQDAgHGMB0GA1UdDgQWBBQm
-lRkQ2eihl5H/3BnZtQQ+0nMKajCBsgYDVR0jBIGqMIGngBQmlRkQ2eihl5H/3BnZtQQ+0nMKaqGB
-i6SBiDCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRww
-GgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMg
-Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHmCAQEwDQYJKoZIhvcNAQEFBQADggEBALkVsUSRzCPI
-K0134/iaeycNzXK7mQDKfGYZUMbVmO2rvwNa5U3lHshPcZeG1eMd/ZDJPHV3V3p9+N701NX3leZ0
-bh08rnyd2wIDBSxxSyU+B+NemvVmFymIGjifz6pBA4SXa5M4esowRBskRDPQ5NHcKDj0E0M1NSlj
-qHyita04pO2t/caaH/+Xc/77szWnk4bGdpEA5qxRFsQnMlzbc9qlk1eOPm01JghZ1edE13YgY+es
-E2fDbbFwRnzVlhE9iW9dqKHrjQrawx0zbKPqZxmamX9LPYNRKh3KL4YMon4QLSvUFpULB6ouFJJJ
-tylv2G0xffX8oRAHh84vWdw+WNs=
------END CERTIFICATE-----
-
-COMODO ECC Certification Authority
-==================================
------BEGIN CERTIFICATE-----
-MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTELMAkGA1UEBhMC
-R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE
-ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBB
-dXRob3JpdHkwHhcNMDgwMzA2MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0Ix
-GzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR
-Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRo
-b3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSRFtSrYpn1PlILBs5BAH+X
-4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0JcfRK9ChQtP6IHG4/bC8vCVlbpVsLM5ni
-wz2J+Wos77LTBumjQjBAMB0GA1UdDgQWBBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8E
-BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VG
-FAkK+qDmfQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdvGDeA
-U/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY=
------END CERTIFICATE-----
-
-IGC/A
-=====
------BEGIN CERTIFICATE-----
-MIIEAjCCAuqgAwIBAgIFORFFEJQwDQYJKoZIhvcNAQEFBQAwgYUxCzAJBgNVBAYTAkZSMQ8wDQYD
-VQQIEwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVE
-Q1NTSTEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZy
-MB4XDTAyMTIxMzE0MjkyM1oXDTIwMTAxNzE0MjkyMlowgYUxCzAJBgNVBAYTAkZSMQ8wDQYDVQQI
-EwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVEQ1NT
-STEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZyMIIB
-IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsh/R0GLFMzvABIaIs9z4iPf930Pfeo2aSVz2
-TqrMHLmh6yeJ8kbpO0px1R2OLc/mratjUMdUC24SyZA2xtgv2pGqaMVy/hcKshd+ebUyiHDKcMCW
-So7kVc0dJ5S/znIq7Fz5cyD+vfcuiWe4u0dzEvfRNWk68gq5rv9GQkaiv6GFGvm/5P9JhfejcIYy
-HF2fYPepraX/z9E0+X1bF8bc1g4oa8Ld8fUzaJ1O/Id8NhLWo4DoQw1VYZTqZDdH6nfK0LJYBcNd
-frGoRpAxVs5wKpayMLh35nnAvSk7/ZR3TL0gzUEl4C7HG7vupARB0l2tEmqKm0f7yd1GQOGdPDPQ
-tQIDAQABo3cwdTAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBRjAVBgNVHSAEDjAMMAoGCCqB
-egF5AQEBMB0GA1UdDgQWBBSjBS8YYFDCiQrdKyFP/45OqDAxNjAfBgNVHSMEGDAWgBSjBS8YYFDC
-iQrdKyFP/45OqDAxNjANBgkqhkiG9w0BAQUFAAOCAQEABdwm2Pp3FURo/C9mOnTgXeQp/wYHE4RK
-q89toB9RlPhJy3Q2FLwV3duJL92PoF189RLrn544pEfMs5bZvpwlqwN+Mw+VgQ39FuCIvjfwbF3Q
-MZsyK10XZZOYYLxuj7GoPB7ZHPOpJkL5ZB3C55L29B5aqhlSXa/oovdgoPaN8In1buAKBQGVyYsg
-Crpa/JosPL3Dt8ldeCUFP1YUmwza+zpI/pdpXsoQhvdOlgQITeywvl3cO45Pwf2aNjSaTFR+FwNI
-lQgRHAdvhQh+XU3Endv7rs6y0bO4g2wdsrN58dhwmX7wEwLOXt1R0982gaEbeC9xs/FZTEYYKKuF
-0mBWWg==
------END CERTIFICATE-----
-
-Security Communication EV RootCA1
-=================================
------BEGIN CERTIFICATE-----
-MIIDfTCCAmWgAwIBAgIBADANBgkqhkiG9w0BAQUFADBgMQswCQYDVQQGEwJKUDElMCMGA1UEChMc
-U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEqMCgGA1UECxMhU2VjdXJpdHkgQ29tbXVuaWNh
-dGlvbiBFViBSb290Q0ExMB4XDTA3MDYwNjAyMTIzMloXDTM3MDYwNjAyMTIzMlowYDELMAkGA1UE
-BhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xKjAoBgNVBAsTIVNl
-Y3VyaXR5IENvbW11bmljYXRpb24gRVYgUm9vdENBMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
-AQoCggEBALx/7FebJOD+nLpCeamIivqA4PUHKUPqjgo0No0c+qe1OXj/l3X3L+SqawSERMqm4miO
-/VVQYg+kcQ7OBzgtQoVQrTyWb4vVog7P3kmJPdZkLjjlHmy1V4qe70gOzXppFodEtZDkBp2uoQSX
-WHnvIEqCa4wiv+wfD+mEce3xDuS4GBPMVjZd0ZoeUWs5bmB2iDQL87PRsJ3KYeJkHcFGB7hj3R4z
-ZbOOCVVSPbW9/wfrrWFVGCypaZhKqkDFMxRldAD5kd6vA0jFQFTcD4SQaCDFkpbcLuUCRarAX1T4
-bepJz11sS6/vmsJWXMY1VkJqMF/Cq/biPT+zyRGPMUzXn0kCAwEAAaNCMEAwHQYDVR0OBBYEFDVK
-9U2vP9eCOKyrcWUXdYydVZPmMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqG
-SIb3DQEBBQUAA4IBAQCoh+ns+EBnXcPBZsdAS5f8hxOQWsTvoMpfi7ent/HWtWS3irO4G8za+6xm
-iEHO6Pzk2x6Ipu0nUBsCMCRGef4Eh3CXQHPRwMFXGZpppSeZq51ihPZRwSzJIxXYKLerJRO1RuGG
-Av8mjMSIkh1W/hln8lXkgKNrnKt34VFxDSDbEJrbvXZ5B3eZKK2aXtqxT0QsNY6llsf9g/BYxnnW
-mHyojf6GPgcWkuF75x3sM3Z+Qi5KhfmRiWiEA4Glm5q+4zfFVKtWOxgtQaQM+ELbmaDgcm+7XeEW
-T1MKZPlO9L9OVL14bIjqv5wTJMJwaaJ/D8g8rQjJsJhAoyrniIPtd490
------END CERTIFICATE-----
-
-OISTE WISeKey Global Root GA CA
-===============================
------BEGIN CERTIFICATE-----
-MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCBijELMAkGA1UE
-BhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHlyaWdodCAoYykgMjAwNTEiMCAG
-A1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBH
-bG9iYWwgUm9vdCBHQSBDQTAeFw0wNTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYD
-VQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIw
-IAYDVQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5
-IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy0+zAJs9
-Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxRVVuuk+g3/ytr6dTqvirdqFEr12bDYVxg
-Asj1znJ7O7jyTmUIms2kahnBAbtzptf2w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbD
-d50kc3vkDIzh2TbhmYsFmQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ
-/yxViJGg4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t94B3R
-LoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw
-AwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ
-KoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOxSPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vIm
-MMkQyh2I+3QZH4VFvbBsUfk2ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4
-+vg1YFkCExh8vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa
-hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZiFj4A4xylNoEY
-okxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ/L7fCg0=
------END CERTIFICATE-----
-
-S-TRUST Authentication and Encryption Root CA 2005 PN
-=====================================================
------BEGIN CERTIFICATE-----
-MIIEezCCA2OgAwIBAgIQNxkY5lNUfBq1uMtZWts1tzANBgkqhkiG9w0BAQUFADCBrjELMAkGA1UE
-BhMCREUxIDAeBgNVBAgTF0JhZGVuLVd1ZXJ0dGVtYmVyZyAoQlcpMRIwEAYDVQQHEwlTdHV0dGdh
-cnQxKTAnBgNVBAoTIERldXRzY2hlciBTcGFya2Fzc2VuIFZlcmxhZyBHbWJIMT4wPAYDVQQDEzVT
-LVRSVVNUIEF1dGhlbnRpY2F0aW9uIGFuZCBFbmNyeXB0aW9uIFJvb3QgQ0EgMjAwNTpQTjAeFw0w
-NTA2MjIwMDAwMDBaFw0zMDA2MjEyMzU5NTlaMIGuMQswCQYDVQQGEwJERTEgMB4GA1UECBMXQmFk
-ZW4tV3VlcnR0ZW1iZXJnIChCVykxEjAQBgNVBAcTCVN0dXR0Z2FydDEpMCcGA1UEChMgRGV1dHNj
-aGVyIFNwYXJrYXNzZW4gVmVybGFnIEdtYkgxPjA8BgNVBAMTNVMtVFJVU1QgQXV0aGVudGljYXRp
-b24gYW5kIEVuY3J5cHRpb24gUm9vdCBDQSAyMDA1OlBOMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
-MIIBCgKCAQEA2bVKwdMz6tNGs9HiTNL1toPQb9UY6ZOvJ44TzbUlNlA0EmQpoVXhOmCTnijJ4/Ob
-4QSwI7+Vio5bG0F/WsPoTUzVJBY+h0jUJ67m91MduwwA7z5hca2/OnpYH5Q9XIHV1W/fuJvS9eXL
-g3KSwlOyggLrra1fFi2SU3bxibYs9cEv4KdKb6AwajLrmnQDaHgTncovmwsdvs91DSaXm8f1Xgqf
-eN+zvOyauu9VjxuapgdjKRdZYgkqeQd3peDRF2npW932kKvimAoA0SVtnteFhy+S8dF2g08LOlk3
-KC8zpxdQ1iALCvQm+Z845y2kuJuJja2tyWp9iRe79n+Ag3rm7QIDAQABo4GSMIGPMBIGA1UdEwEB
-/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEGMCkGA1UdEQQiMCCkHjAcMRowGAYDVQQDExFTVFJv
-bmxpbmUxLTIwNDgtNTAdBgNVHQ4EFgQUD8oeXHngovMpttKFswtKtWXsa1IwHwYDVR0jBBgwFoAU
-D8oeXHngovMpttKFswtKtWXsa1IwDQYJKoZIhvcNAQEFBQADggEBAK8B8O0ZPCjoTVy7pWMciDMD
-pwCHpB8gq9Yc4wYfl35UvbfRssnV2oDsF9eK9XvCAPbpEW+EoFolMeKJ+aQAPzFoLtU96G7m1R08
-P7K9n3frndOMusDXtk3sU5wPBG7qNWdX4wple5A64U8+wwCSersFiXOMy6ZNwPv2AtawB6MDwidA
-nwzkhYItr5pCHdDHjfhA7p0GVxzZotiAFP7hYy0yh9WUUpY6RsZxlj33mA6ykaqP2vROJAA5Veit
-F7nTNCtKqUDMFypVZUF0Qn71wK/Ik63yGFs9iQzbRzkk+OBM8h+wPQrKBU6JIRrjKpms/H+h8Q8b
-Hz2eBIPdltkdOpQ=
------END CERTIFICATE-----
-
-Microsec e-Szigno Root CA
-=========================
------BEGIN CERTIFICATE-----
-MIIHqDCCBpCgAwIBAgIRAMy4579OKRr9otxmpRwsDxEwDQYJKoZIhvcNAQEFBQAwcjELMAkGA1UE
-BhMCSFUxETAPBgNVBAcTCEJ1ZGFwZXN0MRYwFAYDVQQKEw1NaWNyb3NlYyBMdGQuMRQwEgYDVQQL
-EwtlLVN6aWdubyBDQTEiMCAGA1UEAxMZTWljcm9zZWMgZS1Temlnbm8gUm9vdCBDQTAeFw0wNTA0
-MDYxMjI4NDRaFw0xNzA0MDYxMjI4NDRaMHIxCzAJBgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVz
-dDEWMBQGA1UEChMNTWljcm9zZWMgTHRkLjEUMBIGA1UECxMLZS1Temlnbm8gQ0ExIjAgBgNVBAMT
-GU1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
-AQDtyADVgXvNOABHzNuEwSFpLHSQDCHZU4ftPkNEU6+r+ICbPHiN1I2uuO/TEdyB5s87lozWbxXG
-d36hL+BfkrYn13aaHUM86tnsL+4582pnS4uCzyL4ZVX+LMsvfUh6PXX5qqAnu3jCBspRwn5mS6/N
-oqdNAoI/gqyFxuEPkEeZlApxcpMqyabAvjxWTHOSJ/FrtfX9/DAFYJLG65Z+AZHCabEeHXtTRbjc
-QR/Ji3HWVBTji1R4P770Yjtb9aPs1ZJ04nQw7wHb4dSrmZsqa/i9phyGI0Jf7Enemotb9HI6QMVJ
-PqW+jqpx62z69Rrkav17fVVA71hu5tnVvCSrwe+3AgMBAAGjggQ3MIIEMzBnBggrBgEFBQcBAQRb
-MFkwKAYIKwYBBQUHMAGGHGh0dHBzOi8vcmNhLmUtc3ppZ25vLmh1L29jc3AwLQYIKwYBBQUHMAKG
-IWh0dHA6Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNydDAPBgNVHRMBAf8EBTADAQH/MIIBcwYD
-VR0gBIIBajCCAWYwggFiBgwrBgEEAYGoGAIBAQEwggFQMCgGCCsGAQUFBwIBFhxodHRwOi8vd3d3
-LmUtc3ppZ25vLmh1L1NaU1ovMIIBIgYIKwYBBQUHAgIwggEUHoIBEABBACAAdABhAG4A+gBzAO0A
-dAB2AOEAbgB5ACAA6QByAHQAZQBsAG0AZQB6AOkAcwDpAGgAZQB6ACAA6QBzACAAZQBsAGYAbwBn
-AGEAZADhAHMA4QBoAG8AegAgAGEAIABTAHoAbwBsAGcA4QBsAHQAYQB0APMAIABTAHoAbwBsAGcA
-4QBsAHQAYQB0AOEAcwBpACAAUwB6AGEAYgDhAGwAeQB6AGEAdABhACAAcwB6AGUAcgBpAG4AdAAg
-AGsAZQBsAGwAIABlAGwAagDhAHIAbgBpADoAIABoAHQAdABwADoALwAvAHcAdwB3AC4AZQAtAHMA
-egBpAGcAbgBvAC4AaAB1AC8AUwBaAFMAWgAvMIHIBgNVHR8EgcAwgb0wgbqggbeggbSGIWh0dHA6
-Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNybIaBjmxkYXA6Ly9sZGFwLmUtc3ppZ25vLmh1L0NO
-PU1pY3Jvc2VjJTIwZS1Temlnbm8lMjBSb290JTIwQ0EsT1U9ZS1Temlnbm8lMjBDQSxPPU1pY3Jv
-c2VjJTIwTHRkLixMPUJ1ZGFwZXN0LEM9SFU/Y2VydGlmaWNhdGVSZXZvY2F0aW9uTGlzdDtiaW5h
-cnkwDgYDVR0PAQH/BAQDAgEGMIGWBgNVHREEgY4wgYuBEGluZm9AZS1zemlnbm8uaHWkdzB1MSMw
-IQYDVQQDDBpNaWNyb3NlYyBlLVN6aWduw7MgUm9vdCBDQTEWMBQGA1UECwwNZS1TemlnbsOzIEhT
-WjEWMBQGA1UEChMNTWljcm9zZWMgS2Z0LjERMA8GA1UEBxMIQnVkYXBlc3QxCzAJBgNVBAYTAkhV
-MIGsBgNVHSMEgaQwgaGAFMegSXUWYYTbMUuE0vE3QJDvTtz3oXakdDByMQswCQYDVQQGEwJIVTER
-MA8GA1UEBxMIQnVkYXBlc3QxFjAUBgNVBAoTDU1pY3Jvc2VjIEx0ZC4xFDASBgNVBAsTC2UtU3pp
-Z25vIENBMSIwIAYDVQQDExlNaWNyb3NlYyBlLVN6aWdubyBSb290IENBghEAzLjnv04pGv2i3Gal
-HCwPETAdBgNVHQ4EFgQUx6BJdRZhhNsxS4TS8TdAkO9O3PcwDQYJKoZIhvcNAQEFBQADggEBANMT
-nGZjWS7KXHAM/IO8VbH0jgdsZifOwTsgqRy7RlRw7lrMoHfqaEQn6/Ip3Xep1fvj1KcExJW4C+FE
-aGAHQzAxQmHl7tnlJNUb3+FKG6qfx1/4ehHqE5MAyopYse7tDk2016g2JnzgOsHVV4Lxdbb9iV/a
-86g4nzUGCM4ilb7N1fy+W955a9x6qWVmvrElWl/tftOsRm1M9DKHtCAE4Gx4sHfRhUZLphK3dehK
-yVZs15KrnfVJONJPU+NVkBHbmJbGSfI+9J8b4PeI3CVimUTYc78/MPMMNz7UwiiAc7EBt51alhQB
-S6kRnSlqLtBdgcDPsiBDxwPgN05dCtxZICU=
------END CERTIFICATE-----
-
-Certigna
-========
------BEGIN CERTIFICATE-----
-MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNVBAYTAkZSMRIw
-EAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4XDTA3MDYyOTE1MTMwNVoXDTI3
-MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwI
-Q2VydGlnbmEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7q
-XOEm7RFHYeGifBZ4QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyH
-GxnygQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbwzBfsV1/p
-ogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q130yGLMLLGq/jj8UEYkg
-DncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKf
-Irjxwo1p3Po6WAbfAgMBAAGjgbwwgbkwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQ
-tCRZvgHyUtVF9lo53BEwZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJ
-BgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzjAQ/J
-SP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQUFAAOCAQEA
-hQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8hbV6lUmPOEvjvKtpv6zf+EwLHyzs+
-ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFncfca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1klu
-PBS1xp81HlDQwY9qcEQCYsuuHWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY
-1gkIl2PlwS6wt0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw
-WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg==
------END CERTIFICATE-----
-
-AC Ra\xC3\xADz Certic\xC3\xA1mara S.A.
-======================================
------BEGIN CERTIFICATE-----
-MIIGZjCCBE6gAwIBAgIPB35Sk3vgFeNX8GmMy+wMMA0GCSqGSIb3DQEBBQUAMHsxCzAJBgNVBAYT
-AkNPMUcwRQYDVQQKDD5Tb2NpZWRhZCBDYW1lcmFsIGRlIENlcnRpZmljYWNpw7NuIERpZ2l0YWwg
-LSBDZXJ0aWPDoW1hcmEgUy5BLjEjMCEGA1UEAwwaQUMgUmHDrXogQ2VydGljw6FtYXJhIFMuQS4w
-HhcNMDYxMTI3MjA0NjI5WhcNMzAwNDAyMjE0MjAyWjB7MQswCQYDVQQGEwJDTzFHMEUGA1UECgw+
-U29jaWVkYWQgQ2FtZXJhbCBkZSBDZXJ0aWZpY2FjacOzbiBEaWdpdGFsIC0gQ2VydGljw6FtYXJh
-IFMuQS4xIzAhBgNVBAMMGkFDIFJhw616IENlcnRpY8OhbWFyYSBTLkEuMIICIjANBgkqhkiG9w0B
-AQEFAAOCAg8AMIICCgKCAgEAq2uJo1PMSCMI+8PPUZYILrgIem08kBeGqentLhM0R7LQcNzJPNCN
-yu5LF6vQhbCnIwTLqKL85XXbQMpiiY9QngE9JlsYhBzLfDe3fezTf3MZsGqy2IiKLUV0qPezuMDU
-2s0iiXRNWhU5cxh0T7XrmafBHoi0wpOQY5fzp6cSsgkiBzPZkc0OnB8OIMfuuzONj8LSWKdf/WU3
-4ojC2I+GdV75LaeHM/J4Ny+LvB2GNzmxlPLYvEqcgxhaBvzz1NS6jBUJJfD5to0EfhcSM2tXSExP
-2yYe68yQ54v5aHxwD6Mq0Do43zeX4lvegGHTgNiRg0JaTASJaBE8rF9ogEHMYELODVoqDA+bMMCm
-8Ibbq0nXl21Ii/kDwFJnmxL3wvIumGVC2daa49AZMQyth9VXAnow6IYm+48jilSH5L887uvDdUhf
-HjlvgWJsxS3EF1QZtzeNnDeRyPYL1epjb4OsOMLzP96a++EjYfDIJss2yKHzMI+ko6Kh3VOz3vCa
-Mh+DkXkwwakfU5tTohVTP92dsxA7SH2JD/ztA/X7JWR1DhcZDY8AFmd5ekD8LVkH2ZD6mq093ICK
-5lw1omdMEWux+IBkAC1vImHFrEsm5VoQgpukg3s0956JkSCXjrdCx2bD0Omk1vUgjcTDlaxECp1b
-czwmPS9KvqfJpxAe+59QafMCAwEAAaOB5jCB4zAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE
-AwIBBjAdBgNVHQ4EFgQU0QnQ6dfOeXRU+Tows/RtLAMDG2gwgaAGA1UdIASBmDCBlTCBkgYEVR0g
-ADCBiTArBggrBgEFBQcCARYfaHR0cDovL3d3dy5jZXJ0aWNhbWFyYS5jb20vZHBjLzBaBggrBgEF
-BQcCAjBOGkxMaW1pdGFjaW9uZXMgZGUgZ2FyYW507WFzIGRlIGVzdGUgY2VydGlmaWNhZG8gc2Ug
-cHVlZGVuIGVuY29udHJhciBlbiBsYSBEUEMuMA0GCSqGSIb3DQEBBQUAA4ICAQBclLW4RZFNjmEf
-AygPU3zmpFmps4p6xbD/CHwso3EcIRNnoZUSQDWDg4902zNc8El2CoFS3UnUmjIz75uny3XlesuX
-EpBcunvFm9+7OSPI/5jOCk0iAUgHforA1SBClETvv3eiiWdIG0ADBaGJ7M9i4z0ldma/Jre7Ir5v
-/zlXdLp6yQGVwZVR6Kss+LGGIOk/yzVb0hfpKv6DExdA7ohiZVvVO2Dpezy4ydV/NgIlqmjCMRW3
-MGXrfx1IebHPOeJCgBbT9ZMj/EyXyVo3bHwi2ErN0o42gzmRkBDI8ck1fj+404HGIGQatlDCIaR4
-3NAvO2STdPCWkPHv+wlaNECW8DYSwaN0jJN+Qd53i+yG2dIPPy3RzECiiWZIHiCznCNZc6lEc7wk
-eZBWN7PGKX6jD/EpOe9+XCgycDWs2rjIdWb8m0w5R44bb5tNAlQiM+9hup4phO9OSzNHdpdqy35f
-/RWmnkJDW2ZaiogN9xa5P1FlK2Zqi9E4UqLWRhH6/JocdJ6PlwsCT2TG9WjTSy3/pDceiz+/RL5h
-RqGEPQgnTIEgd4kI6mdAXmwIUV80WoyWaM3X94nCHNMyAK9Sy9NgWyo6R35rMDOhYil/SrnhLecU
-Iw4OGEfhefwVVdCx/CVxY3UzHCMrr1zZ7Ud3YA47Dx7SwNxkBYn8eNZcLCZDqQ==
------END CERTIFICATE-----
-
-TC TrustCenter Class 2 CA II
-============================
------BEGIN CERTIFICATE-----
-MIIEqjCCA5KgAwIBAgIOLmoAAQACH9dSISwRXDswDQYJKoZIhvcNAQEFBQAwdjELMAkGA1UEBhMC
-REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNVBAsTGVRDIFRydXN0Q2VudGVy
-IENsYXNzIDIgQ0ExJTAjBgNVBAMTHFRDIFRydXN0Q2VudGVyIENsYXNzIDIgQ0EgSUkwHhcNMDYw
-MTEyMTQzODQzWhcNMjUxMjMxMjI1OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1
-c3RDZW50ZXIgR21iSDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQTElMCMGA1UE
-AxMcVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
-AQoCggEBAKuAh5uO8MN8h9foJIIRszzdQ2Lu+MNF2ujhoF/RKrLqk2jftMjWQ+nEdVl//OEd+DFw
-IxuInie5e/060smp6RQvkL4DUsFJzfb95AhmC1eKokKguNV/aVyQMrKXDcpK3EY+AlWJU+MaWss2
-xgdW94zPEfRMuzBwBJWl9jmM/XOBCH2JXjIeIqkiRUuwZi4wzJ9l/fzLganx4Duvo4bRierERXlQ
-Xa7pIXSSTYtZgo+U4+lK8edJsBTj9WLL1XK9H7nSn6DNqPoByNkN39r8R52zyFTfSUrxIan+GE7u
-SNQZu+995OKdy1u2bv/jzVrndIIFuoAlOMvkaZ6vQaoahPUCAwEAAaOCATQwggEwMA8GA1UdEwEB
-/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTjq1RMgKHbVkO3kUrL84J6E1wIqzCB
-7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRydXN0Y2VudGVyLmRlL2NybC92Mi90
-Y19jbGFzc18yX2NhX0lJLmNybIaBn2xkYXA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBU
-cnVzdENlbnRlciUyMENsYXNzJTIwMiUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21i
-SCxPVT1yb290Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u
-TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEAjNfffu4bgBCzg/XbEeprS6iSGNn3Bzn1LL4G
-dXpoUxUc6krtXvwjshOg0wn/9vYua0Fxec3ibf2uWWuFHbhOIprtZjluS5TmVfwLG4t3wVMTZonZ
-KNaL80VKY7f9ewthXbhtvsPcW3nS7Yblok2+XnR8au0WOB9/WIFaGusyiC2y8zl3gK9etmF1Kdsj
-TYjKUCjLhdLTEKJZbtOTVAB6okaVhgWcqRmY5TFyDADiZ9lA4CQze28suVyrZZ0srHbqNZn1l7kP
-JOzHdiEoZa5X6AeIdUpWoNIFOqTmjZKILPPy4cHGYdtBxceb9w4aUUXCYWvcZCcXjFq32nQozZfk
-vQ==
------END CERTIFICATE-----
-
-TC TrustCenter Class 3 CA II
-============================
------BEGIN CERTIFICATE-----
-MIIEqjCCA5KgAwIBAgIOSkcAAQAC5aBd1j8AUb8wDQYJKoZIhvcNAQEFBQAwdjELMAkGA1UEBhMC
-REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNVBAsTGVRDIFRydXN0Q2VudGVy
-IENsYXNzIDMgQ0ExJTAjBgNVBAMTHFRDIFRydXN0Q2VudGVyIENsYXNzIDMgQ0EgSUkwHhcNMDYw
-MTEyMTQ0MTU3WhcNMjUxMjMxMjI1OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1
-c3RDZW50ZXIgR21iSDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQTElMCMGA1UE
-AxMcVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
-AQoCggEBALTgu1G7OVyLBMVMeRwjhjEQY0NVJz/GRcekPewJDRoeIMJWHt4bNwcwIi9v8Qbxq63W
-yKthoy9DxLCyLfzDlml7forkzMA5EpBCYMnMNWju2l+QVl/NHE1bWEnrDgFPZPosPIlY2C8u4rBo
-6SI7dYnWRBpl8huXJh0obazovVkdKyT21oQDZogkAHhg8fir/gKya/si+zXmFtGt9i4S5Po1auUZ
-uV3bOx4a+9P/FRQI2AlqukWdFHlgfa9Aigdzs5OW03Q0jTo3Kd5c7PXuLjHCINy+8U9/I1LZW+Jk
-2ZyqBwi1Rb3R0DHBq1SfqdLDYmAD8bs5SpJKPQq5ncWg/jcCAwEAAaOCATQwggEwMA8GA1UdEwEB
-/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTUovyfs8PYA9NXXAek0CSnwPIA1DCB
-7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRydXN0Y2VudGVyLmRlL2NybC92Mi90
-Y19jbGFzc18zX2NhX0lJLmNybIaBn2xkYXA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBU
-cnVzdENlbnRlciUyMENsYXNzJTIwMyUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21i
-SCxPVT1yb290Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u
-TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEANmDkcPcGIEPZIxpC8vijsrlNirTzwppVMXzE
-O2eatN9NDoqTSheLG43KieHPOh6sHfGcMrSOWXaiQYUlN6AT0PV8TtXqluJucsG7Kv5sbviRmEb8
-yRtXW+rIGjs/sFGYPAfaLFkB2otE6OF0/ado3VS6g0bsyEa1+K+XwDsJHI/OcpY9M1ZwvJbL2NV9
-IJqDnxrcOfHFcqMRA/07QlIp2+gB95tejNaNhk4Z+rwcvsUhpYeeeC422wlxo3I0+GzjBgnyXlal
-092Y+tTmBvTwtiBjS+opvaqCZh77gaqnN60TGOaSw4HBM7uIHqHn4rS9MWwOUT1v+5ZWgOI2F9Hc
-5A==
------END CERTIFICATE-----
-
-TC TrustCenter Universal CA I
-=============================
------BEGIN CERTIFICATE-----
-MIID3TCCAsWgAwIBAgIOHaIAAQAC7LdggHiNtgYwDQYJKoZIhvcNAQEFBQAweTELMAkGA1UEBhMC
-REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNVBAsTG1RDIFRydXN0Q2VudGVy
-IFVuaXZlcnNhbCBDQTEmMCQGA1UEAxMdVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBIEkwHhcN
-MDYwMzIyMTU1NDI4WhcNMjUxMjMxMjI1OTU5WjB5MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMg
-VHJ1c3RDZW50ZXIgR21iSDEkMCIGA1UECxMbVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBMSYw
-JAYDVQQDEx1UQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0EgSTCCASIwDQYJKoZIhvcNAQEBBQAD
-ggEPADCCAQoCggEBAKR3I5ZEr5D0MacQ9CaHnPM42Q9e3s9B6DGtxnSRJJZ4Hgmgm5qVSkr1YnwC
-qMqs+1oEdjneX/H5s7/zA1hV0qq34wQi0fiU2iIIAI3TfCZdzHd55yx4Oagmcw6iXSVphU9VDprv
-xrlE4Vc93x9UIuVvZaozhDrzznq+VZeujRIPFDPiUHDDSYcTvFHe15gSWu86gzOSBnWLknwSaHtw
-ag+1m7Z3W0hZneTvWq3zwZ7U10VOylY0Ibw+F1tvdwxIAUMpsN0/lm7mlaoMwCC2/T42J5zjXM9O
-gdwZu5GQfezmlwQek8wiSdeXhrYTCjxDI3d+8NzmzSQfO4ObNDqDNOMCAwEAAaNjMGEwHwYDVR0j
-BBgwFoAUkqR1LKSevoFE63n8isWVpesQdXMwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
-AYYwHQYDVR0OBBYEFJKkdSyknr6BROt5/IrFlaXrEHVzMA0GCSqGSIb3DQEBBQUAA4IBAQAo0uCG
-1eb4e/CX3CJrO5UUVg8RMKWaTzqwOuAGy2X17caXJ/4l8lfmXpWMPmRgFVp/Lw0BxbFg/UU1z/Cy
-vwbZ71q+s2IhtNerNXxTPqYn8aEt2hojnczd7Dwtnic0XQ/CNnm8yUpiLe1r2X1BQ3y2qsrtYbE3
-ghUJGooWMNjsydZHcnhLEEYUjl8Or+zHL6sQ17bxbuyGssLoDZJz3KL0Dzq/YSMQiZxIQG5wALPT
-ujdEWBF6AmqI8Dc08BnprNRlc/ZpjGSUOnmFKbAWKwyCPwacx/0QK54PLLae4xW/2TYcuiUaUj0a
-7CIMHOCkoj3w6DnPgcB77V0fb8XQC9eY
------END CERTIFICATE-----
-
-Deutsche Telekom Root CA 2
-==========================
------BEGIN CERTIFICATE-----
-MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMT
-RGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEG
-A1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENBIDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5
-MjM1OTAwWjBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0G
-A1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBS
-b290IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEUha88EOQ5
-bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhCQN/Po7qCWWqSG6wcmtoI
-KyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1MjwrrFDa1sPeg5TKqAyZMg4ISFZbavva4VhY
-AUlfckE8FQYBjl2tqriTtM2e66foai1SNNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aK
-Se5TBY8ZTNXeWHmb0mocQqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTV
-jlsB9WoHtxa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAPBgNV
-HRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAlGRZrTlk5ynr
-E/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756AbrsptJh6sTtU6zkXR34ajgv8HzFZMQSy
-zhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpaIzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8
-rZ7/gFnkm0W09juwzTkZmDLl6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4G
-dyd1Lx+4ivn+xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU
-Cm26OWMohpLzGITY+9HPBVZkVw==
------END CERTIFICATE-----
-
-ComSign CA
-==========
------BEGIN CERTIFICATE-----
-MIIDkzCCAnugAwIBAgIQFBOWgxRVjOp7Y+X8NId3RDANBgkqhkiG9w0BAQUFADA0MRMwEQYDVQQD
-EwpDb21TaWduIENBMRAwDgYDVQQKEwdDb21TaWduMQswCQYDVQQGEwJJTDAeFw0wNDAzMjQxMTMy
-MThaFw0yOTAzMTkxNTAyMThaMDQxEzARBgNVBAMTCkNvbVNpZ24gQ0ExEDAOBgNVBAoTB0NvbVNp
-Z24xCzAJBgNVBAYTAklMMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8ORUaSvTx49q
-ROR+WCf4C9DklBKK8Rs4OC8fMZwG1Cyn3gsqrhqg455qv588x26i+YtkbDqthVVRVKU4VbirgwTy
-P2Q298CNQ0NqZtH3FyrV7zb6MBBC11PN+fozc0yz6YQgitZBJzXkOPqUm7h65HkfM/sb2CEJKHxN
-GGleZIp6GZPKfuzzcuc3B1hZKKxC+cX/zT/npfo4sdAMx9lSGlPWgcxCejVb7Us6eva1jsz/D3zk
-YDaHL63woSV9/9JLEYhwVKZBqGdTUkJe5DSe5L6j7KpiXd3DTKaCQeQzC6zJMw9kglcq/QytNuEM
-rkvF7zuZ2SOzW120V+x0cAwqTwIDAQABo4GgMIGdMAwGA1UdEwQFMAMBAf8wPQYDVR0fBDYwNDAy
-oDCgLoYsaHR0cDovL2ZlZGlyLmNvbXNpZ24uY28uaWwvY3JsL0NvbVNpZ25DQS5jcmwwDgYDVR0P
-AQH/BAQDAgGGMB8GA1UdIwQYMBaAFEsBmz5WGmU2dst7l6qSBe4y5ygxMB0GA1UdDgQWBBRLAZs+
-VhplNnbLe5eqkgXuMucoMTANBgkqhkiG9w0BAQUFAAOCAQEA0Nmlfv4pYEWdfoPPbrxHbvUanlR2
-QnG0PFg/LUAlQvaBnPGJEMgOqnhPOAlXsDzACPw1jvFIUY0McXS6hMTXcpuEfDhOZAYnKuGntewI
-mbQKDdSFc8gS4TXt8QUxHXOZDOuWyt3T5oWq8Ir7dcHyCTxlZWTzTNity4hp8+SDtwy9F1qWF8pb
-/627HOkthIDYIb6FUtnUdLlphbpN7Sgy6/lhSuTENh4Z3G+EER+V9YMoGKgzkkMn3V0TBEVPh9VG
-zT2ouvDzuFYkRes3x+F2T3I5GN9+dHLHcy056mDmrRGiVod7w2ia/viMcKjfZTL0pECMocJEAw6U
-AGegcQCCSA==
------END CERTIFICATE-----
-
-ComSign Secured CA
-==================
------BEGIN CERTIFICATE-----
-MIIDqzCCApOgAwIBAgIRAMcoRwmzuGxFjB36JPU2TukwDQYJKoZIhvcNAQEFBQAwPDEbMBkGA1UE
-AxMSQ29tU2lnbiBTZWN1cmVkIENBMRAwDgYDVQQKEwdDb21TaWduMQswCQYDVQQGEwJJTDAeFw0w
-NDAzMjQxMTM3MjBaFw0yOTAzMTYxNTA0NTZaMDwxGzAZBgNVBAMTEkNvbVNpZ24gU2VjdXJlZCBD
-QTEQMA4GA1UEChMHQ29tU2lnbjELMAkGA1UEBhMCSUwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
-ggEKAoIBAQDGtWhfHZQVw6QIVS3joFd67+l0Kru5fFdJGhFeTymHDEjWaueP1H5XJLkGieQcPOqs
-49ohgHMhCu95mGwfCP+hUH3ymBvJVG8+pSjsIQQPRbsHPaHA+iqYHU4Gk/v1iDurX8sWv+bznkqH
-7Rnqwp9D5PGBpX8QTz7RSmKtUxvLg/8HZaWSLWapW7ha9B20IZFKF3ueMv5WJDmyVIRD9YTC2LxB
-kMyd1mja6YJQqTtoz7VdApRgFrFD2UNd3V2Hbuq7s8lr9gOUCXDeFhF6K+h2j0kQmHe5Y1yLM5d1
-9guMsqtb3nQgJT/j8xH5h2iGNXHDHYwt6+UarA9z1YJZQIDTAgMBAAGjgacwgaQwDAYDVR0TBAUw
-AwEB/zBEBgNVHR8EPTA7MDmgN6A1hjNodHRwOi8vZmVkaXIuY29tc2lnbi5jby5pbC9jcmwvQ29t
-U2lnblNlY3VyZWRDQS5jcmwwDgYDVR0PAQH/BAQDAgGGMB8GA1UdIwQYMBaAFMFL7XC29z58ADsA
-j8c+DkWfHl3sMB0GA1UdDgQWBBTBS+1wtvc+fAA7AI/HPg5Fnx5d7DANBgkqhkiG9w0BAQUFAAOC
-AQEAFs/ukhNQq3sUnjO2QiBq1BW9Cav8cujvR3qQrFHBZE7piL1DRYHjZiM/EoZNGeQFsOY3wo3a
-BijJD4mkU6l1P7CW+6tMM1X5eCZGbxs2mPtCdsGCuY7e+0X5YxtiOzkGynd6qDwJz2w2PQ8KRUtp
-FhpFfTMDZflScZAmlaxMDPWLkz/MdXSFmLr/YnpNH4n+rr2UAJm/EaXc4HnFFgt9AmEd6oX5AhVP
-51qJThRv4zdLhfXBPGHg/QVBspJ/wx2g0K5SZGBrGMYmnNj1ZOQ2GmKfig8+/21OGVZOIJFsnzQz
-OjRXUDpvgV4GxvU+fE6OK85lBi5d0ipTdF7Tbieejw==
------END CERTIFICATE-----
-
-Cybertrust Global Root
-======================
------BEGIN CERTIFICATE-----
-MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYGA1UEChMPQ3li
-ZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBSb290MB4XDTA2MTIxNTA4
-MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQD
-ExZDeWJlcnRydXN0IEdsb2JhbCBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
-+Mi8vRRQZhP/8NN57CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW
-0ozSJ8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2yHLtgwEZL
-AfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iPt3sMpTjr3kfb1V05/Iin
-89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNzFtApD0mpSPCzqrdsxacwOUBdrsTiXSZT
-8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAYXSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAP
-BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2
-MDSgMqAwhi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3JsMB8G
-A1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUAA4IBAQBW7wojoFRO
-lZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMjWqd8BfP9IjsO0QbE2zZMcwSO5bAi
-5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUxXOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2
-hO0j9n0Hq0V+09+zv+mKts2oomcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+T
-X3EJIrduPuocA06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW
-WL1WMRJOEcgh4LMRkWXbtKaIOM5V
------END CERTIFICATE-----
-
-ePKI Root Certification Authority
-=================================
------BEGIN CERTIFICATE-----
-MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBeMQswCQYDVQQG
-EwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0ZC4xKjAoBgNVBAsMIWVQS0kg
-Um9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMx
-MjdaMF4xCzAJBgNVBAYTAlRXMSMwIQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEq
-MCgGA1UECwwhZVBLSSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0B
-AQEFAAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAHSyZbCUNs
-IZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAhijHyl3SJCRImHJ7K2RKi
-lTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3XDZoTM1PRYfl61dd4s5oz9wCGzh1NlDiv
-qOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX
-12ruOzjjK9SXDrkb5wdJfzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0O
-WQqraffAsgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uUWH1+
-ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLSnT0IFaUQAS2zMnao
-lQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pHdmX2Os+PYhcZewoozRrSgx4hxyy/
-vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJipNiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXi
-Zo1jDiVN1Rmy5nk3pyKdVDECAwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/Qkqi
-MAwGA1UdEwQFMAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH
-ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGBuvl2ICO1J2B0
-1GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6YlPwZpVnPDimZI+ymBV3QGypzq
-KOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkPJXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdV
-xrsStZf0X4OFunHB2WyBEXYKCrC/gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEP
-NXubrjlpC2JgQCA2j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+r
-GNm65ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUBo2M3IUxE
-xJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS/jQ6fbjpKdx2qcgw+BRx
-gMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2zGp1iro2C6pSe3VkQw63d4k3jMdXH7Ojy
-sP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTEW9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmOD
-BCEIZ43ygknQW/2xzQ+DhNQ+IIX3Sj0rnP0qCglN6oH4EZw=
------END CERTIFICATE-----
-
-T\xc3\x9c\x42\xC4\xB0TAK UEKAE K\xC3\xB6k Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1 - S\xC3\xBCr\xC3\xBCm 3
-=============================================================================================================================
------BEGIN CERTIFICATE-----
-MIIFFzCCA/+gAwIBAgIBETANBgkqhkiG9w0BAQUFADCCASsxCzAJBgNVBAYTAlRSMRgwFgYDVQQH
-DA9HZWJ6ZSAtIEtvY2FlbGkxRzBFBgNVBAoMPlTDvHJraXllIEJpbGltc2VsIHZlIFRla25vbG9q
-aWsgQXJhxZ90xLFybWEgS3VydW11IC0gVMOcQsSwVEFLMUgwRgYDVQQLDD9VbHVzYWwgRWxla3Ry
-b25payB2ZSBLcmlwdG9sb2ppIEFyYcWfdMSxcm1hIEVuc3RpdMO8c8O8IC0gVUVLQUUxIzAhBgNV
-BAsMGkthbXUgU2VydGlmaWthc3lvbiBNZXJrZXppMUowSAYDVQQDDEFUw5xCxLBUQUsgVUVLQUUg
-S8O2ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSAtIFPDvHLDvG0gMzAeFw0wNzA4
-MjQxMTM3MDdaFw0xNzA4MjExMTM3MDdaMIIBKzELMAkGA1UEBhMCVFIxGDAWBgNVBAcMD0dlYnpl
-IC0gS29jYWVsaTFHMEUGA1UECgw+VMO8cmtpeWUgQmlsaW1zZWwgdmUgVGVrbm9sb2ppayBBcmHF
-n3TEsXJtYSBLdXJ1bXUgLSBUw5xCxLBUQUsxSDBGBgNVBAsMP1VsdXNhbCBFbGVrdHJvbmlrIHZl
-IEtyaXB0b2xvamkgQXJhxZ90xLFybWEgRW5zdGl0w7xzw7wgLSBVRUtBRTEjMCEGA1UECwwaS2Ft
-dSBTZXJ0aWZpa2FzeW9uIE1lcmtlemkxSjBIBgNVBAMMQVTDnELEsFRBSyBVRUtBRSBLw7ZrIFNl
-cnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIC0gU8O8csO8bSAzMIIBIjANBgkqhkiG9w0B
-AQEFAAOCAQ8AMIIBCgKCAQEAim1L/xCIOsP2fpTo6iBkcK4hgb46ezzb8R1Sf1n68yJMlaCQvEhO
-Eav7t7WNeoMojCZG2E6VQIdhn8WebYGHV2yKO7Rm6sxA/OOqbLLLAdsyv9Lrhc+hDVXDWzhXcLh1
-xnnRFDDtG1hba+818qEhTsXOfJlfbLm4IpNQp81McGq+agV/E5wrHur+R84EpW+sky58K5+eeROR
-6Oqeyjh1jmKwlZMq5d/pXpduIF9fhHpEORlAHLpVK/swsoHvhOPc7Jg4OQOFCKlUAwUp8MmPi+oL
-hmUZEdPpCSPeaJMDyTYcIW7OjGbxmTDY17PDHfiBLqi9ggtm/oLL4eAagsNAgQIDAQABo0IwQDAd
-BgNVHQ4EFgQUvYiHyY/2pAoLquvF/pEjnatKijIwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF
-MAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAB18+kmPNOm3JpIWmgV050vQbTlswyb2zrgxvMTfvCr4
-N5EY3ATIZJkrGG2AA1nJrvhY0D7twyOfaTyGOBye79oneNGEN3GKPEs5z35FBtYt2IpNeBLWrcLT
-y9LQQfMmNkqblWwM7uXRQydmwYj3erMgbOqwaSvHIOgMA8RBBZniP+Rr+KCGgceExh/VS4ESshYh
-LBOhgLJeDEoTniDYYkCrkOpkSi+sDQESeUWoL4cZaMjihccwsnX5OD+ywJO0a+IDRM5noN+J1q2M
-dqMTw5RhK2vZbMEHCiIHhWyFJEapvj+LeISCfiQMnf2BN+MlqO02TpUsyZyQ2uypQjyttgI=
------END CERTIFICATE-----
-
-Buypass Class 2 CA 1
-====================
------BEGIN CERTIFICATE-----
-MIIDUzCCAjugAwIBAgIBATANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU
-QnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3MgQ2xhc3MgMiBDQSAxMB4XDTA2
-MTAxMzEwMjUwOVoXDTE2MTAxMzEwMjUwOVowSzELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBh
-c3MgQVMtOTgzMTYzMzI3MR0wGwYDVQQDDBRCdXlwYXNzIENsYXNzIDIgQ0EgMTCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBAIs8B0XY9t/mx8q6jUPFR42wWsE425KEHK8T1A9vNkYgxC7M
-cXA0ojTTNy7Y3Tp3L8DrKehc0rWpkTSHIln+zNvnma+WwajHQN2lFYxuyHyXA8vmIPLXl18xoS83
-0r7uvqmtqEyeIWZDO6i88wmjONVZJMHCR3axiFyCO7srpgTXjAePzdVBHfCuuCkslFJgNJQ72uA4
-0Z0zPhX0kzLFANq1KWYOOngPIVJfAuWSeyXTkh4vFZ2B5J2O6O+JzhRMVB0cgRJNcKi+EAUXfh/R
-uFdV7c27UsKwHnjCTTZoy1YmwVLBvXb3WNVyfh9EdrsAiR0WnVE1703CVu9r4Iw7DekCAwEAAaNC
-MEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUP42aWYv8e3uco684sDntkHGA1sgwDgYDVR0P
-AQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQAVGn4TirnoB6NLJzKyQJHyIdFkhb5jatLPgcIV
-1Xp+DCmsNx4cfHZSldq1fyOhKXdlyTKdqC5Wq2B2zha0jX94wNWZUYN/Xtm+DKhQ7SLHrQVMdvvt
-7h5HZPb3J31cKA9FxVxiXqaakZG3Uxcu3K1gnZZkOb1naLKuBctN518fV4bVIJwo+28TOPX2EZL2
-fZleHwzoq0QkKXJAPTZSr4xYkHPB7GEseaHsh7U/2k3ZIQAw3pDaDtMaSKk+hQsUi4y8QZ5q9w5w
-wDX3OaJdZtB7WZ+oRxKaJyOkLY4ng5IgodcVf/EuGO70SH8vf/GhGLWhC5SgYiAynB321O+/TIho
------END CERTIFICATE-----
-
-Buypass Class 3 CA 1
-====================
------BEGIN CERTIFICATE-----
-MIIDUzCCAjugAwIBAgIBAjANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU
-QnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3MgQ2xhc3MgMyBDQSAxMB4XDTA1
-MDUwOTE0MTMwM1oXDTE1MDUwOTE0MTMwM1owSzELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBh
-c3MgQVMtOTgzMTYzMzI3MR0wGwYDVQQDDBRCdXlwYXNzIENsYXNzIDMgQ0EgMTCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBAKSO13TZKWTeXx+HgJHqTjnmGcZEC4DVC69TB4sSveZn8AKx
-ifZgisRbsELRwCGoy+Gb72RRtqfPFfV0gGgEkKBYouZ0plNTVUhjP5JW3SROjvi6K//zNIqeKNc0
-n6wv1g/xpC+9UrJJhW05NfBEMJNGJPO251P7vGGvqaMU+8IXF4Rs4HyI+MkcVyzwPX6UvCWThOia
-AJpFBUJXgPROztmuOfbIUxAMZTpHe2DC1vqRycZxbL2RhzyRhkmr8w+gbCZ2Xhysm3HljbybIR6c
-1jh+JIAVMYKWsUnTYjdbiAwKYjT+p0h+mbEwi5A3lRyoH6UsjfRVyNvdWQrCrXig9IsCAwEAAaNC
-MEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUOBTmyPCppAP0Tj4io1vy1uCtQHQwDgYDVR0P
-AQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQABZ6OMySU9E2NdFm/soT4JXJEVKirZgCFPBdy7
-pYmrEzMqnji3jG8CcmPHc3ceCQa6Oyh7pEfJYWsICCD8igWKH7y6xsL+z27sEzNxZy5p+qksP2bA
-EllNC1QCkoS72xLvg3BweMhT+t/Gxv/ciC8HwEmdMldg0/L2mSlf56oBzKwzqBwKu5HEA6BvtjT5
-htOzdlSY9EqBs1OdTUDs5XcTRa9bqh/YL0yCe/4qxFi7T/ye/QNlGioOw6UgFpRreaaiErS7GqQj
-el/wroQk5PMr+4okoyeYZdowdXb8GZHo2+ubPzK/QJcHJrrM85SFSnonk8+QQtS4Wxam58tAA915
------END CERTIFICATE-----
-
-EBG Elektronik Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1
-==========================================================================
------BEGIN CERTIFICATE-----
-MIIF5zCCA8+gAwIBAgIITK9zQhyOdAIwDQYJKoZIhvcNAQEFBQAwgYAxODA2BgNVBAMML0VCRyBF
-bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMTcwNQYDVQQKDC5FQkcg
-QmlsacWfaW0gVGVrbm9sb2ppbGVyaSB2ZSBIaXptZXRsZXJpIEEuxZ4uMQswCQYDVQQGEwJUUjAe
-Fw0wNjA4MTcwMDIxMDlaFw0xNjA4MTQwMDMxMDlaMIGAMTgwNgYDVQQDDC9FQkcgRWxla3Ryb25p
-ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTE3MDUGA1UECgwuRUJHIEJpbGnFn2lt
-IFRla25vbG9qaWxlcmkgdmUgSGl6bWV0bGVyaSBBLsWeLjELMAkGA1UEBhMCVFIwggIiMA0GCSqG
-SIb3DQEBAQUAA4ICDwAwggIKAoICAQDuoIRh0DpqZhAy2DE4f6en5f2h4fuXd7hxlugTlkaDT7by
-X3JWbhNgpQGR4lvFzVcfd2NR/y8927k/qqk153nQ9dAktiHq6yOU/im/+4mRDGSaBUorzAzu8T2b
-gmmkTPiab+ci2hC6X5L8GCcKqKpE+i4stPtGmggDg3KriORqcsnlZR9uKg+ds+g75AxuetpX/dfr
-eYteIAbTdgtsApWjluTLdlHRKJ2hGvxEok3MenaoDT2/F08iiFD9rrbskFBKW5+VQarKD7JK/oCZ
-TqNGFav4c0JqwmZ2sQomFd2TkuzbqV9UIlKRcF0T6kjsbgNs2d1s/OsNA/+mgxKb8amTD8UmTDGy
-Y5lhcucqZJnSuOl14nypqZoaqsNW2xCaPINStnuWt6yHd6i58mcLlEOzrz5z+kI2sSXFCjEmN1Zn
-uqMLfdb3ic1nobc6HmZP9qBVFCVMLDMNpkGMvQQxahByCp0OLna9XvNRiYuoP1Vzv9s6xiQFlpJI
-qkuNKgPlV5EQ9GooFW5Hd4RcUXSfGenmHmMWOeMRFeNYGkS9y8RsZteEBt8w9DeiQyJ50hBs37vm
-ExH8nYQKE3vwO9D8owrXieqWfo1IhR5kX9tUoqzVegJ5a9KK8GfaZXINFHDk6Y54jzJ0fFfy1tb0
-Nokb+Clsi7n2l9GkLqq+CxnCRelwXQIDAJ3Zo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB
-/wQEAwIBBjAdBgNVHQ4EFgQU587GT/wWZ5b6SqMHwQSny2re2kcwHwYDVR0jBBgwFoAU587GT/wW
-Z5b6SqMHwQSny2re2kcwDQYJKoZIhvcNAQEFBQADggIBAJuYml2+8ygjdsZs93/mQJ7ANtyVDR2t
-FcU22NU57/IeIl6zgrRdu0waypIN30ckHrMk2pGI6YNw3ZPX6bqz3xZaPt7gyPvT/Wwp+BVGoGgm
-zJNSroIBk5DKd8pNSe/iWtkqvTDOTLKBtjDOWU/aWR1qeqRFsIImgYZ29fUQALjuswnoT4cCB64k
-XPBfrAowzIpAoHMEwfuJJPaaHFy3PApnNgUIMbOv2AFoKuB4j3TeuFGkjGwgPaL7s9QJ/XvCgKqT
-bCmYIai7FvOpEl90tYeY8pUm3zTvilORiF0alKM/fCL414i6poyWqD1SNGKfAB5UVUJnxk1Gj7sU
-RT0KlhaOEKGXmdXTMIXM3rRyt7yKPBgpaP3ccQfuJDlq+u2lrDgv+R4QDgZxGhBM/nV+/x5XOULK
-1+EVoVZVWRvRo68R2E7DpSvvkL/A7IITW43WciyTTo9qKd+FPNMN4KIYEsxVL0e3p5sC/kH2iExt
-2qkBR4NkJ2IQgtYSe14DHzSpyZH+r11thie3I6p1GMog57AP14kOpmciY/SDQSsGS7tY1dHXt7kQ
-Y9iJSrSq3RZj9W6+YKH47ejWkE8axsWgKdOnIaj1Wjz3x0miIZpKlVIglnKaZsv30oZDfCK+lvm9
-AahH3eU7QPl1K5srRmSGjR70j/sHd9DqSaIcjVIUpgqT
------END CERTIFICATE-----
-
-certSIGN ROOT CA
-================
------BEGIN CERTIFICATE-----
-MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYTAlJPMREwDwYD
-VQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTAeFw0wNjA3MDQxNzIwMDRa
-Fw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UE
-CxMQY2VydFNJR04gUk9PVCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7I
-JUqOtdu0KBuqV5Do0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHH
-rfAQUySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5dRdY4zTW2
-ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQOA7+j0xbm0bqQfWwCHTD
-0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwvJoIQ4uNllAoEwF73XVv4EOLQunpL+943
-AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8B
-Af8EBAMCAcYwHQYDVR0OBBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IB
-AQA+0hyJLjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecYMnQ8
-SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ44gx+FkagQnIl6Z0
-x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6IJd1hJyMctTEHBDa0GpC9oHRxUIlt
-vBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNwi/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7Nz
-TogVZ96edhBiIL5VaZVDADlN9u6wWk5JRFRYX0KD
------END CERTIFICATE-----
-
-CNNIC ROOT
-==========
------BEGIN CERTIFICATE-----
-MIIDVTCCAj2gAwIBAgIESTMAATANBgkqhkiG9w0BAQUFADAyMQswCQYDVQQGEwJDTjEOMAwGA1UE
-ChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwHhcNMDcwNDE2MDcwOTE0WhcNMjcwNDE2MDcw
-OTE0WjAyMQswCQYDVQQGEwJDTjEOMAwGA1UEChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1Qw
-ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDTNfc/c3et6FtzF8LRb+1VvG7q6KR5smzD
-o+/hn7E7SIX1mlwhIhAsxYLO2uOabjfhhyzcuQxauohV3/2q2x8x6gHx3zkBwRP9SFIhxFXf2tiz
-VHa6dLG3fdfA6PZZxU3Iva0fFNrfWEQlMhkqx35+jq44sDB7R3IJMfAw28Mbdim7aXZOV/kbZKKT
-VrdvmW7bCgScEeOAH8tjlBAKqeFkgjH5jCftppkA9nCTGPihNIaj3XrCGHn2emU1z5DrvTOTn1Or
-czvmmzQgLx3vqR1jGqCA2wMv+SYahtKNu6m+UjqHZ0gNv7Sg2Ca+I19zN38m5pIEo3/PIKe38zrK
-y5nLAgMBAAGjczBxMBEGCWCGSAGG+EIBAQQEAwIABzAfBgNVHSMEGDAWgBRl8jGtKvf33VKWCscC
-wQ7vptU7ETAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIB/jAdBgNVHQ4EFgQUZfIxrSr3991S
-lgrHAsEO76bVOxEwDQYJKoZIhvcNAQEFBQADggEBAEs17szkrr/Dbq2flTtLP1se31cpolnKOOK5
-Gv+e5m4y3R6u6jW39ZORTtpC4cMXYFDy0VwmuYK36m3knITnA3kXr5g9lNvHugDnuL8BV8F3RTIM
-O/G0HAiw/VGgod2aHRM2mm23xzy54cXZF/qD1T0VoDy7HgviyJA/qIYM/PmLXoXLT1tLYhFHxUV8
-BS9BsZ4QaRuZluBVeftOhpm4lNqGOGqTo+fLbuXf6iFViZx9fX+Y9QCJ7uOEwFyWtcVG6kbghVW2
-G8kS1sHNzYDzAgE8yGnLRUhj2JTQ7IUOO04RZfSCjKY9ri4ilAnIXOo8gV0WKgOXFlUJ24pBgp5m
-mxE=
------END CERTIFICATE-----
-
-ApplicationCA - Japanese Government
-===================================
------BEGIN CERTIFICATE-----
-MIIDoDCCAoigAwIBAgIBMTANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJKUDEcMBoGA1UEChMT
-SmFwYW5lc2UgR292ZXJubWVudDEWMBQGA1UECxMNQXBwbGljYXRpb25DQTAeFw0wNzEyMTIxNTAw
-MDBaFw0xNzEyMTIxNTAwMDBaMEMxCzAJBgNVBAYTAkpQMRwwGgYDVQQKExNKYXBhbmVzZSBHb3Zl
-cm5tZW50MRYwFAYDVQQLEw1BcHBsaWNhdGlvbkNBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
-CgKCAQEAp23gdE6Hj6UG3mii24aZS2QNcfAKBZuOquHMLtJqO8F6tJdhjYq+xpqcBrSGUeQ3DnR4
-fl+Kf5Sk10cI/VBaVuRorChzoHvpfxiSQE8tnfWuREhzNgaeZCw7NCPbXCbkcXmP1G55IrmTwcrN
-wVbtiGrXoDkhBFcsovW8R0FPXjQilbUfKW1eSvNNcr5BViCH/OlQR9cwFO5cjFW6WY2H/CPek9AE
-jP3vbb3QesmlOmpyM8ZKDQUXKi17safY1vC+9D/qDihtQWEjdnjDuGWk81quzMKq2edY3rZ+nYVu
-nyoKb58DKTCXKB28t89UKU5RMfkntigm/qJj5kEW8DOYRwIDAQABo4GeMIGbMB0GA1UdDgQWBBRU
-WssmP3HMlEYNllPqa0jQk/5CdTAOBgNVHQ8BAf8EBAMCAQYwWQYDVR0RBFIwUKROMEwxCzAJBgNV
-BAYTAkpQMRgwFgYDVQQKDA/ml6XmnKzlm73mlL/lupwxIzAhBgNVBAsMGuOCouODl+ODquOCseOD
-vOOCt+ODp+ODs0NBMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADlqRHZ3ODrs
-o2dGD/mLBqj7apAxzn7s2tGJfHrrLgy9mTLnsCTWw//1sogJhyzjVOGjprIIC8CFqMjSnHH2HZ9g
-/DgzE+Ge3Atf2hZQKXsvcJEPmbo0NI2VdMV+eKlmXb3KIXdCEKxmJj3ekav9FfBv7WxfEPjzFvYD
-io+nEhEMy/0/ecGc/WLuo89UDNErXxc+4z6/wCs+CZv+iKZ+tJIX/COUgb1up8WMwusRRdv4QcmW
-dupwX3kSa+SjB1oF7ydJzyGfikwJcGapJsErEU4z0g781mzSDjJkaP+tBXhfAx2o45CsJOAPQKdL
-rosot4LKGAfmt1t06SAZf7IbiVQ=
------END CERTIFICATE-----
-
-GeoTrust Primary Certification Authority - G3
-=============================================
------BEGIN CERTIFICATE-----
-MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UE
-BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA4IEdlb1RydXN0
-IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFy
-eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIz
-NTk1OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAo
-YykgMjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMT
-LUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz+uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5j
-K/BGvESyiaHAKAxJcCGVn2TAppMSAmUmhsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdE
-c5IiaacDiGydY8hS2pgn5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3C
-IShwiP/WJmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exALDmKu
-dlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZChuOl1UcCAwEAAaNC
-MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMR5yo6hTgMdHNxr
-2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IBAQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9
-cr5HqQ6XErhK8WTTOd8lNNTBzU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbE
-Ap7aDHdlDkQNkv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD
-AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUHSJsMC8tJP33s
-t/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2Gspki4cErx5z481+oghLrGREt
------END CERTIFICATE-----
-
-thawte Primary Root CA - G2
-===========================
------BEGIN CERTIFICATE-----
-MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDELMAkGA1UEBhMC
-VVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMpIDIwMDcgdGhhd3RlLCBJbmMu
-IC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3Qg
-Q0EgLSBHMjAeFw0wNzExMDUwMDAwMDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEV
-MBMGA1UEChMMdGhhd3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBG
-b3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAt
-IEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/BebfowJPDQfGAFG6DAJS
-LSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6papu+7qzcMBniKI11KOasf2twu8x+qi5
-8/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU
-mtgAMADna3+FGO6Lts6KDPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUN
-G4k8VIZ3KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41oxXZ3K
-rr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg==
------END CERTIFICATE-----
-
-thawte Primary Root CA - G3
-===========================
------BEGIN CERTIFICATE-----
-MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCBrjELMAkGA1UE
-BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2
-aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv
-cml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0w
-ODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh
-d3RlLCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9uMTgwNgYD
-VQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIG
-A1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
-MIIBCgKCAQEAsr8nLPvb2FvdeHsbnndmgcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2At
-P0LMqmsywCPLLEHd5N/8YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC
-+BsUa0Lfb1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS99irY
-7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2SzhkGcuYMXDhpxwTW
-vGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUkOQIDAQABo0IwQDAPBgNVHRMBAf8E
-BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJ
-KoZIhvcNAQELBQADggEBABpA2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweK
-A3rD6z8KLFIWoCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu
-t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7cKUGRIjxpp7sC
-8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fMm7v/OeZWYdMKp8RcTGB7BXcm
-er/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZuMdRAGmI0Nj81Aa6sY6A=
------END CERTIFICATE-----
-
-GeoTrust Primary Certification Authority - G2
-=============================================
------BEGIN CERTIFICATE-----
-MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDELMAkGA1UEBhMC
-VVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA3IEdlb1RydXN0IElu
-Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBD
-ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1
-OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg
-MjAwNyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMTLUdl
-b1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjB2MBAGByqGSM49AgEG
-BSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcLSo17VDs6bl8VAsBQps8lL33KSLjHUGMc
-KiEIfJo22Av+0SbFWDEwKCXzXV2juLaltJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYD
-VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+
-EVXVMAoGCCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGTqQ7m
-ndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBuczrD6ogRLQy7rQkgu2
-npaqBA+K
------END CERTIFICATE-----
-
-VeriSign Universal Root Certification Authority
-===============================================
------BEGIN CERTIFICATE-----
-MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCBvTELMAkGA1UE
-BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO
-ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk
-IHVzZSBvbmx5MTgwNgYDVQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9u
-IEF1dGhvcml0eTAeFw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJV
-UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
-cmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
-IG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNhbCBSb290IENlcnRpZmljYXRpb24gQXV0
-aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj
-1mCOkdeQmIN65lgZOIzF9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGP
-MiJhgsWHH26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+HLL72
-9fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN/BMReYTtXlT2NJ8I
-AfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPTrJ9VAMf2CGqUuV/c4DPxhGD5WycR
-tPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0G
-CCsGAQUFBwEMBGEwX6FdoFswWTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2O
-a8PPgGrUSBgsexkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud
-DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4sAPmLGd75JR3
-Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+seQxIcaBlVZaDrHC1LGmWazx
-Y8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTx
-P/jgdFcrGJ2BtMQo2pSXpXDrrB2+BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+P
-wGZsY6rp2aQW9IHRlRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4
-mJO37M2CYfE45k+XmCpajQ==
------END CERTIFICATE-----
-
-VeriSign Class 3 Public Primary Certification Authority - G4
-============================================================
------BEGIN CERTIFICATE-----
-MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjELMAkGA1UEBhMC
-VVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3
-b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVz
-ZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmlj
-YXRpb24gQXV0aG9yaXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjEL
-MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBU
-cnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRo
-b3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5
-IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8
-Utpkmw4tXNherJI9/gHmGUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGz
-rl0Bp3vefLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUwAwEB
-/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEw
-HzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVyaXNpZ24u
-Y29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMWkf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMD
-A2gAMGUCMGYhDBgmYFo4e1ZC4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIx
-AJw9SDkjOVgaFRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA==
------END CERTIFICATE-----
-
-NetLock Arany (Class Gold) FÅ‘tanúsÃtvány
-============================================
------BEGIN CERTIFICATE-----
-MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQGEwJIVTERMA8G
-A1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3MDUGA1UECwwuVGFuw7pzw610
-dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBB
-cmFueSAoQ2xhc3MgR29sZCkgRsWRdGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgx
-MjA2MTUwODIxWjCBpzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxO
-ZXRMb2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlmaWNhdGlv
-biBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNzIEdvbGQpIEbFkXRhbsO6
-c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxCRec75LbRTDofTjl5Bu
-0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrTlF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw
-/HpYzY6b7cNGbIRwXdrzAZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAk
-H3B5r9s5VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRGILdw
-fzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2BJtr+UBdADTHLpl1
-neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAGAQH/AgEEMA4GA1UdDwEB/wQEAwIB
-BjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2MU9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwW
-qZw8UQCgwBEIBaeZ5m8BiFRhbvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTta
-YtOUZcTh5m2C+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC
-bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2FuLjbvrW5Kfna
-NwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2XjG4Kvte9nHfRCaexOYNkbQu
-dZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E=
------END CERTIFICATE-----
-
-Staat der Nederlanden Root CA - G2
-==================================
------BEGIN CERTIFICATE-----
-MIIFyjCCA7KgAwIBAgIEAJiWjDANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJOTDEeMBwGA1UE
-CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFhdCBkZXIgTmVkZXJsYW5kZW4g
-Um9vdCBDQSAtIEcyMB4XDTA4MDMyNjExMTgxN1oXDTIwMDMyNTExMDMxMFowWjELMAkGA1UEBhMC
-TkwxHjAcBgNVBAoMFVN0YWF0IGRlciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5l
-ZGVybGFuZGVuIFJvb3QgQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMVZ
-5291qj5LnLW4rJ4L5PnZyqtdj7U5EILXr1HgO+EASGrP2uEGQxGZqhQlEq0i6ABtQ8SpuOUfiUtn
-vWFI7/3S4GCI5bkYYCjDdyutsDeqN95kWSpGV+RLufg3fNU254DBtvPUZ5uW6M7XxgpT0GtJlvOj
-CwV3SPcl5XCsMBQgJeN/dVrlSPhOewMHBPqCYYdu8DvEpMfQ9XQ+pV0aCPKbJdL2rAQmPlU6Yiil
-e7Iwr/g3wtG61jj99O9JMDeZJiFIhQGp5Rbn3JBV3w/oOM2ZNyFPXfUib2rFEhZgF1XyZWampzCR
-OME4HYYEhLoaJXhena/MUGDWE4dS7WMfbWV9whUYdMrhfmQpjHLYFhN9C0lK8SgbIHRrxT3dsKpI
-CT0ugpTNGmXZK4iambwYfp/ufWZ8Pr2UuIHOzZgweMFvZ9C+X+Bo7d7iscksWXiSqt8rYGPy5V65
-48r6f1CGPqI0GAwJaCgRHOThuVw+R7oyPxjMW4T182t0xHJ04eOLoEq9jWYv6q012iDTiIJh8BIi
-trzQ1aTsr1SIJSQ8p22xcik/Plemf1WvbibG/ufMQFxRRIEKeN5KzlW/HdXZt1bv8Hb/C3m1r737
-qWmRRpdogBQ2HbN/uymYNqUg+oJgYjOk7Na6B6duxc8UpufWkjTYgfX8HV2qXB72o007uPc5AgMB
-AAGjgZcwgZQwDwYDVR0TAQH/BAUwAwEB/zBSBgNVHSAESzBJMEcGBFUdIAAwPzA9BggrBgEFBQcC
-ARYxaHR0cDovL3d3dy5wa2lvdmVyaGVpZC5ubC9wb2xpY2llcy9yb290LXBvbGljeS1HMjAOBgNV
-HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJFoMocVHYnitfGsNig0jQt8YojrMA0GCSqGSIb3DQEBCwUA
-A4ICAQCoQUpnKpKBglBu4dfYszk78wIVCVBR7y29JHuIhjv5tLySCZa59sCrI2AGeYwRTlHSeYAz
-+51IvuxBQ4EffkdAHOV6CMqqi3WtFMTC6GY8ggen5ieCWxjmD27ZUD6KQhgpxrRW/FYQoAUXvQwj
-f/ST7ZwaUb7dRUG/kSS0H4zpX897IZmflZ85OkYcbPnNe5yQzSipx6lVu6xiNGI1E0sUOlWDuYaN
-kqbG9AclVMwWVxJKgnjIFNkXgiYtXSAfea7+1HAWFpWD2DU5/1JddRwWxRNVz0fMdWVSSt7wsKfk
-CpYL+63C4iWEst3kvX5ZbJvw8NjnyvLplzh+ib7M+zkXYT9y2zqR2GUBGR2tUKRXCnxLvJxxcypF
-URmFzI79R6d0lR2o0a9OF7FpJsKqeFdbxU2n5Z4FF5TKsl+gSRiNNOkmbEgeqmiSBeGCc1qb3Adb
-CG19ndeNIdn8FCCqwkXfP+cAslHkwvgFuXkajDTznlvkN1trSt8sV4pAWja63XVECDdCcAz+3F4h
-oKOKwJCcaNpQ5kUQR3i2TtJlycM33+FCY7BXN0Ute4qcvwXqZVUz9zkQxSgqIXobisQk+T8VyJoV
-IPVVYpbtbZNQvOSqeK3Zywplh6ZmwcSBo3c6WB4L7oOLnR7SUqTMHW+wmG2UMbX4cQrcufx9MmDm
-66+KAQ==
------END CERTIFICATE-----
-
-CA Disig
-========
------BEGIN CERTIFICATE-----
-MIIEDzCCAvegAwIBAgIBATANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQGEwJTSzETMBEGA1UEBxMK
-QnJhdGlzbGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwHhcNMDYw
-MzIyMDEzOTM0WhcNMTYwMzIyMDEzOTM0WjBKMQswCQYDVQQGEwJTSzETMBEGA1UEBxMKQnJhdGlz
-bGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwggEiMA0GCSqGSIb3
-DQEBAQUAA4IBDwAwggEKAoIBAQCS9jHBfYj9mQGp2HvycXXxMcbzdWb6UShGhJd4NLxs/LxFWYgm
-GErENx+hSkS943EE9UQX4j/8SFhvXJ56CbpRNyIjZkMhsDxkovhqFQ4/61HhVKndBpnXmjxUizkD
-Pw/Fzsbrg3ICqB9x8y34dQjbYkzo+s7552oftms1grrijxaSfQUMbEYDXcDtab86wYqg6I7ZuUUo
-hwjstMoVvoLdtUSLLa2GDGhibYVW8qwUYzrG0ZmsNHhWS8+2rT+MitcE5eN4TPWGqvWP+j1scaMt
-ymfraHtuM6kMgiioTGohQBUgDCZbg8KpFhXAJIJdKxatymP2dACw30PEEGBWZ2NFAgMBAAGjgf8w
-gfwwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUjbJJaJ1yCCW5wCf1UJNWSEZx+Y8wDgYDVR0P
-AQH/BAQDAgEGMDYGA1UdEQQvMC2BE2Nhb3BlcmF0b3JAZGlzaWcuc2uGFmh0dHA6Ly93d3cuZGlz
-aWcuc2svY2EwZgYDVR0fBF8wXTAtoCugKYYnaHR0cDovL3d3dy5kaXNpZy5zay9jYS9jcmwvY2Ff
-ZGlzaWcuY3JsMCygKqAohiZodHRwOi8vY2EuZGlzaWcuc2svY2EvY3JsL2NhX2Rpc2lnLmNybDAa
-BgNVHSAEEzARMA8GDSuBHpGT5goAAAABAQEwDQYJKoZIhvcNAQEFBQADggEBAF00dGFMrzvY/59t
-WDYcPQuBDRIrRhCA/ec8J9B6yKm2fnQwM6M6int0wHl5QpNt/7EpFIKrIYwvF/k/Ji/1WcbvgAa3
-mkkp7M5+cTxqEEHA9tOasnxakZzArFvITV734VP/Q3f8nktnbNfzg9Gg4H8l37iYC5oyOGwwoPP/
-CBUz91BKez6jPiCp3C9WgArtQVCwyfTssuMmRAAOb54GvCKWU3BlxFAKRmukLyeBEicTXxChds6K
-ezfqwzlhA5WYOudsiCUI/HloDYd9Yvi0X/vF2Ey9WLw/Q1vUHgFNPGO+I++MzVpQuGhU+QqZMxEA
-4Z7CRneC9VkGjCFMhwnN5ag=
------END CERTIFICATE-----
-
-Juur-SK
-=======
------BEGIN CERTIFICATE-----
-MIIE5jCCA86gAwIBAgIEO45L/DANBgkqhkiG9w0BAQUFADBdMRgwFgYJKoZIhvcNAQkBFglwa2lA
-c2suZWUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKExlBUyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMRAw
-DgYDVQQDEwdKdXVyLVNLMB4XDTAxMDgzMDE0MjMwMVoXDTE2MDgyNjE0MjMwMVowXTEYMBYGCSqG
-SIb3DQEJARYJcGtpQHNrLmVlMQswCQYDVQQGEwJFRTEiMCAGA1UEChMZQVMgU2VydGlmaXRzZWVy
-aW1pc2tlc2t1czEQMA4GA1UEAxMHSnV1ci1TSzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
-ggEBAIFxNj4zB9bjMI0TfncyRsvPGbJgMUaXhvSYRqTCZUXP00B841oiqBB4M8yIsdOBSvZiF3tf
-TQou0M+LI+5PAk676w7KvRhj6IAcjeEcjT3g/1tf6mTll+g/mX8MCgkzABpTpyHhOEvWgxutr2TC
-+Rx6jGZITWYfGAriPrsfB2WThbkasLnE+w0R9vXW+RvHLCu3GFH+4Hv2qEivbDtPL+/40UceJlfw
-UR0zlv/vWT3aTdEVNMfqPxZIe5EcgEMPPbgFPtGzlc3Yyg/CQ2fbt5PgIoIuvvVoKIO5wTtpeyDa
-Tpxt4brNj3pssAki14sL2xzVWiZbDcDq5WDQn/413z8CAwEAAaOCAawwggGoMA8GA1UdEwEB/wQF
-MAMBAf8wggEWBgNVHSAEggENMIIBCTCCAQUGCisGAQQBzh8BAQEwgfYwgdAGCCsGAQUFBwICMIHD
-HoHAAFMAZQBlACAAcwBlAHIAdABpAGYAaQBrAGEAYQB0ACAAbwBuACAAdgDkAGwAagBhAHMAdABh
-AHQAdQBkACAAQQBTAC0AaQBzACAAUwBlAHIAdABpAGYAaQB0AHMAZQBlAHIAaQBtAGkAcwBrAGUA
-cwBrAHUAcwAgAGEAbABhAG0ALQBTAEsAIABzAGUAcgB0AGkAZgBpAGsAYQBhAHQAaQBkAGUAIABr
-AGkAbgBuAGkAdABhAG0AaQBzAGUAawBzMCEGCCsGAQUFBwIBFhVodHRwOi8vd3d3LnNrLmVlL2Nw
-cy8wKwYDVR0fBCQwIjAgoB6gHIYaaHR0cDovL3d3dy5zay5lZS9qdXVyL2NybC8wHQYDVR0OBBYE
-FASqekej5ImvGs8KQKcYP2/v6X2+MB8GA1UdIwQYMBaAFASqekej5ImvGs8KQKcYP2/v6X2+MA4G
-A1UdDwEB/wQEAwIB5jANBgkqhkiG9w0BAQUFAAOCAQEAe8EYlFOiCfP+JmeaUOTDBS8rNXiRTHyo
-ERF5TElZrMj3hWVcRrs7EKACr81Ptcw2Kuxd/u+gkcm2k298gFTsxwhwDY77guwqYHhpNjbRxZyL
-abVAyJRld/JXIWY7zoVAtjNjGr95HvxcHdMdkxuLDF2FvZkwMhgJkVLpfKG6/2SSmuz+Ne6ML678
-IIbsSt4beDI3poHSna9aEhbKmVv8b20OxaAehsmR0FyYgl9jDIpaq9iVpszLita/ZEuOyoqysOkh
-Mp6qqIWYNIE5ITuoOlIyPfZrN4YGWhWY3PARZv40ILcD9EEQfTmEeZZyY7aWAuVrua0ZTbvGRNs2
-yyqcjg==
------END CERTIFICATE-----
-
-Hongkong Post Root CA 1
-=======================
------BEGIN CERTIFICATE-----
-MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoT
-DUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMB4XDTAzMDUx
-NTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25n
-IFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEF
-AAOCAQ8AMIIBCgKCAQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1
-ApzQjVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEnPzlTCeqr
-auh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjhZY4bXSNmO7ilMlHIhqqh
-qZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9nnV0ttgCXjqQesBCNnLsak3c78QA3xMY
-V18meMjWCnl3v/evt3a5pQuEF10Q6m/hq5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNV
-HRMBAf8ECDAGAQH/AgEDMA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7i
-h9legYsCmEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI37pio
-l7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clBoiMBdDhViw+5Lmei
-IAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJsEhTkYY2sEJCehFC78JZvRZ+K88ps
-T/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpOfMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilT
-c4afU9hDDl3WY4JxHYB0yvbiAmvZWg==
------END CERTIFICATE-----
-
-SecureSign RootCA11
-===================
------BEGIN CERTIFICATE-----
-MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDErMCkGA1UEChMi
-SmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoGA1UEAxMTU2VjdXJlU2lnbiBS
-b290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSsw
-KQYDVQQKEyJKYXBhbiBDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1
-cmVTaWduIFJvb3RDQTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvL
-TJszi1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8h9uuywGO
-wvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOVMdrAG/LuYpmGYz+/3ZMq
-g6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rP
-O7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitA
-bpSACW22s293bzUIUPsCh8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZX
-t94wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAKCh
-OBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xmKbabfSVSSUOrTC4r
-bnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQX5Ucv+2rIrVls4W6ng+4reV6G4pQ
-Oh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWrQbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01
-y8hSyn+B/tlr0/cR7SXf+Of5pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061
-lgeLKBObjBmNQSdJQO7e5iNEOdyhIta6A/I=
------END CERTIFICATE-----
-
-ACEDICOM Root
-=============
------BEGIN CERTIFICATE-----
-MIIFtTCCA52gAwIBAgIIYY3HhjsBggUwDQYJKoZIhvcNAQEFBQAwRDEWMBQGA1UEAwwNQUNFRElD
-T00gUm9vdDEMMAoGA1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00xCzAJBgNVBAYTAkVTMB4XDTA4
-MDQxODE2MjQyMloXDTI4MDQxMzE2MjQyMlowRDEWMBQGA1UEAwwNQUNFRElDT00gUm9vdDEMMAoG
-A1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00xCzAJBgNVBAYTAkVTMIICIjANBgkqhkiG9w0BAQEF
-AAOCAg8AMIICCgKCAgEA/5KV4WgGdrQsyFhIyv2AVClVYyT/kGWbEHV7w2rbYgIB8hiGtXxaOLHk
-WLn709gtn70yN78sFW2+tfQh0hOR2QetAQXW8713zl9CgQr5auODAKgrLlUTY4HKRxx7XBZXehuD
-YAQ6PmXDzQHe3qTWDLqO3tkE7hdWIpuPY/1NFgu3e3eM+SW10W2ZEi5PGrjm6gSSrj0RuVFCPYew
-MYWveVqc/udOXpJPQ/yrOq2lEiZmueIM15jO1FillUAKt0SdE3QrwqXrIhWYENiLxQSfHY9g5QYb
-m8+5eaA9oiM/Qj9r+hwDezCNzmzAv+YbX79nuIQZ1RXve8uQNjFiybwCq0Zfm/4aaJQ0PZCOrfbk
-HQl/Sog4P75n/TSW9R28MHTLOO7VbKvU/PQAtwBbhTIWdjPp2KOZnQUAqhbm84F9b32qhm2tFXTT
-xKJxqvQUfecyuB+81fFOvW8XAjnXDpVCOscAPukmYxHqC9FK/xidstd7LzrZlvvoHpKuE1XI2Sf2
-3EgbsCTBheN3nZqk8wwRHQ3ItBTutYJXCb8gWH8vIiPYcMt5bMlL8qkqyPyHK9caUPgn6C9D4zq9
-2Fdx/c6mUlv53U3t5fZvie27k5x2IXXwkkwp9y+cAS7+UEaeZAwUswdbxcJzbPEHXEUkFDWug/Fq
-TYl6+rPYLWbwNof1K1MCAwEAAaOBqjCBpzAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKaz
-4SsrSbbXc6GqlPUB53NlTKxQMA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUprPhKytJttdzoaqU
-9QHnc2VMrFAwRAYDVR0gBD0wOzA5BgRVHSAAMDEwLwYIKwYBBQUHAgEWI2h0dHA6Ly9hY2VkaWNv
-bS5lZGljb21ncm91cC5jb20vZG9jMA0GCSqGSIb3DQEBBQUAA4ICAQDOLAtSUWImfQwng4/F9tqg
-aHtPkl7qpHMyEVNEskTLnewPeUKzEKbHDZ3Ltvo/Onzqv4hTGzz3gvoFNTPhNahXwOf9jU8/kzJP
-eGYDdwdY6ZXIfj7QeQCM8htRM5u8lOk6e25SLTKeI6RF+7YuE7CLGLHdztUdp0J/Vb77W7tH1Pwk
-zQSulgUV1qzOMPPKC8W64iLgpq0i5ALudBF/TP94HTXa5gI06xgSYXcGCRZj6hitoocf8seACQl1
-ThCojz2GuHURwCRiipZ7SkXp7FnFvmuD5uHorLUwHv4FB4D54SMNUI8FmP8sX+g7tq3PgbUhh8oI
-KiMnMCArz+2UW6yyetLHKKGKC5tNSixthT8Jcjxn4tncB7rrZXtaAWPWkFtPF2Y9fwsZo5NjEFIq
-nxQWWOLcpfShFosOkYuByptZ+thrkQdlVV9SH686+5DdaaVbnG0OLLb6zqylfDJKZ0DcMDQj3dcE
-I2bw/FWAp/tmGYI1Z2JwOV5vx+qQQEQIHriy1tvuWacNGHk0vFQYXlPKNFHtRQrmjseCNj6nOGOp
-MCwXEGCSn1WHElkQwg9naRHMTh5+Spqtr0CodaxWkHS4oJyleW/c6RrIaQXpuvoDs3zk4E7Czp3o
-tkYNbn5XOmeUwssfnHdKZ05phkOTOPu220+DkdRgfks+KzgHVZhepA==
------END CERTIFICATE-----
-
-Verisign Class 1 Public Primary Certification Authority
-=======================================================
------BEGIN CERTIFICATE-----
-MIICPDCCAaUCED9pHoGc8JpK83P/uUii5N0wDQYJKoZIhvcNAQEFBQAwXzELMAkGA1UEBhMCVVMx
-FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAxIFB1YmxpYyBQcmltYXJ5
-IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVow
-XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAx
-IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA
-A4GNADCBiQKBgQDlGb9to1ZhLZlIcfZn3rmN67eehoAKkQ76OCWvRoiC5XOooJskXQ0fzGVuDLDQ
-VoQYh5oGmxChc9+0WDlrbsH2FdWoqD+qEgaNMax/sDTXjzRniAnNFBHiTkVWaR94AoDa3EeRKbs2
-yWNcxeDXLYd7obcysHswuiovMaruo2fa2wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFgVKTk8d6Pa
-XCUDfGD67gmZPCcQcMgMCeazh88K4hiWNWLMv5sneYlfycQJ9M61Hd8qveXbhpxoJeUwfLaJFf5n
-0a3hUKw8fGJLj7qE1xIVGx/KXQ/BUpQqEZnae88MNhPVNdwQGVnqlMEAv3WP2fr9dgTbYruQagPZ
-RjXZ+Hxb
------END CERTIFICATE-----
-
-Verisign Class 3 Public Primary Certification Authority
-=======================================================
------BEGIN CERTIFICATE-----
-MIICPDCCAaUCEDyRMcsf9tAbDpq40ES/Er4wDQYJKoZIhvcNAQEFBQAwXzELMAkGA1UEBhMCVVMx
-FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmltYXJ5
-IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVow
-XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAz
-IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA
-A4GNADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhEBarsAx94
-f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/isI19wKTakyYbnsZogy1Ol
-hec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBABByUqkFFBky
-CEHwxWsKzH4PIRnN5GfcX6kb5sroc50i2JhucwNhkcV8sEVAbkSdjbCxlnRhLQ2pRdKkkirWmnWX
-bj9T/UWZYB2oK0z5XqcJ2HUw19JlYD1n1khVdWk/kfVIC0dpImmClr7JyDiGSnoscxlIaU5rfGW/
-D/xwzoiQ
------END CERTIFICATE-----
-
-Microsec e-Szigno Root CA 2009
-==============================
------BEGIN CERTIFICATE-----
-MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYDVQQGEwJIVTER
-MA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jv
-c2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o
-dTAeFw0wOTA2MTYxMTMwMThaFw0yOTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UE
-BwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUt
-U3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTCCASIw
-DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvPkd6mJviZpWNwrZuuyjNA
-fW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tccbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG
-0IMZfcChEhyVbUr02MelTTMuhTlAdX4UfIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKA
-pxn1ntxVUwOXewdI/5n7N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm
-1HxdrtbCxkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1+rUC
-AwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTLD8bf
-QkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAbBgNVHREE
-FDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqGSIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0o
-lZMEyL/azXm4Q5DwpL7v8u8hmLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfX
-I/OMn74dseGkddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775
-tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c2Pm2G2JwCz02
-yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5tHMN1Rq41Bab2XD0h7lbwyYIi
-LXpUq3DDfSJlgnCW
------END CERTIFICATE-----
-
-E-Guven Kok Elektronik Sertifika Hizmet Saglayicisi
-===================================================
------BEGIN CERTIFICATE-----
-MIIDtjCCAp6gAwIBAgIQRJmNPMADJ72cdpW56tustTANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQG
-EwJUUjEoMCYGA1UEChMfRWxla3Ryb25payBCaWxnaSBHdXZlbmxpZ2kgQS5TLjE8MDoGA1UEAxMz
-ZS1HdXZlbiBLb2sgRWxla3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhZ2xheWljaXNpMB4XDTA3
-MDEwNDExMzI0OFoXDTE3MDEwNDExMzI0OFowdTELMAkGA1UEBhMCVFIxKDAmBgNVBAoTH0VsZWt0
-cm9uaWsgQmlsZ2kgR3V2ZW5saWdpIEEuUy4xPDA6BgNVBAMTM2UtR3V2ZW4gS29rIEVsZWt0cm9u
-aWsgU2VydGlmaWthIEhpem1ldCBTYWdsYXlpY2lzaTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
-AQoCggEBAMMSIJ6wXgBljU5Gu4Bc6SwGl9XzcslwuedLZYDBS75+PNdUMZTe1RK6UxYC6lhj71vY
-8+0qGqpxSKPcEC1fX+tcS5yWCEIlKBHMilpiAVDV6wlTL/jDj/6z/P2douNffb7tC+Bg62nsM+3Y
-jfsSSYMAyYuXjDtzKjKzEve5TfL0TW3H5tYmNwjy2f1rXKPlSFxYvEK+A1qBuhw1DADT9SN+cTAI
-JjjcJRFHLfO6IxClv7wC90Nex/6wN1CZew+TzuZDLMN+DfIcQ2Zgy2ExR4ejT669VmxMvLz4Bcpk
-9Ok0oSy1c+HCPujIyTQlCFzz7abHlJ+tiEMl1+E5YP6sOVkCAwEAAaNCMEAwDgYDVR0PAQH/BAQD
-AgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFJ/uRLOU1fqRTy7ZVZoEVtstxNulMA0GCSqG
-SIb3DQEBBQUAA4IBAQB/X7lTW2M9dTLn+sR0GstG30ZpHFLPqk/CaOv/gKlR6D1id4k9CnU58W5d
-F4dvaAXBlGzZXd/aslnLpRCKysw5zZ/rTt5S/wzw9JKp8mxTq5vSR6AfdPebmvEvFZ96ZDAYBzwq
-D2fK/A+JYZ1lpTzlvBNbCNvj/+27BrtqBrF6T2XGgv0enIu1De5Iu7i9qgi0+6N8y5/NkHZchpZ4
-Vwpm+Vganf2XKWDeEaaQHBkc7gGWIjQ0LpH5t8Qn0Xvmv/uARFoW5evg1Ao4vOSR49XrXMGs3xtq
-fJ7lddK2l4fbzIcrQzqECK+rPNv3PGYxhrCdU3nt+CPeQuMtgvEP5fqX
------END CERTIFICATE-----
-
-GlobalSign Root CA - R3
-=======================
------BEGIN CERTIFICATE-----
-MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4GA1UECxMXR2xv
-YmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh
-bFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT
-aWduIFJvb3QgQ0EgLSBSMzETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln
-bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWt
-iHL8RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsTgHeMCOFJ
-0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmmKPZpO/bLyCiR5Z2KYVc3
-rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zdQQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjl
-OCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZXriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2
-xmmFghcCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE
-FI/wS3+oLkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZURUm7
-lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMpjjM5RcOO5LlXbKr8
-EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK6fBdRoyV3XpYKBovHd7NADdBj+1E
-bddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQXmcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18
-YIvDQVETI53O9zJrlAGomecsMx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7r
-kpeDMdmztcpHWD9f
------END CERTIFICATE-----
-
-TC TrustCenter Universal CA III
-===============================
------BEGIN CERTIFICATE-----
-MIID4TCCAsmgAwIBAgIOYyUAAQACFI0zFQLkbPQwDQYJKoZIhvcNAQEFBQAwezELMAkGA1UEBhMC
-REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNVBAsTG1RDIFRydXN0Q2VudGVy
-IFVuaXZlcnNhbCBDQTEoMCYGA1UEAxMfVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBIElJSTAe
-Fw0wOTA5MDkwODE1MjdaFw0yOTEyMzEyMzU5NTlaMHsxCzAJBgNVBAYTAkRFMRwwGgYDVQQKExNU
-QyBUcnVzdENlbnRlciBHbWJIMSQwIgYDVQQLExtUQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0Ex
-KDAmBgNVBAMTH1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQSBJSUkwggEiMA0GCSqGSIb3DQEB
-AQUAA4IBDwAwggEKAoIBAQDC2pxisLlxErALyBpXsq6DFJmzNEubkKLF5+cvAqBNLaT6hdqbJYUt
-QCggbergvbFIgyIpRJ9Og+41URNzdNW88jBmlFPAQDYvDIRlzg9uwliT6CwLOunBjvvya8o84pxO
-juT5fdMnnxvVZ3iHLX8LR7PH6MlIfK8vzArZQe+f/prhsq75U7Xl6UafYOPfjdN/+5Z+s7Vy+Eut
-CHnNaYlAJ/Uqwa1D7KRTyGG299J5KmcYdkhtWyUB0SbFt1dpIxVbYYqt8Bst2a9c8SaQaanVDED1
-M4BDj5yjdipFtK+/fz6HP3bFzSreIMUWWMv5G/UPyw0RUmS40nZid4PxWJ//AgMBAAGjYzBhMB8G
-A1UdIwQYMBaAFFbn4VslQ4Dg9ozhcbyO5YAvxEjiMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/
-BAQDAgEGMB0GA1UdDgQWBBRW5+FbJUOA4PaM4XG8juWAL8RI4jANBgkqhkiG9w0BAQUFAAOCAQEA
-g8ev6n9NCjw5sWi+e22JLumzCecYV42FmhfzdkJQEw/HkG8zrcVJYCtsSVgZ1OK+t7+rSbyUyKu+
-KGwWaODIl0YgoGhnYIg5IFHYaAERzqf2EQf27OysGh+yZm5WZ2B6dF7AbZc2rrUNXWZzwCUyRdhK
-BgePxLcHsU0GDeGl6/R1yrqc0L2z0zIkTO5+4nYES0lT2PLpVDP85XEfPRRclkvxOvIAu2y0+pZV
-CIgJwcyRGSmwIC3/yzikQOEXvnlhgP8HA4ZMTnsGnxGGjYnuJ8Tb4rwZjgvDwxPHLQNjO9Po5KIq
-woIIlBZU8O8fJ5AluA0OKBtHd0e9HKgl8ZS0Zg==
------END CERTIFICATE-----
-
-Autoridad de Certificacion Firmaprofesional CIF A62634068
-=========================================================
------BEGIN CERTIFICATE-----
-MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCRVMxQjBA
-BgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2
-MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEyMzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIw
-QAYDVQQDDDlBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBB
-NjI2MzQwNjgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDD
-Utd9thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQMcas9UX4P
-B99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefGL9ItWY16Ck6WaVICqjaY
-7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15iNA9wBj4gGFrO93IbJWyTdBSTo3OxDqqH
-ECNZXyAFGUftaI6SEspd/NYrspI8IM/hX68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyI
-plD9amML9ZMWGxmPsu2bm8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctX
-MbScyJCyZ/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirjaEbsX
-LZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/TKI8xWVvTyQKmtFLK
-bpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF6NkBiDkal4ZkQdU7hwxu+g/GvUgU
-vzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVhOSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1Ud
-EwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNH
-DhpkLzCBpgYDVR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp
-cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBvACAAZABlACAA
-bABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBlAGwAbwBuAGEAIAAwADgAMAAx
-ADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx
-51tkljYyGOylMnfX40S2wBEqgLk9am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qk
-R71kMrv2JYSiJ0L1ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaP
-T481PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS3a/DTg4f
-Jl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5kSeTy36LssUzAKh3ntLFl
-osS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF3dvd6qJ2gHN99ZwExEWN57kci57q13XR
-crHedUTnQn3iV2t93Jm8PYMo6oCTjcVMZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoR
-saS8I8nkvof/uZS2+F0gStRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTD
-KCOM/iczQ0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQBjLMi
-6Et8Vcad+qMUu2WFbm5PEn4KPJ2V
------END CERTIFICATE-----
-
-Izenpe.com
-==========
------BEGIN CERTIFICATE-----
-MIIF8TCCA9mgAwIBAgIQALC3WhZIX7/hy/WL1xnmfTANBgkqhkiG9w0BAQsFADA4MQswCQYDVQQG
-EwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wHhcNMDcxMjEz
-MTMwODI4WhcNMzcxMjEzMDgyNzI1WjA4MQswCQYDVQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMu
-QS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDJ
-03rKDx6sp4boFmVqscIbRTJxldn+EFvMr+eleQGPicPK8lVx93e+d5TzcqQsRNiekpsUOqHnJJAK
-ClaOxdgmlOHZSOEtPtoKct2jmRXagaKH9HtuJneJWK3W6wyyQXpzbm3benhB6QiIEn6HLmYRY2xU
-+zydcsC8Lv/Ct90NduM61/e0aL6i9eOBbsFGb12N4E3GVFWJGjMxCrFXuaOKmMPsOzTFlUFpfnXC
-PCDFYbpRR6AgkJOhkEvzTnyFRVSa0QUmQbC1TR0zvsQDyCV8wXDbO/QJLVQnSKwv4cSsPsjLkkxT
-OTcj7NMB+eAJRE1NZMDhDVqHIrytG6P+JrUV86f8hBnp7KGItERphIPzidF0BqnMC9bC3ieFUCbK
-F7jJeodWLBoBHmy+E60QrLUk9TiRodZL2vG70t5HtfG8gfZZa88ZU+mNFctKy6lvROUbQc/hhqfK
-0GqfvEyNBjNaooXlkDWgYlwWTvDjovoDGrQscbNYLN57C9saD+veIR8GdwYDsMnvmfzAuU8Lhij+
-0rnq49qlw0dpEuDb8PYZi+17cNcC1u2HGCgsBCRMd+RIihrGO5rUD8r6ddIBQFqNeb+Lz0vPqhbB
-leStTIo+F5HUsWLlguWABKQDfo2/2n+iD5dPDNMN+9fR5XJ+HMh3/1uaD7euBUbl8agW7EekFwID
-AQABo4H2MIHzMIGwBgNVHREEgagwgaWBD2luZm9AaXplbnBlLmNvbaSBkTCBjjFHMEUGA1UECgw+
-SVpFTlBFIFMuQS4gLSBDSUYgQTAxMzM3MjYwLVJNZXJjLlZpdG9yaWEtR2FzdGVpeiBUMTA1NSBG
-NjIgUzgxQzBBBgNVBAkMOkF2ZGEgZGVsIE1lZGl0ZXJyYW5lbyBFdG9yYmlkZWEgMTQgLSAwMTAx
-MCBWaXRvcmlhLUdhc3RlaXowDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0O
-BBYEFB0cZQ6o8iV7tJHP5LGx5r1VdGwFMA0GCSqGSIb3DQEBCwUAA4ICAQB4pgwWSp9MiDrAyw6l
-Fn2fuUhfGI8NYjb2zRlrrKvV9pF9rnHzP7MOeIWblaQnIUdCSnxIOvVFfLMMjlF4rJUT3sb9fbga
-kEyrkgPH7UIBzg/YsfqikuFgba56awmqxinuaElnMIAkejEWOVt+8Rwu3WwJrfIxwYJOubv5vr8q
-hT/AQKM6WfxZSzwoJNu0FXWuDYi6LnPAvViH5ULy617uHjAimcs30cQhbIHsvm0m5hzkQiCeR7Cs
-g1lwLDXWrzY0tM07+DKo7+N4ifuNRSzanLh+QBxh5z6ikixL8s36mLYp//Pye6kfLqCTVyvehQP5
-aTfLnnhqBbTFMXiJ7HqnheG5ezzevh55hM6fcA5ZwjUukCox2eRFekGkLhObNA5me0mrZJfQRsN5
-nXJQY6aYWwa9SG3YOYNw6DXwBdGqvOPbyALqfP2C2sJbUjWumDqtujWTI6cfSN01RpiyEGjkpTHC
-ClguGYEQyVB1/OpaFs4R1+7vUIgtYf8/QnMFlEPVjjxOAToZpR9GTnfQXeWBIiGH/pR9hNiTrdZo
-Q0iy2+tzJOeRf1SktoA+naM8THLCV8Sg1Mw4J87VBp6iSNnpn86CcDaTmjvfliHjWbcM2pE38P1Z
-WrOZyGlsQyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw==
------END CERTIFICATE-----
-
-Chambers of Commerce Root - 2008
-================================
------BEGIN CERTIFICATE-----
-MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYDVQQGEwJFVTFD
-MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv
-bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu
-QS4xKTAnBgNVBAMTIENoYW1iZXJzIG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEy
-Mjk1MFoXDTM4MDczMTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNl
-ZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQF
-EwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJl
-cnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC
-AQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW928sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKA
-XuFixrYp4YFs8r/lfTJqVKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorj
-h40G072QDuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR5gN/
-ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfLZEFHcpOrUMPrCXZk
-NNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05aSd+pZgvMPMZ4fKecHePOjlO+Bd5g
-D2vlGts/4+EhySnB8esHnFIbAURRPHsl18TlUlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331
-lubKgdaX8ZSD6e2wsWsSaR6s+12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ
-0wlf2eOKNcx5Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj
-ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAxhduub+84Mxh2
-EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNVHQ4EFgQU+SSsD7K1+HnA+mCI
-G8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1+HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJ
-BgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNh
-bWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENh
-bWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDiC
-CQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUH
-AgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAJASryI1
-wqM58C7e6bXpeHxIvj99RZJe6dqxGfwWPJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH
-3qLPaYRgM+gQDROpI9CF5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbU
-RWpGqOt1glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaHFoI6
-M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2pSB7+R5KBWIBpih1
-YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MDxvbxrN8y8NmBGuScvfaAFPDRLLmF
-9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QGtjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcK
-zBIKinmwPQN/aUv0NCB9szTqjktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvG
-nrDQWzilm1DefhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg
-OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZd0jQ
------END CERTIFICATE-----
-
-Global Chambersign Root - 2008
-==============================
------BEGIN CERTIFICATE-----
-MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYDVQQGEwJFVTFD
-MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv
-bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu
-QS4xJzAlBgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMx
-NDBaFw0zODA3MzExMjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUg
-Y3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJ
-QTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD
-aGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMDf
-VtPkOpt2RbQT2//BthmLN0EYlVJH6xedKYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXf
-XjaOcNFccUMd2drvXNL7G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0
-ZJJ0YPP2zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4ddPB
-/gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyGHoiMvvKRhI9lNNgA
-TH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2Id3UwD2ln58fQ1DJu7xsepeY7s2M
-H/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3VyJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfe
-Ox2YItaswTXbo6Al/3K1dh3ebeksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSF
-HTynyQbehP9r6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh
-wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsogzCtLkykPAgMB
-AAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQWBBS5CcqcHtvTbDprru1U8VuT
-BjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDprru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UE
-BhMCRVUxQzBBBgNVBAcTOk1hZHJpZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJm
-aXJtYS5jb20vYWRkcmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJm
-aXJtYSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiCCQDJzdPp
-1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEWHGh0
-dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAICIf3DekijZBZRG
-/5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZUohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6
-ReAJ3spED8IXDneRRXozX1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/s
-dZ7LoR/xfxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVza2Mg
-9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yydYhz2rXzdpjEetrHH
-foUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMdSqlapskD7+3056huirRXhOukP9Du
-qqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9OAP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETr
-P3iZ8ntxPjzxmKfFGBI/5rsoM0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVq
-c5iJWzouE4gev8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z
-09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B
------END CERTIFICATE-----
-
-Go Daddy Root Certificate Authority - G2
-========================================
------BEGIN CERTIFICATE-----
-MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
-B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoTEUdvRGFkZHkuY29tLCBJbmMu
-MTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5
-MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6
-b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8G
-A1UEAxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKDE6bFIEMBO4Tx5oVJnyfq
-9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD
-+qK+ihVqf94Lw7YZFAXK6sOoBJQ7RnwyDfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutd
-fMh8+7ArU6SSYmlRJQVhGkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMl
-NAJWJwGRtDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEAAaNC
-MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFDqahQcQZyi27/a9
-BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmXWWcDYfF+OwYxdS2hII5PZYe096ac
-vNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r
-5N9ss4UXnT3ZJE95kTXWXwTrgIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYV
-N8Gb5DKj7Tjo2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO
-LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI4uJEvlz36hz1
------END CERTIFICATE-----
-
-Starfield Root Certificate Authority - G2
-=========================================
------BEGIN CERTIFICATE-----
-MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
-B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s
-b2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVsZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0
-eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAw
-DgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQg
-VGVjaG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZpY2F0ZSBB
-dXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL3twQP89o/8ArFv
-W59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMgnLRJdzIpVv257IzdIvpy3Cdhl+72WoTs
-bhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNk
-N3mSwOxGXn/hbVNMYq/NHwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7Nf
-ZTD4p7dNdloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0HZbU
-JtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
-AQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0GCSqGSIb3DQEBCwUAA4IBAQARWfol
-TwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjUsHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx
-4mcujJUDJi5DnUox9g61DLu34jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUw
-F5okxBDgBPfg8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K
-pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1mMpYjn0q7pBZ
-c2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0
------END CERTIFICATE-----
-
-Starfield Services Root Certificate Authority - G2
-==================================================
------BEGIN CERTIFICATE-----
-MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
-B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s
-b2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVsZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRl
-IEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNV
-BAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxT
-dGFyZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2VydmljZXMg
-Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
-AQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20pOsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2
-h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm28xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4Pa
-hHQUw2eeBGg6345AWh1KTs9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLP
-LJGmpufehRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk6mFB
-rMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAwDwYDVR0TAQH/BAUw
-AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+qAdcwKziIorhtSpzyEZGDMA0GCSqG
-SIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMIbw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPP
-E95Dz+I0swSdHynVv/heyNXBve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTy
-xQGjhdByPq1zqwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd
-iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn0q23KXB56jza
-YyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCNsSi6
------END CERTIFICATE-----
-
-AffirmTrust Commercial
-======================
------BEGIN CERTIFICATE-----
-MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UEBhMCVVMxFDAS
-BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMB4XDTEw
-MDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly
-bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEF
-AAOCAQ8AMIIBCgKCAQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6Eqdb
-DuKPHx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yrba0F8PrV
-C8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPALMeIrJmqbTFeurCA+ukV6
-BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1yHp52UKqK39c/s4mT6NmgTWvRLpUHhww
-MmWd5jyTXlBOeuM61G7MGvv50jeuJCqrVwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNV
-HQ4EFgQUnZPGU4teyq8/nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
-AQYwDQYJKoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYGXUPG
-hi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNjvbz4YYCanrHOQnDi
-qX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivtZ8SOyUOyXGsViQK8YvxO8rUzqrJv
-0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9gN53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0kh
-sUlHRUe072o0EclNmsxZt9YCnlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8=
------END CERTIFICATE-----
-
-AffirmTrust Networking
-======================
------BEGIN CERTIFICATE-----
-MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UEBhMCVVMxFDAS
-BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMB4XDTEw
-MDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly
-bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEF
-AAOCAQ8AMIIBCgKCAQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SE
-Hi3yYJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbuakCNrmreI
-dIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRLQESxG9fhwoXA3hA/Pe24
-/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gb
-h+0t+nvujArjqWaJGctB+d1ENmHP4ndGyH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNV
-HQ4EFgQUBx/S55zawm6iQLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
-AQYwDQYJKoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfOtDIu
-UFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzuQY0x2+c06lkh1QF6
-12S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZLgo/bNjR9eUJtGxUAArgFU2HdW23
-WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4uolu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9
-/ZFvgrG+CJPbFEfxojfHRZ48x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s=
------END CERTIFICATE-----
-
-AffirmTrust Premium
-===================
------BEGIN CERTIFICATE-----
-MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UEBhMCVVMxFDAS
-BgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMB4XDTEwMDEy
-OTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRy
-dXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A
-MIICCgKCAgEAxBLfqV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtn
-BKAQJG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ+jjeRFcV
-5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrSs8PhaJyJ+HoAVt70VZVs
-+7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmd
-GPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d770O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5R
-p9EixAqnOEhss/n/fauGV+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NI
-S+LI+H+SqHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S5u04
-6uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4IaC1nEWTJ3s7xgaVY5
-/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TXOwF0lkLgAOIua+rF7nKsu7/+6qqo
-+Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYEFJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB
-/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByv
-MiPIs0laUZx2KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg
-Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B8OWycvpEgjNC
-6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQMKSOyARiqcTtNd56l+0OOF6S
-L5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK
-+4w1IX2COPKpVJEZNZOUbWo6xbLQu4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmV
-BtWVyuEklut89pMFu+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFg
-IxpHYoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8GKa1qF60
-g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaORtGdFNrHF+QFlozEJLUb
-zxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6eKeC2uAloGRwYQw==
------END CERTIFICATE-----
-
-AffirmTrust Premium ECC
-=======================
------BEGIN CERTIFICATE-----
-MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMCVVMxFDASBgNV
-BAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQcmVtaXVtIEVDQzAeFw0xMDAx
-MjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJBgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1U
-cnVzdDEgMB4GA1UEAwwXQWZmaXJtVHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQA
-IgNiAAQNMF4bFZ0D0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQ
-N8O9ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0GA1UdDgQW
-BBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAK
-BggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/VsaobgxCd05DhT1wV/GzTjxi+zygk8N53X
-57hG8f2h4nECMEJZh0PUUd+60wkyWs6Iflc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKM
-eQ==
------END CERTIFICATE-----
-
-Certum Trusted Network CA
-=========================
------BEGIN CERTIFICATE-----
-MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBMMSIwIAYDVQQK
-ExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlv
-biBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIy
-MTIwNzM3WhcNMjkxMjMxMTIwNzM3WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBU
-ZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
-MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC
-AQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rHUV+rpDKmYYe2bg+G0jAC
-l/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LMTXPb865Px1bVWqeWifrzq2jUI4ZZJ88J
-J7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVUBBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4
-fOQtf/WsX+sWn7Et0brMkUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0
-cvW0QM8xAcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNVHRMB
-Af8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYw
-DQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15ysHhE49wcrwn9I0j6vSrEuVUEtRCj
-jSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfLI9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1
-mS1FhIrlQgnXdAIv94nYmem8J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5aj
-Zt3hrvJBW8qYVoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI
-03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw=
------END CERTIFICATE-----
-
-Certinomis - Autorité Racine
-=============================
------BEGIN CERTIFICATE-----
-MIIFnDCCA4SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJGUjETMBEGA1UEChMK
-Q2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxJjAkBgNVBAMMHUNlcnRpbm9taXMg
-LSBBdXRvcml0w6kgUmFjaW5lMB4XDTA4MDkxNzA4Mjg1OVoXDTI4MDkxNzA4Mjg1OVowYzELMAkG
-A1UEBhMCRlIxEzARBgNVBAoTCkNlcnRpbm9taXMxFzAVBgNVBAsTDjAwMDIgNDMzOTk4OTAzMSYw
-JAYDVQQDDB1DZXJ0aW5vbWlzIC0gQXV0b3JpdMOpIFJhY2luZTCCAiIwDQYJKoZIhvcNAQEBBQAD
-ggIPADCCAgoCggIBAJ2Fn4bT46/HsmtuM+Cet0I0VZ35gb5j2CN2DpdUzZlMGvE5x4jYF1AMnmHa
-wE5V3udauHpOd4cN5bjr+p5eex7Ezyh0x5P1FMYiKAT5kcOrJ3NqDi5N8y4oH3DfVS9O7cdxbwly
-Lu3VMpfQ8Vh30WC8Tl7bmoT2R2FFK/ZQpn9qcSdIhDWerP5pqZ56XjUl+rSnSTV3lqc2W+HN3yNw
-2F1MpQiD8aYkOBOo7C+ooWfHpi2GR+6K/OybDnT0K0kCe5B1jPyZOQE51kqJ5Z52qz6WKDgmi92N
-jMD2AR5vpTESOH2VwnHu7XSu5DaiQ3XV8QCb4uTXzEIDS3h65X27uK4uIJPT5GHfceF2Z5c/tt9q
-c1pkIuVC28+BA5PY9OMQ4HL2AHCs8MF6DwV/zzRpRbWT5BnbUhYjBYkOjUjkJW+zeL9i9Qf6lSTC
-lrLooyPCXQP8w9PlfMl1I9f09bze5N/NgL+RiH2nE7Q5uiy6vdFrzPOlKO1Enn1So2+WLhl+HPNb
-xxaOu2B9d2ZHVIIAEWBsMsGoOBvrbpgT1u449fCfDu/+MYHB0iSVL1N6aaLwD4ZFjliCK0wi1F6g
-530mJ0jfJUaNSih8hp75mxpZuWW/Bd22Ql095gBIgl4g9xGC3srYn+Y3RyYe63j3YcNBZFgCQfna
-4NH4+ej9Uji29YnfAgMBAAGjWzBZMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G
-A1UdDgQWBBQNjLZh2kS40RR9w759XkjwzspqsDAXBgNVHSAEEDAOMAwGCiqBegFWAgIAAQEwDQYJ
-KoZIhvcNAQEFBQADggIBACQ+YAZ+He86PtvqrxyaLAEL9MW12Ukx9F1BjYkMTv9sov3/4gbIOZ/x
-WqndIlgVqIrTseYyCYIDbNc/CMf4uboAbbnW/FIyXaR/pDGUu7ZMOH8oMDX/nyNTt7buFHAAQCva
-R6s0fl6nVjBhK4tDrP22iCj1a7Y+YEq6QpA0Z43q619FVDsXrIvkxmUP7tCMXWY5zjKn2BCXwH40
-nJ+U8/aGH88bc62UeYdocMMzpXDn2NU4lG9jeeu/Cg4I58UvD0KgKxRA/yHgBcUn4YQRE7rWhh1B
-CxMjidPJC+iKunqjo3M3NYB9Ergzd0A4wPpeMNLytqOx1qKVl4GbUu1pTP+A5FPbVFsDbVRfsbjv
-JL1vnxHDx2TCDyhihWZeGnuyt++uNckZM6i4J9szVb9o4XVIRFb7zdNIu0eJOqxp9YDG5ERQL1TE
-qkPFMTFYvZbF6nVsmnWxTfj3l/+WFvKXTej28xH5On2KOG4Ey+HTRRWqpdEdnV1j6CTmNhTih60b
-WfVEm/vXd3wfAXBioSAaosUaKPQhA+4u2cGA6rnZgtZbdsLLO7XSAPCjDuGtbkD326C00EauFddE
-wk01+dIL8hf2rGbVJLJP0RyZwG71fet0BLj5TXcJ17TPBzAJ8bgAVtkXFhYKK4bfjwEZGuW7gmP/
-vgt2Fl43N+bYdJeimUV5
------END CERTIFICATE-----
-
-Root CA Generalitat Valenciana
-==============================
------BEGIN CERTIFICATE-----
-MIIGizCCBXOgAwIBAgIEO0XlaDANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJFUzEfMB0GA1UE
-ChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290
-IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwHhcNMDEwNzA2MTYyMjQ3WhcNMjEwNzAxMTUyMjQ3
-WjBoMQswCQYDVQQGEwJFUzEfMB0GA1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UE
-CxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwggEiMA0G
-CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGKqtXETcvIorKA3Qdyu0togu8M1JAJke+WmmmO3I2
-F0zo37i7L3bhQEZ0ZQKQUgi0/6iMweDHiVYQOTPvaLRfX9ptI6GJXiKjSgbwJ/BXufjpTjJ3Cj9B
-ZPPrZe52/lSqfR0grvPXdMIKX/UIKFIIzFVd0g/bmoGlu6GzwZTNVOAydTGRGmKy3nXiz0+J2ZGQ
-D0EbtFpKd71ng+CT516nDOeB0/RSrFOyA8dEJvt55cs0YFAQexvba9dHq198aMpunUEDEO5rmXte
-JajCq+TA81yc477OMUxkHl6AovWDfgzWyoxVjr7gvkkHD6MkQXpYHYTqWBLI4bft75PelAgxAgMB
-AAGjggM7MIIDNzAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAGGFmh0dHA6Ly9vY3NwLnBraS5n
-dmEuZXMwEgYDVR0TAQH/BAgwBgEB/wIBAjCCAjQGA1UdIASCAiswggInMIICIwYKKwYBBAG/VQIB
-ADCCAhMwggHoBggrBgEFBQcCAjCCAdoeggHWAEEAdQB0AG8AcgBpAGQAYQBkACAAZABlACAAQwBl
-AHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAFIAYQDtAHoAIABkAGUAIABsAGEAIABHAGUAbgBlAHIA
-YQBsAGkAdABhAHQAIABWAGEAbABlAG4AYwBpAGEAbgBhAC4ADQAKAEwAYQAgAEQAZQBjAGwAYQBy
-AGEAYwBpAPMAbgAgAGQAZQAgAFAAcgDhAGMAdABpAGMAYQBzACAAZABlACAAQwBlAHIAdABpAGYA
-aQBjAGEAYwBpAPMAbgAgAHEAdQBlACAAcgBpAGcAZQAgAGUAbAAgAGYAdQBuAGMAaQBvAG4AYQBt
-AGkAZQBuAHQAbwAgAGQAZQAgAGwAYQAgAHAAcgBlAHMAZQBuAHQAZQAgAEEAdQB0AG8AcgBpAGQA
-YQBkACAAZABlACAAQwBlAHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAHMAZQAgAGUAbgBjAHUAZQBu
-AHQAcgBhACAAZQBuACAAbABhACAAZABpAHIAZQBjAGMAaQDzAG4AIAB3AGUAYgAgAGgAdAB0AHAA
-OgAvAC8AdwB3AHcALgBwAGsAaQAuAGcAdgBhAC4AZQBzAC8AYwBwAHMwJQYIKwYBBQUHAgEWGWh0
-dHA6Ly93d3cucGtpLmd2YS5lcy9jcHMwHQYDVR0OBBYEFHs100DSHHgZZu90ECjcPk+yeAT8MIGV
-BgNVHSMEgY0wgYqAFHs100DSHHgZZu90ECjcPk+yeAT8oWykajBoMQswCQYDVQQGEwJFUzEfMB0G
-A1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5S
-b290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmGCBDtF5WgwDQYJKoZIhvcNAQEFBQADggEBACRh
-TvW1yEICKrNcda3FbcrnlD+laJWIwVTAEGmiEi8YPyVQqHxK6sYJ2fR1xkDar1CdPaUWu20xxsdz
-Ckj+IHLtb8zog2EWRpABlUt9jppSCS/2bxzkoXHPjCpaF3ODR00PNvsETUlR4hTJZGH71BTg9J63
-NI8KJr2XXPR5OkowGcytT6CYirQxlyric21+eLj4iIlPsSKRZEv1UN4D2+XFducTZnV+ZfsBn5OH
-iJ35Rld8TWCvmHMTI6QgkYH60GFmuH3Rr9ZvHmw96RH9qfmCIoaZM3Fa6hlXPZHNqcCjbgcTpsnt
-+GijnsNacgmHKNHEc8RzGF9QdRYxn7fofMM=
------END CERTIFICATE-----
-
-A-Trust-nQual-03
-================
------BEGIN CERTIFICATE-----
-MIIDzzCCAregAwIBAgIDAWweMA0GCSqGSIb3DQEBBQUAMIGNMQswCQYDVQQGEwJBVDFIMEYGA1UE
-Cgw/QS1UcnVzdCBHZXMuIGYuIFNpY2hlcmhlaXRzc3lzdGVtZSBpbSBlbGVrdHIuIERhdGVudmVy
-a2VociBHbWJIMRkwFwYDVQQLDBBBLVRydXN0LW5RdWFsLTAzMRkwFwYDVQQDDBBBLVRydXN0LW5R
-dWFsLTAzMB4XDTA1MDgxNzIyMDAwMFoXDTE1MDgxNzIyMDAwMFowgY0xCzAJBgNVBAYTAkFUMUgw
-RgYDVQQKDD9BLVRydXN0IEdlcy4gZi4gU2ljaGVyaGVpdHNzeXN0ZW1lIGltIGVsZWt0ci4gRGF0
-ZW52ZXJrZWhyIEdtYkgxGTAXBgNVBAsMEEEtVHJ1c3QtblF1YWwtMDMxGTAXBgNVBAMMEEEtVHJ1
-c3QtblF1YWwtMDMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtPWFuA/OQO8BBC4SA
-zewqo51ru27CQoT3URThoKgtUaNR8t4j8DRE/5TrzAUjlUC5B3ilJfYKvUWG6Nm9wASOhURh73+n
-yfrBJcyFLGM/BWBzSQXgYHiVEEvc+RFZznF/QJuKqiTfC0Li21a8StKlDJu3Qz7dg9MmEALP6iPE
-SU7l0+m0iKsMrmKS1GWH2WrX9IWf5DMiJaXlyDO6w8dB3F/GaswADm0yqLaHNgBid5seHzTLkDx4
-iHQF63n1k3Flyp3HaxgtPVxO59X4PzF9j4fsCiIvI+n+u33J4PTs63zEsMMtYrWacdaxaujs2e3V
-cuy+VwHOBVWf3tFgiBCzAgMBAAGjNjA0MA8GA1UdEwEB/wQFMAMBAf8wEQYDVR0OBAoECERqlWdV
-eRFPMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAVdRU0VlIXLOThaq/Yy/kgM40
-ozRiPvbY7meIMQQDbwvUB/tOdQ/TLtPAF8fGKOwGDREkDg6lXb+MshOWcdzUzg4NCmgybLlBMRmr
-sQd7TZjTXLDR8KdCoLXEjq/+8T/0709GAHbrAvv5ndJAlseIOrifEXnzgGWovR/TeIGgUUw3tKZd
-JXDRZslo+S4RFGjxVJgIrCaSD96JntT6s3kr0qN51OyLrIdTaEJMUVF0HhsnLuP1Hyl0Te2v9+GS
-mYHovjrHF1D2t8b8m7CKa9aIA5GPBnc6hQLdmNVDeD/GMBWsm2vLV7eJUYs66MmEDNuxUCAKGkq6
-ahq97BvIxYSazQ==
------END CERTIFICATE-----
-
-TWCA Root Certification Authority
-=================================
------BEGIN CERTIFICATE-----
-MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJ
-VEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlmaWNh
-dGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMzWhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQG
-EwJUVzESMBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NB
-IFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
-AoIBAQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFEAcK0HMMx
-QhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HHK3XLfJ+utdGdIzdjp9xC
-oi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeXRfwZVzsrb+RH9JlF/h3x+JejiB03HFyP
-4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/zrX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1r
-y+UPizgN7gr8/g+YnzAx3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIB
-BjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkqhkiG
-9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeCMErJk/9q56YAf4lC
-mtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdlsXebQ79NqZp4VKIV66IIArB6nCWlW
-QtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62Dlhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVY
-T0bf+215WfKEIlKuD8z7fDvnaspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocny
-Yh0igzyXxfkZYiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw==
------END CERTIFICATE-----
-
-Security Communication RootCA2
-==============================
------BEGIN CERTIFICATE-----
-MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDElMCMGA1UEChMc
-U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMeU2VjdXJpdHkgQ29tbXVuaWNh
-dGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoXDTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMC
-SlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3Vy
-aXR5IENvbW11bmljYXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
-ANAVOVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGrzbl+dp++
-+T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVMVAX3NuRFg3sUZdbcDE3R
-3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQhNBqyjoGADdH5H5XTz+L62e4iKrFvlNV
-spHEfbmwhRkGeC7bYRr6hfVKkaHnFtWOojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1K
-EOtOghY6rCcMU/Gt1SSwawNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8
-QIH4D5csOPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEB
-CwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpFcoJxDjrSzG+ntKEj
-u/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXcokgfGT+Ok+vx+hfuzU7jBBJV1uXk
-3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6q
-tnRGEmyR7jTV7JqR50S+kDFy1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29
-mvVXIwAHIRc/SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03
------END CERTIFICATE-----
-
-EC-ACC
-======
------BEGIN CERTIFICATE-----
-MIIFVjCCBD6gAwIBAgIQ7is969Qh3hSoYqwE893EATANBgkqhkiG9w0BAQUFADCB8zELMAkGA1UE
-BhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2VydGlmaWNhY2lvIChOSUYgUS0w
-ODAxMTc2LUkpMSgwJgYDVQQLEx9TZXJ2ZWlzIFB1YmxpY3MgZGUgQ2VydGlmaWNhY2lvMTUwMwYD
-VQQLEyxWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAoYykwMzE1MDMGA1UE
-CxMsSmVyYXJxdWlhIEVudGl0YXRzIGRlIENlcnRpZmljYWNpbyBDYXRhbGFuZXMxDzANBgNVBAMT
-BkVDLUFDQzAeFw0wMzAxMDcyMzAwMDBaFw0zMTAxMDcyMjU5NTlaMIHzMQswCQYDVQQGEwJFUzE7
-MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8gKE5JRiBRLTA4MDExNzYt
-SSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBDZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZl
-Z2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQubmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJh
-cnF1aWEgRW50aXRhdHMgZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUND
-MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsyLHT+KXQpWIR4NA9h0X84NzJB5R85iK
-w5K4/0CQBXCHYMkAqbWUZRkiFRfCQ2xmRJoNBD45b6VLeqpjt4pEndljkYRm4CgPukLjbo73FCeT
-ae6RDqNfDrHrZqJyTxIThmV6PttPB/SnCWDaOkKZx7J/sxaVHMf5NLWUhdWZXqBIoH7nF2W4onW4
-HvPlQn2v7fOKSGRdghST2MDk/7NQcvJ29rNdQlB50JQ+awwAvthrDk4q7D7SzIKiGGUzE3eeml0a
-E9jD2z3Il3rucO2n5nzbcc8tlGLfbdb1OL4/pYUKGbio2Al1QnDE6u/LDsg0qBIimAy4E5S2S+zw
-0JDnJwIDAQABo4HjMIHgMB0GA1UdEQQWMBSBEmVjX2FjY0BjYXRjZXJ0Lm5ldDAPBgNVHRMBAf8E
-BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUoMOLRKo3pUW/l4Ba0fF4opvpXY0wfwYD
-VR0gBHgwdjB0BgsrBgEEAfV4AQMBCjBlMCwGCCsGAQUFBwIBFiBodHRwczovL3d3dy5jYXRjZXJ0
-Lm5ldC92ZXJhcnJlbDA1BggrBgEFBQcCAjApGidWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5l
-dC92ZXJhcnJlbCAwDQYJKoZIhvcNAQEFBQADggEBAKBIW4IB9k1IuDlVNZyAelOZ1Vr/sXE7zDkJ
-lF7W2u++AVtd0x7Y/X1PzaBB4DSTv8vihpw3kpBWHNzrKQXlxJ7HNd+KDM3FIUPpqojlNcAZQmNa
-Al6kSBg6hW/cnbw/nZzBh7h6YQjpdwt/cKt63dmXLGQehb+8dJahw3oS7AwaboMMPOhyRp/7SNVe
-l+axofjk70YllJyJ22k4vuxcDlbHZVHlUIiIv0LVKz3l+bqeLrPK9HOSAgu+TGbrIP65y7WZf+a2
-E/rKS03Z7lNGBjvGTq2TWoF+bCpLagVFjPIhpDGQh2xlnJ2lYJU6Un/10asIbvPuW/mIPX64b24D
-5EI=
------END CERTIFICATE-----
-
-Hellenic Academic and Research Institutions RootCA 2011
-=======================================================
------BEGIN CERTIFICATE-----
-MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1IxRDBCBgNVBAoT
-O0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9y
-aXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z
-IFJvb3RDQSAyMDExMB4XDTExMTIwNjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYT
-AkdSMUQwQgYDVQQKEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z
-IENlcnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNo
-IEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
-AKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPzdYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI
-1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJfel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa
-71HFK9+WXesyHgLacEnsbgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u
-8yBRQlqD75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSPFEDH
-3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNVHRMBAf8EBTADAQH/
-MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp5dgTBCPuQSUwRwYDVR0eBEAwPqA8
-MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQub3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQu
-b3JnMA0GCSqGSIb3DQEBBQUAA4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVt
-XdMiKahsog2p6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8
-TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7dIsXRSZMFpGD
-/md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8AcysNnq/onN694/BtZqhFLKPM58N
-7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXIl7WdmplNsDz4SgCbZN2fOUvRJ9e4
------END CERTIFICATE-----
-
-Actalis Authentication Root CA
-==============================
------BEGIN CERTIFICATE-----
-MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UEBhMCSVQxDjAM
-BgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UE
-AwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDky
-MjExMjIwMlowazELMAkGA1UEBhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlz
-IFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290
-IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNvUTufClrJ
-wkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX4ay8IMKx4INRimlNAJZa
-by/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9KK3giq0itFZljoZUj5NDKd45RnijMCO6
-zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1f
-YVEiVRvjRuPjPdA1YprbrxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2
-oxgkg4YQ51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2Fbe8l
-EfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxeKF+w6D9Fz8+vm2/7
-hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4Fv6MGn8i1zeQf1xcGDXqVdFUNaBr8
-EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbnfpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5
-jF66CyCU3nuDuP/jVo23Eek7jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLY
-iDrIn3hm7YnzezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt
-ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQALe3KHwGCmSUyI
-WOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70jsNjLiNmsGe+b7bAEzlgqqI0
-JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDzWochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKx
-K3JCaKygvU5a2hi/a5iB0P2avl4VSM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+
-Xlff1ANATIGk0k9jpwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC
-4yyXX04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+OkfcvHlXHo
-2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7RK4X9p2jIugErsWx0Hbhz
-lefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btUZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXem
-OR/qnuOf0GZvBeyqdn6/axag67XH/JJULysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9
-vwGYT7JZVEc+NHt4bVaTLnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg==
------END CERTIFICATE-----
-
-Trustis FPS Root CA
-===================
------BEGIN CERTIFICATE-----
-MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQG
-EwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQLExNUcnVzdGlzIEZQUyBSb290
-IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTExMzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNV
-BAoTD1RydXN0aXMgTGltaXRlZDEcMBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJ
-KoZIhvcNAQEBBQADggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQ
-RUN+AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihHiTHcDnlk
-H5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjjvSkCqPoc4Vu5g6hBSLwa
-cY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zt
-o3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlBOrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEA
-AaNTMFEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAd
-BgNVHQ4EFgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01GX2c
-GE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmWzaD+vkAMXBJV+JOC
-yinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP41BIy+Q7DsdwyhEQsb8tGD+pmQQ9P
-8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZEf1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHV
-l/9D7S3B2l0pKoU/rGXuhg8FjZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYl
-iB6XzCGcKQENZetX2fNXlrtIzYE=
------END CERTIFICATE-----
-
-StartCom Certification Authority
-================================
------BEGIN CERTIFICATE-----
-MIIHhzCCBW+gAwIBAgIBLTANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN
-U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu
-ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0
-NjM3WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk
-LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg
-U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
-ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y
-o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/
-Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d
-eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt
-2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z
-6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ
-osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/
-untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc
-UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT
-37uMdBNSSwIDAQABo4ICEDCCAgwwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD
-VR0OBBYEFE4L7xqkQFulF2mHMMo0aEPQQa7yMB8GA1UdIwQYMBaAFE4L7xqkQFulF2mHMMo0aEPQ
-Qa7yMIIBWgYDVR0gBIIBUTCCAU0wggFJBgsrBgEEAYG1NwEBATCCATgwLgYIKwYBBQUHAgEWImh0
-dHA6Ly93d3cuc3RhcnRzc2wuY29tL3BvbGljeS5wZGYwNAYIKwYBBQUHAgEWKGh0dHA6Ly93d3cu
-c3RhcnRzc2wuY29tL2ludGVybWVkaWF0ZS5wZGYwgc8GCCsGAQUFBwICMIHCMCcWIFN0YXJ0IENv
-bW1lcmNpYWwgKFN0YXJ0Q29tKSBMdGQuMAMCAQEagZZMaW1pdGVkIExpYWJpbGl0eSwgcmVhZCB0
-aGUgc2VjdGlvbiAqTGVnYWwgTGltaXRhdGlvbnMqIG9mIHRoZSBTdGFydENvbSBDZXJ0aWZpY2F0
-aW9uIEF1dGhvcml0eSBQb2xpY3kgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuc3RhcnRzc2wuY29t
-L3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilTdGFydENvbSBG
-cmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQsFAAOCAgEAjo/n3JR5
-fPGFf59Jb2vKXfuM/gTFwWLRfUKKvFO3lANmMD+x5wqnUCBVJX92ehQN6wQOQOY+2IirByeDqXWm
-N3PH/UvSTa0XQMhGvjt/UfzDtgUx3M2FIk5xt/JxXrAaxrqTi3iSSoX4eA+D/i+tLPfkpLst0OcN
-Org+zvZ49q5HJMqjNTbOx8aHmNrs++myziebiMMEofYLWWivydsQD032ZGNcpRJvkrKTlMeIFw6T
-tn5ii5B/q06f/ON1FE8qMt9bDeD1e5MNq6HPh+GlBEXoPBKlCcWw0bdT82AUuoVpaiF8H3VhFyAX
-e2w7QSlc4axa0c2Mm+tgHRns9+Ww2vl5GKVFP0lDV9LdJNUso/2RjSe15esUBppMeyG7Oq0wBhjA
-2MFrLH9ZXF2RsXAiV+uKa0hK1Q8p7MZAwC+ITGgBF3f0JBlPvfrhsiAhS90a2Cl9qrjeVOwhVYBs
-HvUwyKMQ5bLmKhQxw4UtjJixhlpPiVktucf3HMiKf8CdBUrmQk9io20ppB+Fq9vlgcitKj1MXVuE
-JnHEhV5xJMqlG2zYYdMa4FTbzrqpMrUi9nNBCV24F10OD5mQ1kfabwo6YigUZ4LZ8dCAWZvLMdib
-D4x3TrVoivJs9iQOLWxwxXPR3hTQcY+203sC9uO41Alua551hDnmfyWl8kgAwKQB2j8=
------END CERTIFICATE-----
-
-StartCom Certification Authority G2
-===================================
------BEGIN CERTIFICATE-----
-MIIFYzCCA0ugAwIBAgIBOzANBgkqhkiG9w0BAQsFADBTMQswCQYDVQQGEwJJTDEWMBQGA1UEChMN
-U3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
-RzIwHhcNMTAwMTAxMDEwMDAxWhcNMzkxMjMxMjM1OTAxWjBTMQswCQYDVQQGEwJJTDEWMBQGA1UE
-ChMNU3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3Jp
-dHkgRzIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2iTZbB7cgNr2Cu+EWIAOVeq8O
-o1XJJZlKxdBWQYeQTSFgpBSHO839sj60ZwNq7eEPS8CRhXBF4EKe3ikj1AENoBB5uNsDvfOpL9HG
-4A/LnooUCri99lZi8cVytjIl2bLzvWXFDSxu1ZJvGIsAQRSCb0AgJnooD/Uefyf3lLE3PbfHkffi
-Aez9lInhzG7TNtYKGXmu1zSCZf98Qru23QumNK9LYP5/Q0kGi4xDuFby2X8hQxfqp0iVAXV16iul
-Q5XqFYSdCI0mblWbq9zSOdIxHWDirMxWRST1HFSr7obdljKF+ExP6JV2tgXdNiNnvP8V4so75qbs
-O+wmETRIjfaAKxojAuuKHDp2KntWFhxyKrOq42ClAJ8Em+JvHhRYW6Vsi1g8w7pOOlz34ZYrPu8H
-vKTlXcxNnw3h3Kq74W4a7I/htkxNeXJdFzULHdfBR9qWJODQcqhaX2YtENwvKhOuJv4KHBnM0D4L
-nMgJLvlblnpHnOl68wVQdJVznjAJ85eCXuaPOQgeWeU1FEIT/wCc976qUM/iUUjXuG+v+E5+M5iS
-FGI6dWPPe/regjupuznixL0sAA7IF6wT700ljtizkC+p2il9Ha90OrInwMEePnWjFqmveiJdnxMa
-z6eg6+OGCtP95paV1yPIN93EfKo2rJgaErHgTuixO/XWb/Ew1wIDAQABo0IwQDAPBgNVHRMBAf8E
-BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUS8W0QGutHLOlHGVuRjaJhwUMDrYwDQYJ
-KoZIhvcNAQELBQADggIBAHNXPyzVlTJ+N9uWkusZXn5T50HsEbZH77Xe7XRcxfGOSeD8bpkTzZ+K
-2s06Ctg6Wgk/XzTQLwPSZh0avZyQN8gMjgdalEVGKua+etqhqaRpEpKwfTbURIfXUfEpY9Z1zRbk
-J4kd+MIySP3bmdCPX1R0zKxnNBFi2QwKN4fRoxdIjtIXHfbX/dtl6/2o1PXWT6RbdejF0mCy2wl+
-JYt7ulKSnj7oxXehPOBKc2thz4bcQ///If4jXSRK9dNtD2IEBVeC2m6kMyV5Sy5UGYvMLD0w6dEG
-/+gyRr61M3Z3qAFdlsHB1b6uJcDJHgoJIIihDsnzb02CVAAgp9KP5DlUFy6NHrgbuxu9mk47EDTc
-nIhT76IxW1hPkWLIwpqazRVdOKnWvvgTtZ8SafJQYqz7Fzf07rh1Z2AQ+4NQ+US1dZxAF7L+/Xld
-blhYXzD8AK6vM8EOTmy6p6ahfzLbOOCxchcKK5HsamMm7YnUeMx0HgX4a/6ManY5Ka5lIxKVCCIc
-l85bBu4M4ru8H0ST9tg4RQUh7eStqxK2A6RCLi3ECToDZ2mEmuFZkIoohdVddLHRDiBYmxOlsGOm
-7XtH/UVVMKTumtTm4ofvmMkyghEpIrwACjFeLQ/Ajulrso8uBtjRkcfGEvRM/TAXw8HaOFvjqerm
-obp573PYtlNXLfbQ4ddI
------END CERTIFICATE-----
-
-Buypass Class 2 Root CA
-=======================
------BEGIN CERTIFICATE-----
-MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU
-QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMiBSb290IENBMB4X
-DTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1owTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1
-eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIw
-DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1
-g1Lr6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPVL4O2fuPn
-9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC911K2GScuVr1QGbNgGE41b
-/+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHxMlAQTn/0hpPshNOOvEu/XAFOBz3cFIqU
-CqTqc/sLUegTBxj6DvEr0VQVfTzh97QZQmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeff
-awrbD02TTqigzXsu8lkBarcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgI
-zRFo1clrUs3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLiFRhn
-Bkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRSP/TizPJhk9H9Z2vX
-Uq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN9SG9dKpN6nIDSdvHXx1iY8f93ZHs
-M+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxPAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD
-VR0OBBYEFMmAd+BikoL1RpzzuvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF
-AAOCAgEAU18h9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s
-A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3tOluwlN5E40EI
-osHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo+fsicdl9sz1Gv7SEr5AcD48S
-aq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYd
-DnkM/crqJIByw5c/8nerQyIKx+u2DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWD
-LfJ6v9r9jv6ly0UsH8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0
-oyLQI+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK75t98biGC
-wWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h3PFaTWwyI0PurKju7koS
-CTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPzY11aWOIv4x3kqdbQCtCev9eBCfHJxyYN
-rJgWVqA=
------END CERTIFICATE-----
-
-Buypass Class 3 Root CA
-=======================
------BEGIN CERTIFICATE-----
-MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU
-QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMyBSb290IENBMB4X
-DTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFowTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1
-eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIw
-DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRH
-sJ8YZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3EN3coTRiR
-5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9tznDDgFHmV0ST9tD+leh
-7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX0DJq1l1sDPGzbjniazEuOQAnFN44wOwZ
-ZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH
-2xc519woe2v1n/MuwU8XKhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV
-/afmiSTYzIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvSO1UQ
-RwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D34xFMFbG02SrZvPA
-Xpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgPK9Dx2hzLabjKSWJtyNBjYt1gD1iq
-j6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD
-VR0OBBYEFEe4zf/lb+74suwvTg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF
-AAOCAgEAACAjQTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV
-cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXSIGrs/CIBKM+G
-uIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2HJLw5QY33KbmkJs4j1xrG0aG
-Q0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsaO5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8
-ZORK15FTAaggiG6cX0S5y2CBNOxv033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2
-KSb12tjE8nVhz36udmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz
-6MkEkbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg413OEMXbug
-UZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvDu79leNKGef9JOxqDDPDe
-eOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq4/g7u9xN12TyUb7mqqta6THuBrxzvxNi
-Cp/HuZc=
------END CERTIFICATE-----
-
-TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı
-======================================================
------BEGIN CERTIFICATE-----
-MIIEPTCCAyWgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvzE/MD0GA1UEAww2VMOcUktUUlVTVCBF
-bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEP
-MA0GA1UEBwwGQW5rYXJhMV4wXAYDVQQKDFVUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUg
-QmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgQXJhbMSxayAyMDA3MB4X
-DTA3MTIyNTE4MzcxOVoXDTE3MTIyMjE4MzcxOVowgb8xPzA9BgNVBAMMNlTDnFJLVFJVU1QgRWxl
-a3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTELMAkGA1UEBhMCVFIxDzAN
-BgNVBAcMBkFua2FyYTFeMFwGA1UECgxVVMOcUktUUlVTVCBCaWxnaSDEsGxldGnFn2ltIHZlIEJp
-bGnFn2ltIEfDvHZlbmxpxJ9pIEhpem1ldGxlcmkgQS7Fni4gKGMpIEFyYWzEsWsgMjAwNzCCASIw
-DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKu3PgqMyKVYFeaK7yc9SrToJdPNM8Ig3BnuiD9N
-YvDdE3ePYakqtdTyuTFYKTsvP2qcb3N2Je40IIDu6rfwxArNK4aUyeNgsURSsloptJGXg9i3phQv
-KUmi8wUG+7RP2qFsmmaf8EMJyupyj+sA1zU511YXRxcw9L6/P8JorzZAwan0qafoEGsIiveGHtya
-KhUG9qPw9ODHFNRRf8+0222vR5YXm3dx2KdxnSQM9pQ/hTEST7ruToK4uT6PIzdezKKqdfcYbwnT
-rqdUKDT74eA7YH2gvnmJhsifLfkKS8RQouf9eRbHegsYz85M733WB2+Y8a+xwXrXgTW4qhe04MsC
-AwEAAaNCMEAwHQYDVR0OBBYEFCnFkKslrxHkYb+j/4hhkeYO/pyBMA4GA1UdDwEB/wQEAwIBBjAP
-BgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAQDdr4Ouwo0RSVgrESLFF6QSU2TJ/s
-Px+EnWVUXKgWAkD6bho3hO9ynYYKVZ1WKKxmLNA6VpM0ByWtCLCPyA8JWcqdmBzlVPi5RX9ql2+I
-aE1KBiY3iAIOtsbWcpnOa3faYjGkVh+uX4132l32iPwa2Z61gfAyuOOI0JzzaqC5mxRZNTZPz/OO
-Xl0XrRWV2N2y1RVuAE6zS89mlOTgzbUF2mNXi+WzqtvALhyQRNsaXRik7r4EW5nVcV9VZWRi1aKb
-BFmGyGJ353yCRWo9F7/snXUMrqNvWtMvmDb08PUZqxFdyKbjKlhqQgnDvZImZjINXQhVdP+MmNAK
-poRq0Tl9
------END CERTIFICATE-----
-
-T-TeleSec GlobalRoot Class 3
-============================
------BEGIN CERTIFICATE-----
-MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM
-IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU
-cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgx
-MDAxMTAyOTU2WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz
-dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD
-ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0GCSqGSIb3
-DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN8ELg63iIVl6bmlQdTQyK
-9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/RLyTPWGrTs0NvvAgJ1gORH8EGoel15YU
-NpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZF
-iP0Zf3WHHx+xGwpzJFu5ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W
-0eDrXltMEnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGjQjBA
-MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1A/d2O2GCahKqGFPr
-AyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOyWL6ukK2YJ5f+AbGwUgC4TeQbIXQb
-fsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzT
-ucpH9sry9uetuUg/vBa3wW306gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7h
-P0HHRwA11fXT91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml
-e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4pTpPDpFQUWw==
------END CERTIFICATE-----
-
-EE Certification Centre Root CA
-===============================
------BEGIN CERTIFICATE-----
-MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQG
-EwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1czEoMCYGA1UEAwwfRUUgQ2Vy
-dGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYGCSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIw
-MTAxMDMwMTAxMDMwWhgPMjAzMDEyMTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlB
-UyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRy
-ZSBSb290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEBAQUAA4IB
-DwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUyeuuOF0+W2Ap7kaJjbMeM
-TC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvObntl8jixwKIy72KyaOBhU8E2lf/slLo2
-rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIwWFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw
-93X2PaRka9ZP585ArQ/dMtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtN
-P2MbRMNE1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYDVR0T
-AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/zQas8fElyalL1BSZ
-MEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEF
-BQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEFBQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+Rj
-xY6hUFaTlrg4wCQiZrxTFGGVv9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqM
-lIpPnTX/dqQGE5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5u
-uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIWiAYLtqZLICjU
-3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/vGVCJYMzpJJUPwssd8m92kMfM
-dcGWxZ0=
------END CERTIFICATE-----
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/commandline.py b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/commandline.py
deleted file mode 100644
index eff13a3..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/commandline.py
+++ /dev/null
@@ -1,37 +0,0 @@
-# adapted from https://github.com/wbond/sublime_package_control/blob/master/Package%20Control.py
-import os.path
-import subprocess
-
-
-class BinaryNotFoundError(Exception):
- pass
-
-class CommandExecutionError(Exception):
- def __init__(self, errorcode):
- self.errorcode = errorcode
-
- def __str__(self):
- return repr('An error has occurred while executing the command')
-
-def find_binary(name):
- dirs = ['/usr/local/sbin', '/usr/local/bin', '/usr/sbin', '/usr/bin',
- '/sbin', '/bin']
- for dir in dirs:
- path = os.path.join(dir, name)
- if os.path.exists(path):
- return path
-
- raise BinaryNotFoundError('The binary ' + name + ' could not be ' + \
- 'located')
-
-
-def execute(args):
- proc = subprocess.Popen(args, stdin=subprocess.PIPE,
- stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
-
- output = proc.stdout.read()
-
- if proc.wait() == 0:
- return output
-
- raise CommandExecutionError(proc.returncode)
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/github.py b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/github.py
deleted file mode 100644
index 6e4ce40..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/github.py
+++ /dev/null
@@ -1,172 +0,0 @@
-import sys
-import os.path
-sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
-import sublime
-import json
-import sublime_requests as requests
-import logging
-from requests.exceptions import ConnectionError
-import pprint
-
-logging.basicConfig(format='%(asctime)s %(message)s')
-logger = logging.getLogger()
-
-
-class GitHubApi(object):
- "Encapsulates the GitHub API"
- PER_PAGE = 100
- etags = {}
- cache = {}
-
- class UnauthorizedException(Exception):
- "Raised if we get a 401 from GitHub"
- pass
-
- class OTPNeededException(Exception):
- "Raised if 2FA is configured and we need a one-time password"
- pass
-
- class UnknownException(Exception):
- "Raised if we get a response code we don't recognize from GitHub"
- pass
-
- class ConnectionException(Exception):
- "Raised if we get a ConnectionError"
- pass
-
- class NullResponseException(Exception):
- "Raised if we get an empty response (i.e., CurlSession failure)"
- pass
-
- def __init__(self, base_uri="https://api.github.com", token=None, debug=False, proxies=None, force_curl=False):
- self.base_uri = base_uri
- self.token = token
- self.debug = debug
- self.proxies = proxies
-
- if debug:
- try:
- import http.client as httplib
- except ImportError:
- import httplib
- httplib.HTTPConnection.debuglevel = 1
- logger.setLevel(logging.DEBUG)
- requests_log = logging.getLogger("requests.packages.urllib3")
- requests_log.setLevel(logging.DEBUG)
- requests_log.propagate = True
-
- # set up requests session with the root CA cert bundle
- cert_path = os.path.join(sublime.packages_path(), "sublime-github", "ca-bundle.crt")
- if not os.path.isfile(cert_path):
- logger.warning("Root CA cert bundle not found at %s! Not verifying requests." % cert_path)
- cert_path = None
- self.rsession = requests.session(verify=cert_path,
- force_curl=force_curl)
-
- def get_token(self, username, password, one_time_password=None):
- auth_data = {
- "scopes": ["gist"],
- "note": "Sublime GitHub",
- "note_url": "https://github.com/bgreenlee/sublime-github"
- }
- headers = {'X-GitHub-OTP': one_time_password} if one_time_password else {}
- resp = self.rsession.post(self.base_uri + "/authorizations",
- headers=headers,
- auth=(username, password),
- proxies=self.proxies,
- data=json.dumps(auth_data))
- if resp.status_code == requests.codes.CREATED:
- logger.debug(pprint.saferepr(resp))
- data = json.loads(resp.text)
- return data["token"]
- elif resp.status_code == requests.codes.UNAUTHORIZED:
- if resp.headers['X-GitHub-OTP'].startswith('required'):
- raise self.OTPNeededException()
- else:
- raise self.UnauthorizedException()
- else:
- raise self.UnknownException("%d %s" % (resp.status_code, resp.text))
-
- def post(self, endpoint, data=None, content_type='application/json'):
- return self.request('post', endpoint, data=data, content_type=content_type)
-
- def patch(self, endpoint, data=None, content_type='application/json'):
- return self.request('patch', endpoint, data=data, content_type=content_type)
-
- def get(self, endpoint, params=None):
- return self.request('get', endpoint, params=params)
-
- def request(self, method, url, params=None, data=None, content_type=None):
- if not url.startswith("http"):
- url = self.base_uri + url
- if data:
- data = json.dumps(data)
-
- headers = {"Authorization": "token %s" % self.token}
-
- if content_type:
- headers["Content-Type"] = content_type
-
- # add an etag to the header if we have one
- if method == 'get' and url in self.etags:
- headers["If-None-Match"] = self.etags[url]
- logger.debug("request: %s %s %s %s" % (method, url, headers, params))
-
- try:
- resp = self.rsession.request(method, url,
- headers=headers,
- params=params,
- data=data,
- proxies=self.proxies,
- allow_redirects=True)
- if not resp:
- raise self.NullResponseException("Empty response received.")
- except ConnectionError as e:
- raise self.ConnectionException("Connection error, "
- "please verify your internet connection: %s" % e)
-
- full_url = resp.url
- logger.debug("response: %s" % resp.headers)
- if resp.status_code in [requests.codes.OK,
- requests.codes.CREATED,
- requests.codes.FOUND,
- requests.codes.CONTINUE]:
- if 'application/json' in resp.headers['content-type']:
- resp_data = json.loads(resp.text)
- else:
- resp_data = resp.text
- if method == 'get': # cache the response
- etag = resp.headers['etag']
- self.etags[full_url] = etag
- self.cache[etag] = resp_data
- return resp_data
- elif resp.status_code == requests.codes.NOT_MODIFIED:
- return self.cache[resp.headers['etag']]
- elif resp.status_code == requests.codes.UNAUTHORIZED:
- raise self.UnauthorizedException()
- else:
- raise self.UnknownException("%d %s" % (resp.status_code, resp.text))
-
- def create_gist(self, description="", filename="", content="", public=False):
- return self.post("/gists", {"description": description,
- "public": public,
- "files": {filename: {"content": content}}})
-
- def update_gist(self, gist, content):
- filename = list(gist["files"].keys())[0]
- return self.patch("/gists/" + gist["id"],
- {"description": gist["description"],
- "files": {filename: {"content": content}}})
-
- def list_gists(self, starred=False):
- page = 1
- data = []
- # fetch all pages
- while True:
- endpoint = "/gists" + ("/starred" if starred else "")
- page_data = self.get(endpoint, params={'page': page, 'per_page': self.PER_PAGE})
- data.extend(page_data)
- if len(page_data) < self.PER_PAGE:
- break
- page += 1
- return data
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/lib/git.py b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/lib/git.py
deleted file mode 100644
index 3f6c881..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/lib/git.py
+++ /dev/null
@@ -1,390 +0,0 @@
-# python3-compatible git library from https://github.com/kemayo/sublime-text-2-git
-# including this temporarily until a Package Control installable version of Git
-# is available
-import os
-import sublime
-import sublime_plugin
-import threading
-import subprocess
-import functools
-import os.path
-import time
-
-# In a complete inversion from ST2, in ST3 when a plugin is loaded we
-# actually can trust __file__.
-# Goal is to get: "Packages/Git", allowing for people who rename things
-FULL_PLUGIN_DIRECTORY = os.path.dirname(os.path.realpath(__file__))
-PLUGIN_DIRECTORY = FULL_PLUGIN_DIRECTORY.replace(os.path.normpath(os.path.join(FULL_PLUGIN_DIRECTORY, '..', '..')) + os.path.sep, '').replace(os.path.sep, '/')
-
-git_root_cache = {}
-
-
-def main_thread(callback, *args, **kwargs):
- # sublime.set_timeout gets used to send things onto the main thread
- # most sublime.[something] calls need to be on the main thread
- sublime.set_timeout(functools.partial(callback, *args, **kwargs), 0)
-
-
-def open_url(url):
- sublime.active_window().run_command('open_url', {"url": url})
-
-
-def git_root(directory):
- global git_root_cache
-
- retval = False
- leaf_dir = directory
-
- if leaf_dir in git_root_cache and git_root_cache[leaf_dir]['expires'] > time.time():
- return git_root_cache[leaf_dir]['retval']
-
- while directory:
- if os.path.exists(os.path.join(directory, '.git')):
- retval = directory
- break
- parent = os.path.realpath(os.path.join(directory, os.path.pardir))
- if parent == directory:
- # /.. == /
- retval = False
- break
- directory = parent
-
- git_root_cache[leaf_dir] = {
- 'retval': retval,
- 'expires': time.time() + 5
- }
-
- return retval
-
-
-# for readability code
-def git_root_exist(directory):
- return git_root(directory)
-
-
-def view_contents(view):
- region = sublime.Region(0, view.size())
- return view.substr(region)
-
-
-def plugin_file(name):
- return os.path.join(PLUGIN_DIRECTORY, name)
-
-
-def do_when(conditional, callback, *args, **kwargs):
- if conditional():
- return callback(*args, **kwargs)
- sublime.set_timeout(functools.partial(do_when, conditional, callback, *args, **kwargs), 50)
-
-
-def _make_text_safeish(text, fallback_encoding, method='decode'):
- # The unicode decode here is because sublime converts to unicode inside
- # insert in such a way that unknown characters will cause errors, which is
- # distinctly non-ideal... and there's no way to tell what's coming out of
- # git in output. So...
- try:
- unitext = getattr(text, method)('utf-8')
- except (UnicodeEncodeError, UnicodeDecodeError):
- unitext = getattr(text, method)(fallback_encoding)
- except AttributeError:
- # strongly implies we're already unicode, but just in case let's cast
- # to string
- unitext = str(text)
- return unitext
-
-
-def _test_paths_for_executable(paths, test_file):
- for directory in paths:
- file_path = os.path.join(directory, test_file)
- if os.path.exists(file_path) and os.access(file_path, os.X_OK):
- return file_path
-def find_git():
- # It turns out to be difficult to reliably run git, with varying paths
- # and subprocess environments across different platforms. So. Let's hack
- # this a bit.
- # (Yes, I could fall back on a hardline "set your system path properly"
- # attitude. But that involves a lot more arguing with people.)
- path = os.environ.get('PATH', '').split(os.pathsep)
- if os.name == 'nt':
- git_cmd = 'git.exe'
- else:
- git_cmd = 'git'
-
- git_path = _test_paths_for_executable(path, git_cmd)
-
- if not git_path:
- # /usr/local/bin:/usr/local/git/bin
- if os.name == 'nt':
- extra_paths = (
- os.path.join(os.environ["ProgramFiles"], "Git", "bin"),
- os.path.join(os.environ["ProgramFiles(x86)"], "Git", "bin"),
- )
- else:
- extra_paths = (
- '/usr/local/bin',
- '/usr/local/git/bin',
- )
- git_path = _test_paths_for_executable(extra_paths, git_cmd)
- return git_path
-GIT = find_git()
-
-
-class CommandThread(threading.Thread):
- def __init__(self, command, on_done, working_dir="", fallback_encoding="", **kwargs):
- threading.Thread.__init__(self)
- self.command = command
- self.on_done = on_done
- self.working_dir = working_dir
- if "stdin" in kwargs:
- self.stdin = kwargs["stdin"].encode()
- else:
- self.stdin = None
- if "stdout" in kwargs:
- self.stdout = kwargs["stdout"]
- else:
- self.stdout = subprocess.PIPE
- self.fallback_encoding = fallback_encoding
- self.kwargs = kwargs
-
- def run(self):
- try:
- # Ignore directories that no longer exist
- if not os.path.isdir(self.working_dir):
- return
-
- if self.working_dir != "":
- os.chdir(self.working_dir)
-
- # Windows needs startupinfo in order to start process in background
- startupinfo = None
- if os.name == 'nt':
- startupinfo = subprocess.STARTUPINFO()
- startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
-
- # universal_newlines seems to break `log` in python3
- proc = subprocess.Popen(self.command,
- stdout=self.stdout, stderr=subprocess.STDOUT,
- stdin=subprocess.PIPE, startupinfo=startupinfo,
- shell=False, universal_newlines=False)
- output = proc.communicate(self.stdin)[0]
- if not output:
- output = ''
-
- main_thread(self.on_done,
- _make_text_safeish(output, self.fallback_encoding), **self.kwargs)
- except subprocess.CalledProcessError as e:
- main_thread(self.on_done, e.returncode)
- except OSError as e:
- if e.errno == 2:
- main_thread(sublime.error_message, "Git binary could not be found in PATH\n\nConsider using the git_command setting for the Git plugin\n\nPATH is: %s" % os.environ['PATH'])
- else:
- raise e
-
-
-class GitScratchOutputCommand(sublime_plugin.TextCommand):
- def run(self, edit, output = '', output_file = None, clear = False):
- if clear:
- region = sublime.Region(0, self.view.size())
- self.view.erase(edit, region)
- self.view.insert(edit, 0, output)
-
-
-# A base for all commands
-class GitCommand(object):
- may_change_files = False
-
- def run_command(self, command, callback=None, show_status=True,
- filter_empty_args=True, no_save=False, **kwargs):
- if filter_empty_args:
- command = [arg for arg in command if arg]
- if 'working_dir' not in kwargs:
- kwargs['working_dir'] = self.get_working_dir()
- if 'fallback_encoding' not in kwargs and self.active_view() and self.active_view().settings().get('fallback_encoding'):
- kwargs['fallback_encoding'] = self.active_view().settings().get('fallback_encoding').rpartition('(')[2].rpartition(')')[0]
-
- s = sublime.load_settings("Git.sublime-settings")
- if s.get('save_first') and self.active_view() and self.active_view().is_dirty() and not no_save:
- self.active_view().run_command('save')
- if command[0] == 'git':
- if s.get('git_command'):
- command[0] = s.get('git_command')
- elif GIT:
- command[0] = GIT
- if command[0] == 'git-flow' and s.get('git_flow_command'):
- command[0] = s.get('git_flow_command')
- if not callback:
- callback = self.generic_done
-
- thread = CommandThread(command, callback, **kwargs)
- thread.start()
-
- if show_status:
- message = kwargs.get('status_message', False) or ' '.join(command)
- sublime.status_message(message)
-
- def generic_done(self, result):
- if self.may_change_files and self.active_view() and self.active_view().file_name():
- if self.active_view().is_dirty():
- result = "WARNING: Current view is dirty.\n\n"
- else:
- # just asking the current file to be re-opened doesn't do anything
- print("reverting")
- position = self.active_view().viewport_position()
- self.active_view().run_command('revert')
- do_when(lambda: not self.active_view().is_loading(), lambda: self.active_view().set_viewport_position(position, False))
- # self.active_view().show(position)
-
- view = self.active_view()
- if view and view.settings().get('live_git_annotations'):
- self.view.run_command('git_annotate')
-
- if not result.strip():
- return
- self.panel(result)
-
- def _output_to_view(self, output_file, output, clear=False,
- syntax="Packages/Diff/Diff.tmLanguage", **kwargs):
- output_file.set_syntax_file(syntax)
- args = {
- 'output': output,
- 'clear': clear
- }
- output_file.run_command('git_scratch_output', args)
-
- def scratch(self, output, title=False, position=None, **kwargs):
- scratch_file = self.get_window().new_file()
- if title:
- scratch_file.set_name(title)
- scratch_file.set_scratch(True)
- self._output_to_view(scratch_file, output, **kwargs)
- scratch_file.set_read_only(True)
- if position:
- sublime.set_timeout(lambda: scratch_file.set_viewport_position(position), 0)
- return scratch_file
-
- def panel(self, output, **kwargs):
- if not hasattr(self, 'output_view'):
- self.output_view = self.get_window().get_output_panel("git")
- self.output_view.set_read_only(False)
- self._output_to_view(self.output_view, output, clear=True, **kwargs)
- self.output_view.set_read_only(True)
- self.get_window().run_command("show_panel", {"panel": "output.git"})
-
- def quick_panel(self, *args, **kwargs):
- self.get_window().show_quick_panel(*args, **kwargs)
-
-
-# A base for all git commands that work with the entire repository
-class GitWindowCommand(GitCommand, sublime_plugin.WindowCommand):
- def active_view(self):
- return self.window.active_view()
-
- def _active_file_name(self):
- view = self.active_view()
- if view and view.file_name() and len(view.file_name()) > 0:
- return view.file_name()
-
- @property
- def fallback_encoding(self):
- if self.active_view() and self.active_view().settings().get('fallback_encoding'):
- return self.active_view().settings().get('fallback_encoding').rpartition('(')[2].rpartition(')')[0]
-
- # If there's no active view or the active view is not a file on the
- # filesystem (e.g. a search results view), we can infer the folder
- # that the user intends Git commands to run against when there's only
- # only one.
- def is_enabled(self):
- if self._active_file_name() or len(self.window.folders()) == 1:
- return bool(git_root(self.get_working_dir()))
- return False
-
- def get_file_name(self):
- return ''
-
- def get_relative_file_name(self):
- return ''
-
- # If there is a file in the active view use that file's directory to
- # search for the Git root. Otherwise, use the only folder that is
- # open.
- def get_working_dir(self):
- file_name = self._active_file_name()
- if file_name:
- return os.path.realpath(os.path.dirname(file_name))
- else:
- try: # handle case with no open folder
- return self.window.folders()[0]
- except IndexError:
- return ''
-
- def get_window(self):
- return self.window
-
-
-# A base for all git commands that work with the file in the active view
-class GitTextCommand(GitCommand, sublime_plugin.TextCommand):
- def active_view(self):
- return self.view
-
- def is_enabled(self):
- # First, is this actually a file on the file system?
- if self.view.file_name() and len(self.view.file_name()) > 0:
- return bool(git_root(self.get_working_dir()))
- return False
-
- def get_file_name(self):
- return os.path.basename(self.view.file_name())
-
- def get_relative_file_name(self):
- working_dir = self.get_working_dir()
- file_path = working_dir.replace(git_root(working_dir), '')[1:]
- file_name = os.path.join(file_path, self.get_file_name())
- return file_name.replace('\\', '/') # windows issues
-
- def get_working_dir(self):
- return os.path.realpath(os.path.dirname(self.view.file_name()))
-
- def get_window(self):
- # Fun discovery: if you switch tabs while a command is working,
- # self.view.window() is None. (Admittedly this is a consequence
- # of my deciding to do async command processing... but, hey,
- # got to live with that now.)
- # I did try tracking the window used at the start of the command
- # and using it instead of view.window() later, but that results
- # panels on a non-visible window, which is especially useless in
- # the case of the quick panel.
- # So, this is not necessarily ideal, but it does work.
- return self.view.window() or sublime.active_window()
-
-
-# A few miscellaneous commands
-
-
-class GitCustomCommand(GitWindowCommand):
- may_change_files = True
-
- def run(self):
- self.get_window().show_input_panel("Git command", "",
- self.on_input, None, None)
-
- def on_input(self, command):
- command = str(command) # avoiding unicode
- if command.strip() == "":
- self.panel("No git command provided")
- return
- import shlex
- command_splitted = ['git'] + shlex.split(command)
- print(command_splitted)
- self.run_command(command_splitted)
-
-
-class GitGuiCommand(GitTextCommand):
- def run(self, edit):
- command = ['git', 'gui']
- self.run_command(command)
-
-
-class GitGitkCommand(GitTextCommand):
- def run(self, edit):
- command = ['gitk']
- self.run_command(command)
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/lib/requests/__init__.py b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/lib/requests/__init__.py
deleted file mode 100644
index 6d76ac6..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/lib/requests/__init__.py
+++ /dev/null
@@ -1,77 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# __
-# /__) _ _ _ _ _/ _
-# / ( (- (/ (/ (- _) / _)
-# /
-
-"""
-requests HTTP library
-~~~~~~~~~~~~~~~~~~~~~
-
-Requests is an HTTP library, written in Python, for human beings. Basic GET
-usage:
-
- >>> import requests
- >>> r = requests.get('http://python.org')
- >>> r.status_code
- 200
- >>> 'Python is a programming language' in r.content
- True
-
-... or POST:
-
- >>> payload = dict(key1='value1', key2='value2')
- >>> r = requests.post("http://httpbin.org/post", data=payload)
- >>> print r.text
- {
- ...
- "form": {
- "key2": "value2",
- "key1": "value1"
- },
- ...
- }
-
-The other HTTP methods are supported - see `requests.api`. Full documentation
-is at .
-
-:copyright: (c) 2013 by Kenneth Reitz.
-:license: Apache 2.0, see LICENSE for more details.
-
-"""
-
-__title__ = 'requests'
-__version__ = '1.2.2'
-__build__ = 0x010202
-__author__ = 'Kenneth Reitz'
-__license__ = 'Apache 2.0'
-__copyright__ = 'Copyright 2013 Kenneth Reitz'
-
-# Attempt to enable urllib3's SNI support, if possible
-try:
- from requests.packages.urllib3.contrib import pyopenssl
- pyopenssl.inject_into_urllib3()
-except ImportError:
- pass
-
-from . import utils
-from .models import Request, Response, PreparedRequest
-from .api import request, get, head, post, patch, put, delete, options
-from .sessions import session, Session
-from .status_codes import codes
-from .exceptions import (
- RequestException, Timeout, URLRequired,
- TooManyRedirects, HTTPError, ConnectionError
-)
-
-# Set default logging handler to avoid "No handler found" warnings.
-import logging
-try: # Python 2.7+
- from logging import NullHandler
-except ImportError:
- class NullHandler(logging.Handler):
- def emit(self, record):
- pass
-
-logging.getLogger(__name__).addHandler(NullHandler())
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/lib/requests/adapters.py b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/lib/requests/adapters.py
deleted file mode 100644
index 98b7317..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/lib/requests/adapters.py
+++ /dev/null
@@ -1,342 +0,0 @@
-# -*- coding: utf-8 -*-
-
-"""
-requests.adapters
-~~~~~~~~~~~~~~~~~
-
-This module contains the transport adapters that Requests uses to define
-and maintain connections.
-"""
-
-import socket
-
-from .models import Response
-from .packages.urllib3.poolmanager import PoolManager, ProxyManager
-from .packages.urllib3.response import HTTPResponse
-from .compat import urlparse, basestring, urldefrag, unquote
-from .utils import (DEFAULT_CA_BUNDLE_PATH, get_encoding_from_headers,
- prepend_scheme_if_needed, get_auth_from_url)
-from .structures import CaseInsensitiveDict
-from .packages.urllib3.exceptions import MaxRetryError
-from .packages.urllib3.exceptions import TimeoutError
-from .packages.urllib3.exceptions import SSLError as _SSLError
-from .packages.urllib3.exceptions import HTTPError as _HTTPError
-from .cookies import extract_cookies_to_jar
-from .exceptions import ConnectionError, Timeout, SSLError
-from .auth import _basic_auth_str
-
-DEFAULT_POOLBLOCK = False
-DEFAULT_POOLSIZE = 10
-DEFAULT_RETRIES = 0
-
-
-class BaseAdapter(object):
- """The Base Transport Adapter"""
-
- def __init__(self):
- super(BaseAdapter, self).__init__()
-
- def send(self):
- raise NotImplementedError
-
- def close(self):
- raise NotImplementedError
-
-
-class HTTPAdapter(BaseAdapter):
- """The built-in HTTP Adapter for urllib3.
-
- Provides a general-case interface for Requests sessions to contact HTTP and
- HTTPS urls by implementing the Transport Adapter interface. This class will
- usually be created by the :class:`Session ` class under the
- covers.
-
- :param pool_connections: The number of urllib3 connection pools to cache.
- :param pool_maxsize: The maximum number of connections to save in the pool.
- :param max_retries: The maximum number of retries each connection should attempt.
- :param pool_block: Whether the connection pool should block for connections.
-
- Usage::
-
- >>> import requests
- >>> s = requests.Session()
- >>> a = requests.adapters.HTTPAdapter()
- >>> s.mount('http://', a)
- """
- __attrs__ = ['max_retries', 'config', '_pool_connections', '_pool_maxsize',
- '_pool_block']
-
- def __init__(self, pool_connections=DEFAULT_POOLSIZE,
- pool_maxsize=DEFAULT_POOLSIZE, max_retries=DEFAULT_RETRIES,
- pool_block=DEFAULT_POOLBLOCK):
- self.max_retries = max_retries
- self.config = {}
-
- super(HTTPAdapter, self).__init__()
-
- self._pool_connections = pool_connections
- self._pool_maxsize = pool_maxsize
- self._pool_block = pool_block
-
- self.init_poolmanager(pool_connections, pool_maxsize, block=pool_block)
-
- def __getstate__(self):
- return dict((attr, getattr(self, attr, None)) for attr in
- self.__attrs__)
-
- def __setstate__(self, state):
- for attr, value in state.items():
- setattr(self, attr, value)
-
- self.init_poolmanager(self._pool_connections, self._pool_maxsize,
- block=self._pool_block)
-
- def init_poolmanager(self, connections, maxsize, block=DEFAULT_POOLBLOCK):
- """Initializes a urllib3 PoolManager. This method should not be called
- from user code, and is only exposed for use when subclassing the
- :class:`HTTPAdapter `.
-
- :param connections: The number of urllib3 connection pools to cache.
- :param maxsize: The maximum number of connections to save in the pool.
- :param block: Block when no free connections are available.
- """
- # save these values for pickling
- self._pool_connections = connections
- self._pool_maxsize = maxsize
- self._pool_block = block
-
- self.poolmanager = PoolManager(num_pools=connections, maxsize=maxsize,
- block=block)
-
- def cert_verify(self, conn, url, verify, cert):
- """Verify a SSL certificate. This method should not be called from user
- code, and is only exposed for use when subclassing the
- :class:`HTTPAdapter `.
-
- :param conn: The urllib3 connection object associated with the cert.
- :param url: The requested URL.
- :param verify: Whether we should actually verify the certificate.
- :param cert: The SSL certificate to verify.
- """
- if url.startswith('https') and verify:
-
- cert_loc = None
-
- # Allow self-specified cert location.
- if verify is not True:
- cert_loc = verify
-
- if not cert_loc:
- cert_loc = DEFAULT_CA_BUNDLE_PATH
-
- if not cert_loc:
- raise Exception("Could not find a suitable SSL CA certificate bundle.")
-
- conn.cert_reqs = 'CERT_REQUIRED'
- conn.ca_certs = cert_loc
- else:
- conn.cert_reqs = 'CERT_NONE'
- conn.ca_certs = None
-
- if cert:
- if not isinstance(cert, basestring):
- conn.cert_file = cert[0]
- conn.key_file = cert[1]
- else:
- conn.cert_file = cert
-
- def build_response(self, req, resp):
- """Builds a :class:`Response ` object from a urllib3
- response. This should not be called from user code, and is only exposed
- for use when subclassing the
- :class:`HTTPAdapter `
-
- :param req: The :class:`PreparedRequest ` used to generate the response.
- :param resp: The urllib3 response object.
- """
- response = Response()
-
- # Fallback to None if there's no status_code, for whatever reason.
- response.status_code = getattr(resp, 'status', None)
-
- # Make headers case-insensitive.
- response.headers = CaseInsensitiveDict(getattr(resp, 'headers', {}))
-
- # Set encoding.
- response.encoding = get_encoding_from_headers(response.headers)
- response.raw = resp
- response.reason = response.raw.reason
-
- if isinstance(req.url, bytes):
- response.url = req.url.decode('utf-8')
- else:
- response.url = req.url
-
- # Add new cookies from the server.
- extract_cookies_to_jar(response.cookies, req, resp)
-
- # Give the Response some context.
- response.request = req
- response.connection = self
-
- return response
-
- def get_connection(self, url, proxies=None):
- """Returns a urllib3 connection for the given URL. This should not be
- called from user code, and is only exposed for use when subclassing the
- :class:`HTTPAdapter `.
-
- :param url: The URL to connect to.
- :param proxies: (optional) A Requests-style dictionary of proxies used on this request.
- """
- proxies = proxies or {}
- proxy = proxies.get(urlparse(url).scheme)
-
- if proxy:
- proxy = prepend_scheme_if_needed(proxy, urlparse(url).scheme)
- conn = ProxyManager(self.poolmanager.connection_from_url(proxy))
- else:
- conn = self.poolmanager.connection_from_url(url)
-
- return conn
-
- def close(self):
- """Disposes of any internal state.
-
- Currently, this just closes the PoolManager, which closes pooled
- connections.
- """
- self.poolmanager.clear()
-
- def request_url(self, request, proxies):
- """Obtain the url to use when making the final request.
-
- If the message is being sent through a proxy, the full URL has to be
- used. Otherwise, we should only use the path portion of the URL.
-
- This shoudl not be called from user code, and is only exposed for use
- when subclassing the
- :class:`HTTPAdapter `.
-
- :param request: The :class:`PreparedRequest ` being sent.
- :param proxies: A dictionary of schemes to proxy URLs.
- """
- proxies = proxies or {}
- proxy = proxies.get(urlparse(request.url).scheme)
-
- if proxy:
- url, _ = urldefrag(request.url)
- else:
- url = request.path_url
-
- return url
-
- def add_headers(self, request, **kwargs):
- """Add any headers needed by the connection. Currently this adds a
- Proxy-Authorization header.
-
- This should not be called from user code, and is only exposed for use
- when subclassing the
- :class:`HTTPAdapter `.
-
- :param request: The :class:`PreparedRequest ` to add headers to.
- :param kwargs: The keyword arguments from the call to send().
- """
- proxies = kwargs.get('proxies', {})
-
- if proxies is None:
- proxies = {}
-
- proxy = proxies.get(urlparse(request.url).scheme)
- username, password = get_auth_from_url(proxy)
-
- if username and password:
- # Proxy auth usernames and passwords will be urlencoded, we need
- # to decode them.
- username = unquote(username)
- password = unquote(password)
- request.headers['Proxy-Authorization'] = _basic_auth_str(username,
- password)
-
- def send(self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None):
- """Sends PreparedRequest object. Returns Response object.
-
- :param request: The :class:`PreparedRequest ` being sent.
- :param stream: (optional) Whether to stream the request content.
- :param timeout: (optional) The timeout on the request.
- :param verify: (optional) Whether to verify SSL certificates.
- :param vert: (optional) Any user-provided SSL certificate to be trusted.
- :param proxies: (optional) The proxies dictionary to apply to the request.
- """
-
- conn = self.get_connection(request.url, proxies)
-
- self.cert_verify(conn, request.url, verify, cert)
- url = self.request_url(request, proxies)
- self.add_headers(request, proxies=proxies)
-
- chunked = not (request.body is None or 'Content-Length' in request.headers)
-
- try:
- if not chunked:
- resp = conn.urlopen(
- method=request.method,
- url=url,
- body=request.body,
- headers=request.headers,
- redirect=False,
- assert_same_host=False,
- preload_content=False,
- decode_content=False,
- retries=self.max_retries,
- timeout=timeout
- )
-
- # Send the request.
- else:
- if hasattr(conn, 'proxy_pool'):
- conn = conn.proxy_pool
-
- low_conn = conn._get_conn(timeout=timeout)
- low_conn.putrequest(request.method, url, skip_accept_encoding=True)
-
- for header, value in request.headers.items():
- low_conn.putheader(header, value)
-
- low_conn.endheaders()
-
- for i in request.body:
- low_conn.send(hex(len(i))[2:].encode('utf-8'))
- low_conn.send(b'\r\n')
- low_conn.send(i)
- low_conn.send(b'\r\n')
- low_conn.send(b'0\r\n\r\n')
-
- r = low_conn.getresponse()
- resp = HTTPResponse.from_httplib(r,
- pool=conn,
- connection=low_conn,
- preload_content=False,
- decode_content=False
- )
-
- except socket.error as sockerr:
- raise ConnectionError(sockerr)
-
- except MaxRetryError as e:
- raise ConnectionError(e)
-
- except (_SSLError, _HTTPError) as e:
- if isinstance(e, _SSLError):
- raise SSLError(e)
- elif isinstance(e, TimeoutError):
- raise Timeout(e)
- else:
- raise
-
- r = self.build_response(request, resp)
-
- if not stream:
- r.content
-
- return r
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/lib/requests/api.py b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/lib/requests/api.py
deleted file mode 100644
index baf43dd..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/lib/requests/api.py
+++ /dev/null
@@ -1,120 +0,0 @@
-# -*- coding: utf-8 -*-
-
-"""
-requests.api
-~~~~~~~~~~~~
-
-This module implements the Requests API.
-
-:copyright: (c) 2012 by Kenneth Reitz.
-:license: Apache2, see LICENSE for more details.
-
-"""
-
-from . import sessions
-
-
-def request(method, url, **kwargs):
- """Constructs and sends a :class:`Request `.
- Returns :class:`Response ` object.
-
- :param method: method for the new :class:`Request` object.
- :param url: URL for the new :class:`Request` object.
- :param params: (optional) Dictionary or bytes to be sent in the query string for the :class:`Request`.
- :param data: (optional) Dictionary, bytes, or file-like object to send in the body of the :class:`Request`.
- :param headers: (optional) Dictionary of HTTP Headers to send with the :class:`Request`.
- :param cookies: (optional) Dict or CookieJar object to send with the :class:`Request`.
- :param files: (optional) Dictionary of 'name': file-like-objects (or {'name': ('filename', fileobj)}) for multipart encoding upload.
- :param auth: (optional) Auth tuple to enable Basic/Digest/Custom HTTP Auth.
- :param timeout: (optional) Float describing the timeout of the request.
- :param allow_redirects: (optional) Boolean. Set to True if POST/PUT/DELETE redirect following is allowed.
- :param proxies: (optional) Dictionary mapping protocol to the URL of the proxy.
- :param verify: (optional) if ``True``, the SSL cert will be verified. A CA_BUNDLE path can also be provided.
- :param stream: (optional) if ``False``, the response content will be immediately downloaded.
- :param cert: (optional) if String, path to ssl client cert file (.pem). If Tuple, ('cert', 'key') pair.
-
- Usage::
-
- >>> import requests
- >>> req = requests.request('GET', 'http://httpbin.org/get')
-
- """
-
- session = sessions.Session()
- return session.request(method=method, url=url, **kwargs)
-
-
-def get(url, **kwargs):
- """Sends a GET request. Returns :class:`Response` object.
-
- :param url: URL for the new :class:`Request` object.
- :param \*\*kwargs: Optional arguments that ``request`` takes.
- """
-
- kwargs.setdefault('allow_redirects', True)
- return request('get', url, **kwargs)
-
-
-def options(url, **kwargs):
- """Sends a OPTIONS request. Returns :class:`Response` object.
-
- :param url: URL for the new :class:`Request` object.
- :param \*\*kwargs: Optional arguments that ``request`` takes.
- """
-
- kwargs.setdefault('allow_redirects', True)
- return request('options', url, **kwargs)
-
-
-def head(url, **kwargs):
- """Sends a HEAD request. Returns :class:`Response` object.
-
- :param url: URL for the new :class:`Request` object.
- :param \*\*kwargs: Optional arguments that ``request`` takes.
- """
-
- kwargs.setdefault('allow_redirects', False)
- return request('head', url, **kwargs)
-
-
-def post(url, data=None, **kwargs):
- """Sends a POST request. Returns :class:`Response` object.
-
- :param url: URL for the new :class:`Request` object.
- :param data: (optional) Dictionary, bytes, or file-like object to send in the body of the :class:`Request`.
- :param \*\*kwargs: Optional arguments that ``request`` takes.
- """
-
- return request('post', url, data=data, **kwargs)
-
-
-def put(url, data=None, **kwargs):
- """Sends a PUT request. Returns :class:`Response` object.
-
- :param url: URL for the new :class:`Request` object.
- :param data: (optional) Dictionary, bytes, or file-like object to send in the body of the :class:`Request`.
- :param \*\*kwargs: Optional arguments that ``request`` takes.
- """
-
- return request('put', url, data=data, **kwargs)
-
-
-def patch(url, data=None, **kwargs):
- """Sends a PATCH request. Returns :class:`Response` object.
-
- :param url: URL for the new :class:`Request` object.
- :param data: (optional) Dictionary, bytes, or file-like object to send in the body of the :class:`Request`.
- :param \*\*kwargs: Optional arguments that ``request`` takes.
- """
-
- return request('patch', url, data=data, **kwargs)
-
-
-def delete(url, **kwargs):
- """Sends a DELETE request. Returns :class:`Response` object.
-
- :param url: URL for the new :class:`Request` object.
- :param \*\*kwargs: Optional arguments that ``request`` takes.
- """
-
- return request('delete', url, **kwargs)
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/lib/requests/auth.py b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/lib/requests/auth.py
deleted file mode 100644
index fab05cf..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/lib/requests/auth.py
+++ /dev/null
@@ -1,177 +0,0 @@
-# -*- coding: utf-8 -*-
-
-"""
-requests.auth
-~~~~~~~~~~~~~
-
-This module contains the authentication handlers for Requests.
-"""
-
-import os
-import re
-import time
-import hashlib
-import logging
-
-from base64 import b64encode
-
-from .compat import urlparse, str
-from .utils import parse_dict_header
-
-
-log = logging.getLogger(__name__)
-
-CONTENT_TYPE_FORM_URLENCODED = 'application/x-www-form-urlencoded'
-CONTENT_TYPE_MULTI_PART = 'multipart/form-data'
-
-
-def _basic_auth_str(username, password):
- """Returns a Basic Auth string."""
-
- return 'Basic ' + b64encode(('%s:%s' % (username, password)).encode('latin1')).strip().decode('latin1')
-
-
-class AuthBase(object):
- """Base class that all auth implementations derive from"""
-
- def __call__(self, r):
- raise NotImplementedError('Auth hooks must be callable.')
-
-
-class HTTPBasicAuth(AuthBase):
- """Attaches HTTP Basic Authentication to the given Request object."""
- def __init__(self, username, password):
- self.username = username
- self.password = password
-
- def __call__(self, r):
- r.headers['Authorization'] = _basic_auth_str(self.username, self.password)
- return r
-
-
-class HTTPProxyAuth(HTTPBasicAuth):
- """Attaches HTTP Proxy Authentication to a given Request object."""
- def __call__(self, r):
- r.headers['Proxy-Authorization'] = _basic_auth_str(self.username, self.password)
- return r
-
-
-class HTTPDigestAuth(AuthBase):
- """Attaches HTTP Digest Authentication to the given Request object."""
- def __init__(self, username, password):
- self.username = username
- self.password = password
- self.last_nonce = ''
- self.nonce_count = 0
- self.chal = {}
-
- def build_digest_header(self, method, url):
-
- realm = self.chal['realm']
- nonce = self.chal['nonce']
- qop = self.chal.get('qop')
- algorithm = self.chal.get('algorithm')
- opaque = self.chal.get('opaque')
-
- if algorithm is None:
- _algorithm = 'MD5'
- else:
- _algorithm = algorithm.upper()
- # lambdas assume digest modules are imported at the top level
- if _algorithm == 'MD5':
- def md5_utf8(x):
- if isinstance(x, str):
- x = x.encode('utf-8')
- return hashlib.md5(x).hexdigest()
- hash_utf8 = md5_utf8
- elif _algorithm == 'SHA':
- def sha_utf8(x):
- if isinstance(x, str):
- x = x.encode('utf-8')
- return hashlib.sha1(x).hexdigest()
- hash_utf8 = sha_utf8
- # XXX MD5-sess
- KD = lambda s, d: hash_utf8("%s:%s" % (s, d))
-
- if hash_utf8 is None:
- return None
-
- # XXX not implemented yet
- entdig = None
- p_parsed = urlparse(url)
- path = p_parsed.path
- if p_parsed.query:
- path += '?' + p_parsed.query
-
- A1 = '%s:%s:%s' % (self.username, realm, self.password)
- A2 = '%s:%s' % (method, path)
-
- if qop == 'auth':
- if nonce == self.last_nonce:
- self.nonce_count += 1
- else:
- self.nonce_count = 1
-
- ncvalue = '%08x' % self.nonce_count
- s = str(self.nonce_count).encode('utf-8')
- s += nonce.encode('utf-8')
- s += time.ctime().encode('utf-8')
- s += os.urandom(8)
-
- cnonce = (hashlib.sha1(s).hexdigest()[:16])
- noncebit = "%s:%s:%s:%s:%s" % (nonce, ncvalue, cnonce, qop, hash_utf8(A2))
- respdig = KD(hash_utf8(A1), noncebit)
- elif qop is None:
- respdig = KD(hash_utf8(A1), "%s:%s" % (nonce, hash_utf8(A2)))
- else:
- # XXX handle auth-int.
- return None
-
- self.last_nonce = nonce
-
- # XXX should the partial digests be encoded too?
- base = 'username="%s", realm="%s", nonce="%s", uri="%s", ' \
- 'response="%s"' % (self.username, realm, nonce, path, respdig)
- if opaque:
- base += ', opaque="%s"' % opaque
- if algorithm:
- base += ', algorithm="%s"' % algorithm
- if entdig:
- base += ', digest="%s"' % entdig
- if qop:
- base += ', qop=auth, nc=%s, cnonce="%s"' % (ncvalue, cnonce)
-
- return 'Digest %s' % (base)
-
- def handle_401(self, r, **kwargs):
- """Takes the given response and tries digest-auth, if needed."""
-
- num_401_calls = getattr(self, 'num_401_calls', 1)
- s_auth = r.headers.get('www-authenticate', '')
-
- if 'digest' in s_auth.lower() and num_401_calls < 2:
-
- setattr(self, 'num_401_calls', num_401_calls + 1)
- pat = re.compile(r'digest ', flags=re.IGNORECASE)
- self.chal = parse_dict_header(pat.sub('', s_auth, count=1))
-
- # Consume content and release the original connection
- # to allow our new request to reuse the same one.
- r.content
- r.raw.release_conn()
-
- r.request.headers['Authorization'] = self.build_digest_header(r.request.method, r.request.url)
- _r = r.connection.send(r.request, **kwargs)
- _r.history.append(r)
-
- return _r
-
- setattr(self, 'num_401_calls', 1)
- return r
-
- def __call__(self, r):
- # If we have a saved nonce, skip the 401
- if self.last_nonce:
- r.headers['Authorization'] = self.build_digest_header(r.method, r.url)
- r.register_hook('response', self.handle_401)
- return r
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/lib/requests/cacert.pem b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/lib/requests/cacert.pem
deleted file mode 100644
index 504fdcc..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/lib/requests/cacert.pem
+++ /dev/null
@@ -1,3290 +0,0 @@
-##
-## ca-bundle.crt -- Bundle of CA Root Certificates
-##
-## Certificate data from Mozilla as of: Wed Jan 18 00:04:16 2012
-##
-## This is a bundle of X.509 certificates of public Certificate Authorities
-## (CA). These were automatically extracted from Mozilla's root certificates
-## file (certdata.txt). This file can be found in the mozilla source tree:
-## http://mxr.mozilla.org/mozilla/source/security/nss/lib/ckfw/builtins/certdata.txt?raw=1
-##
-## It contains the certificates in PEM format and therefore
-## can be directly used with curl / libcurl / php_curl, or with
-## an Apache+mod_ssl webserver for SSL client authentication.
-## Just configure this file as the SSLCACertificateFile.
-##
-
-# ***** BEGIN LICENSE BLOCK *****
-# Version: MPL 1.1/GPL 2.0/LGPL 2.1
-#
-# The contents of this file are subject to the Mozilla Public License Version
-# 1.1 (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-# http://www.mozilla.org/MPL/
-#
-# Software distributed under the License is distributed on an "AS IS" basis,
-# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
-# for the specific language governing rights and limitations under the
-# License.
-#
-# The Original Code is the Netscape security libraries.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 1994-2000
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-#
-# Alternatively, the contents of this file may be used under the terms of
-# either the GNU General Public License Version 2 or later (the "GPL"), or
-# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
-# in which case the provisions of the GPL or the LGPL are applicable instead
-# of those above. If you wish to allow use of your version of this file only
-# under the terms of either the GPL or the LGPL, and not to allow others to
-# use your version of this file under the terms of the MPL, indicate your
-# decision by deleting the provisions above and replace them with the notice
-# and other provisions required by the GPL or the LGPL. If you do not delete
-# the provisions above, a recipient may use your version of this file under
-# the terms of any one of the MPL, the GPL or the LGPL.
-#
-# ***** END LICENSE BLOCK *****
-# @(#) $RCSfile: certdata.txt,v $ $Revision: 1.81 $ $Date: 2012/01/17 22:02:37 $
-
-GTE CyberTrust Global Root
-==========================
------BEGIN CERTIFICATE-----
-MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYDVQQKEw9HVEUg
-Q29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNvbHV0aW9ucywgSW5jLjEjMCEG
-A1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJvb3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEz
-MjM1OTAwWjB1MQswCQYDVQQGEwJVUzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQL
-Ex5HVEUgQ3liZXJUcnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0
-IEdsb2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrHiM3dFw4u
-sJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTSr41tiGeA5u2ylc9yMcql
-HHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X404Wqk2kmhXBIgD8SFcd5tB8FLztimQID
-AQABMA0GCSqGSIb3DQEBBAUAA4GBAG3rGwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMW
-M4ETCJ57NE7fQMh017l93PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OF
-NMQkpw0PlZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/
------END CERTIFICATE-----
-
-Thawte Server CA
-================
------BEGIN CERTIFICATE-----
-MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT
-DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs
-dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UE
-AxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5j
-b20wHhcNOTYwODAxMDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNV
-BAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29u
-c3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcG
-A1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0
-ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl
-/Kj0R1HahbUgdJSGHg91yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg7
-1CcEJRCXL+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGjEzAR
-MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG7oWDTSEwjsrZqG9J
-GubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6eQNuozDJ0uW8NxuOzRAvZim+aKZuZ
-GCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZqdq5snUb9kLy78fyGPmJvKP/iiMucEc=
------END CERTIFICATE-----
-
-Thawte Premium Server CA
-========================
------BEGIN CERTIFICATE-----
-MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkExFTATBgNVBAgT
-DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs
-dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UE
-AxMYVGhhd3RlIFByZW1pdW0gU2VydmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZl
-ckB0aGF3dGUuY29tMB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYT
-AlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMU
-VGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2
-aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNlcnZlciBDQTEoMCYGCSqGSIb3DQEJARYZ
-cHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2
-aovXwlue2oFBYo847kkEVdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIh
-Udib0GfQug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMRuHM/
-qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQFAAOBgQAm
-SCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUIhfzJATj/Tb7yFkJD57taRvvBxhEf
-8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JMpAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7t
-UCemDaYj+bvLpgcUQg==
------END CERTIFICATE-----
-
-Equifax Secure CA
-=================
------BEGIN CERTIFICATE-----
-MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEQMA4GA1UE
-ChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5
-MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoT
-B0VxdWlmYXgxLTArBgNVBAsTJEVxdWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCB
-nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPR
-fM6fBeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+AcJkVV5MW
-8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kCAwEAAaOCAQkwggEFMHAG
-A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UE
-CxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoG
-A1UdEAQTMBGBDzIwMTgwODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvS
-spXXR9gjIBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQFMAMB
-Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAFjOKer89961
-zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y7qj/WsjTVbJmcVfewCHrPSqnI0kB
-BIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee95
-70+sB3c4
------END CERTIFICATE-----
-
-Digital Signature Trust Co. Global CA 1
-=======================================
------BEGIN CERTIFICATE-----
-MIIDKTCCApKgAwIBAgIENnAVljANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJVUzEkMCIGA1UE
-ChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQLEwhEU1RDQSBFMTAeFw05ODEy
-MTAxODEwMjNaFw0xODEyMTAxODQwMjNaMEYxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFs
-IFNpZ25hdHVyZSBUcnVzdCBDby4xETAPBgNVBAsTCERTVENBIEUxMIGdMA0GCSqGSIb3DQEBAQUA
-A4GLADCBhwKBgQCgbIGpzzQeJN3+hijM3oMv+V7UQtLodGBmE5gGHKlREmlvMVW5SXIACH7TpWJE
-NySZj9mDSI+ZbZUTu0M7LklOiDfBu1h//uG9+LthzfNHwJmm8fOR6Hh8AMthyUQncWlVSn5JTe2i
-o74CTADKAqjuAQIxZA9SLRN0dja1erQtcQIBA6OCASQwggEgMBEGCWCGSAGG+EIBAQQEAwIABzBo
-BgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0
-dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgRTExDTALBgNVBAMTBENSTDEwKwYDVR0QBCQw
-IoAPMTk5ODEyMTAxODEwMjNagQ8yMDE4MTIxMDE4MTAyM1owCwYDVR0PBAQDAgEGMB8GA1UdIwQY
-MBaAFGp5fpFpRhgTCgJ3pVlbYJglDqL4MB0GA1UdDgQWBBRqeX6RaUYYEwoCd6VZW2CYJQ6i+DAM
-BgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4GB
-ACIS2Hod3IEGtgllsofIH160L+nEHvI8wbsEkBFKg05+k7lNQseSJqBcNJo4cvj9axY+IO6CizEq
-kzaFI4iKPANo08kJD038bKTaKHKTDomAsH3+gG9lbRgzl4vCa4nuYD3Im+9/KzJic5PLPON74nZ4
-RbyhkwS7hp86W0N6w4pl
------END CERTIFICATE-----
-
-Digital Signature Trust Co. Global CA 3
-=======================================
------BEGIN CERTIFICATE-----
-MIIDKTCCApKgAwIBAgIENm7TzjANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJVUzEkMCIGA1UE
-ChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQLEwhEU1RDQSBFMjAeFw05ODEy
-MDkxOTE3MjZaFw0xODEyMDkxOTQ3MjZaMEYxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFs
-IFNpZ25hdHVyZSBUcnVzdCBDby4xETAPBgNVBAsTCERTVENBIEUyMIGdMA0GCSqGSIb3DQEBAQUA
-A4GLADCBhwKBgQC/k48Xku8zExjrEH9OFr//Bo8qhbxe+SSmJIi2A7fBw18DW9Fvrn5C6mYjuGOD
-VvsoLeE4i7TuqAHhzhy2iCoiRoX7n6dwqUcUP87eZfCocfdPJmyMvMa1795JJ/9IKn3oTQPMx7JS
-xhcxEzu1TdvIxPbDDyQq2gyd55FbgM2UnQIBA6OCASQwggEgMBEGCWCGSAGG+EIBAQQEAwIABzBo
-BgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0
-dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgRTIxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQw
-IoAPMTk5ODEyMDkxOTE3MjZagQ8yMDE4MTIwOTE5MTcyNlowCwYDVR0PBAQDAgEGMB8GA1UdIwQY
-MBaAFB6CTShlgDzJQW6sNS5ay97u+DlbMB0GA1UdDgQWBBQegk0oZYA8yUFurDUuWsve7vg5WzAM
-BgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4GB
-AEeNg61i8tuwnkUiBbmi1gMOOHLnnvx75pO2mqWilMg0HZHRxdf0CiUPPXiBng+xZ8SQTGPdXqfi
-up/1902lMXucKS1M/mQ+7LZT/uqb7YLbdHVLB3luHtgZg3Pe9T7Qtd7nS2h9Qy4qIOF+oHhEngj1
-mPnHfxsb1gYgAlihw6ID
------END CERTIFICATE-----
-
-Verisign Class 3 Public Primary Certification Authority
-=======================================================
------BEGIN CERTIFICATE-----
-MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkGA1UEBhMCVVMx
-FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmltYXJ5
-IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVow
-XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAz
-IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA
-A4GNADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhEBarsAx94
-f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/isI19wKTakyYbnsZogy1Ol
-hec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0GCSqGSIb3DQEBAgUAA4GBALtMEivPLCYA
-TxQT3ab7/AoRhIzzKBxnki98tsX63/Dolbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59Ah
-WM1pF+NEHJwZRDmJXNycAA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2Omuf
-Tqj/ZA1k
------END CERTIFICATE-----
-
-Verisign Class 3 Public Primary Certification Authority - G2
-============================================================
------BEGIN CERTIFICATE-----
-MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJBgNVBAYTAlVT
-MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFy
-eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
-biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
-dCBOZXR3b3JrMB4XDTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVT
-MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFy
-eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
-biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
-dCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCO
-FoUgRm1HP9SFIIThbbP4pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71
-lSk8UOg013gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwIDAQAB
-MA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSkU01UbSuvDV1Ai2TT
-1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7iF6YM40AIOw7n60RzKprxaZLvcRTD
-Oaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpYoJ2daZH9
------END CERTIFICATE-----
-
-GlobalSign Root CA
-==================
------BEGIN CERTIFICATE-----
-MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkGA1UEBhMCQkUx
-GTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jvb3QgQ0ExGzAZBgNVBAMTEkds
-b2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAwMDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNV
-BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYD
-VQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDa
-DuaZjc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavpxy0Sy6sc
-THAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp1Wrjsok6Vjk4bwY8iGlb
-Kk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdGsnUOhugZitVtbNV4FpWi6cgKOOvyJBNP
-c1STE4U6G7weNLWLBYy5d4ux2x8gkasJU26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrX
-gzT/LCrBbBlDSgeF59N89iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV
-HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0BAQUF
-AAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOzyj1hTdNGCbM+w6Dj
-Y1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE38NflNUVyRRBnMRddWQVDf9VMOyG
-j/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymPAbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhH
-hm4qxFYxldBniYUr+WymXUadDKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveC
-X4XSQRjbgbMEHMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
------END CERTIFICATE-----
-
-GlobalSign Root CA - R2
-=======================
------BEGIN CERTIFICATE-----
-MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4GA1UECxMXR2xv
-YmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh
-bFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT
-aWduIFJvb3QgQ0EgLSBSMjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln
-bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6
-ErPLv4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8eoLrvozp
-s6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklqtTleiDTsvHgMCJiEbKjN
-S7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzdC9XZzPnqJworc5HGnRusyMvo4KD0L5CL
-TfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pazq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6C
-ygPCm48CAwEAAaOBnDCBmTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E
-FgQUm+IHV2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9i
-YWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG3lm0mi3f3BmGLjAN
-BgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4GsJ0/WwbgcQ3izDJr86iw8bmEbTUsp
-9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu
-01yiPqFbQfXf5WRDLenVOavSot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG7
-9G+dwfCMNYxdAfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7
-TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==
------END CERTIFICATE-----
-
-ValiCert Class 1 VA
-===================
------BEGIN CERTIFICATE-----
-MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp
-b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
-YXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh
-bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNTIy
-MjM0OFoXDTE5MDYyNTIyMjM0OFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0
-d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEg
-UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0
-LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA
-A4GNADCBiQKBgQDYWYJ6ibiWuqYvaG9YLqdUHAZu9OqNSLwxlBfw8068srg1knaw0KWlAdcAAxIi
-GQj4/xEjm84H9b9pGib+TunRf50sQB1ZaG6m+FiwnRqP0z/x3BkGgagO4DrdyFNFCQbmD3DD+kCm
-DuJWBQ8YTfwggtFzVXSNdnKgHZ0dwN0/cQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFBoPUn0LBwG
-lN+VYH+Wexf+T3GtZMjdd9LvWVXoP+iOBSoh8gfStadS/pyxtuJbdxdA6nLWI8sogTLDAHkY7FkX
-icnGah5xyf23dKUlRWnFSKsZ4UWKJWsZ7uW7EvV/96aNUcPwnXS3qT6gpf+2SQMT2iLM7XGCK5nP
-Orf1LXLI
------END CERTIFICATE-----
-
-ValiCert Class 2 VA
-===================
------BEGIN CERTIFICATE-----
-MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp
-b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
-YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh
-bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAw
-MTk1NFoXDTE5MDYyNjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0
-d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIg
-UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0
-LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA
-A4GNADCBiQKBgQDOOnHK5avIWZJV16vYdA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVC
-CSRrCl6zfN1SLUzm1NZ9WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7Rf
-ZHM047QSv4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9vUJSZ
-SWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTuIYEZoDJJKPTEjlbV
-UjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwCW/POuZ6lcg5Ktz885hZo+L7tdEy8
-W9ViH0Pd
------END CERTIFICATE-----
-
-RSA Root Certificate 1
-======================
------BEGIN CERTIFICATE-----
-MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp
-b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
-YXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh
-bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAw
-MjIzM1oXDTE5MDYyNjAwMjIzM1owgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0
-d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMg
-UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0
-LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA
-A4GNADCBiQKBgQDjmFGWHOjVsQaBalfDcnWTq8+epvzzFlLWLU2fNUSoLgRNB0mKOCn1dzfnt6td
-3zZxFJmP3MKS8edgkpfs2Ejcv8ECIMYkpChMMFp2bbFc893enhBxoYjHW5tBbcqwuI4V7q0zK89H
-BFx1cQqYJJgpp0lZpd34t0NiYfPT4tBVPwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFa7AliEZwgs
-3x/be0kz9dNnnfS0ChCzycUs4pJqcXgn8nCDQtM+z6lU9PHYkhaM0QTLS6vJn0WuPIqpsHEzXcjF
-V9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/APhmcGcwTTYJBtYze4D1gCCAPRX5r
-on+jjBXu
------END CERTIFICATE-----
-
-Verisign Class 3 Public Primary Certification Authority - G3
-============================================================
------BEGIN CERTIFICATE-----
-MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
-UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
-cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
-IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
-dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
-CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
-dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
-cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkg
-Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
-ggEBAMu6nFL8eB8aHm8bN3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1
-EUGO+i2tKmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGukxUc
-cLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBmCC+Vk7+qRy+oRpfw
-EuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJXwzw3sJ2zq/3avL6QaaiMxTJ5Xpj
-055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWuimi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
-ERSWwauSCPc/L8my/uRan2Te2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5f
-j267Cz3qWhMeDGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC
-/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565pF4ErWjfJXir0
-xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGtTxzhT5yvDwyd93gN2PQ1VoDa
-t20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ==
------END CERTIFICATE-----
-
-Verisign Class 4 Public Primary Certification Authority - G3
-============================================================
------BEGIN CERTIFICATE-----
-MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
-UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
-cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
-IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
-dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
-CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
-dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
-cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkg
-Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
-ggEBAK3LpRFpxlmr8Y+1GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaS
-tBO3IFsJ+mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0GbdU6LM
-8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLmNxdLMEYH5IBtptiW
-Lugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XYufTsgsbSPZUd5cBPhMnZo0QoBmrX
-Razwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
-j/ola09b5KROJ1WrIhVZPMq1CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXtt
-mhwwjIDLk5Mqg6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm
-fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c2NU8Qh0XwRJd
-RTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/bLvSHgCwIe34QWKCudiyxLtG
-UPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg==
------END CERTIFICATE-----
-
-Entrust.net Secure Server CA
-============================
------BEGIN CERTIFICATE-----
-MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMCVVMxFDASBgNV
-BAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5uZXQvQ1BTIGluY29ycC4gYnkg
-cmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRl
-ZDE6MDgGA1UEAxMxRW50cnVzdC5uZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhv
-cml0eTAeFw05OTA1MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIG
-A1UEChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBi
-eSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1p
-dGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0
-aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQ
-aO2f55M28Qpku0f1BBc/I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5
-gXpa0zf3wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OCAdcw
-ggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHboIHYpIHVMIHSMQsw
-CQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5l
-dC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF
-bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENl
-cnRpZmljYXRpb24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu
-dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0MFqBDzIwMTkw
-NTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8BdiE1U9s/8KAGv7UISX8+1i0Bow
-HQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAaMAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EA
-BAwwChsEVjQuMAMCBJAwDQYJKoZIhvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyN
-Ewr75Ji174z4xRAN95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9
-n9cd2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI=
------END CERTIFICATE-----
-
-Entrust.net Premium 2048 Secure Server CA
-=========================================
------BEGIN CERTIFICATE-----
-MIIEXDCCA0SgAwIBAgIEOGO5ZjANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u
-ZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBpbmNvcnAuIGJ5IHJlZi4gKGxp
-bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV
-BAMTKkVudHJ1c3QubmV0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQx
-NzUwNTFaFw0xOTEyMjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3
-d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl
-MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5u
-ZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
-MIIBCgKCAQEArU1LqRKGsuqjIAcVFmQqK0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOL
-Gp18EzoOH1u3Hs/lJBQesYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSr
-hRSGlVuXMlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVTXTzW
-nLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/HoZdenoVve8AjhUi
-VBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH4QIDAQABo3QwcjARBglghkgBhvhC
-AQEEBAMCAAcwHwYDVR0jBBgwFoAUVeSB0RGAvtiJuQijMfmhJAkWuXAwHQYDVR0OBBYEFFXkgdER
-gL7YibkIozH5oSQJFrlwMB0GCSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0B
-AQUFAAOCAQEAWUesIYSKF8mciVMeuoCFGsY8Tj6xnLZ8xpJdGGQC49MGCBFhfGPjK50xA3B20qMo
-oPS7mmNz7W3lKtvtFKkrxjYR0CvrB4ul2p5cGZ1WEvVUKcgF7bISKo30Axv/55IQh7A6tcOdBTcS
-o8f0FbnVpDkWm1M6I5HxqIKiaohowXkCIryqptau37AUX7iH0N18f3v/rxzP5tsHrV7bhZ3QKw0z
-2wTR5klAEyt2+z7pnIkPFc4YsIV4IU9rTw76NmfNB/L/CNDi3tm/Kq+4h4YhPATKt5Rof8886ZjX
-OP/swNlQ8C5LWK5Gb9Auw2DaclVyvUxFnmG6v4SBkgPR0ml8xQ==
------END CERTIFICATE-----
-
-Baltimore CyberTrust Root
-=========================
------BEGIN CERTIFICATE-----
-MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJRTESMBAGA1UE
-ChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYDVQQDExlCYWx0aW1vcmUgQ3li
-ZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoXDTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMC
-SUUxEjAQBgNVBAoTCUJhbHRpbW9yZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFs
-dGltb3JlIEN5YmVyVHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKME
-uyKrmD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjrIZ3AQSsB
-UnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeKmpYcqWe4PwzV9/lSEy/C
-G9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSuXmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9
-XbIGevOF6uvUA65ehD5f/xXtabz5OTZydc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjpr
-l3RjM71oGDHweI12v/yejl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoI
-VDaGezq1BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEB
-BQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT929hkTI7gQCvlYpNRh
-cL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3WgxjkzSswF07r51XgdIGn9w/xZchMB5
-hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsa
-Y71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H
-RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp
------END CERTIFICATE-----
-
-Equifax Secure Global eBusiness CA
-==================================
------BEGIN CERTIFICATE-----
-MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
-RXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBTZWN1cmUgR2xvYmFsIGVCdXNp
-bmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIwMDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMx
-HDAaBgNVBAoTE0VxdWlmYXggU2VjdXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEds
-b2JhbCBlQnVzaW5lc3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRV
-PEnCUdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc58O/gGzN
-qfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/o5brhTMhHD4ePmBudpxn
-hcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAHMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0j
-BBgwFoAUvqigdHJQa0S3ySPY+6j/s1draGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hs
-MA0GCSqGSIb3DQEBBAUAA4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okEN
-I7SS+RkAZ70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv8qIY
-NMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV
------END CERTIFICATE-----
-
-Equifax Secure eBusiness CA 1
-=============================
------BEGIN CERTIFICATE-----
-MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
-RXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENB
-LTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQwMDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UE
-ChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNz
-IENBLTEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ
-1MRoRvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBuWqDZQu4a
-IZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKwEnv+j6YDAgMBAAGjZjBk
-MBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFEp4MlIR21kW
-Nl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRKeDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQF
-AAOBgQB1W6ibAxHm6VZMzfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5
-lSE/9dR+WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN/Bf+
-KpYrtWKmpj29f5JZzVoqgrI3eQ==
------END CERTIFICATE-----
-
-Equifax Secure eBusiness CA 2
-=============================
------BEGIN CERTIFICATE-----
-MIIDIDCCAomgAwIBAgIEN3DPtTANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEXMBUGA1UE
-ChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2VjdXJlIGVCdXNpbmVzcyBDQS0y
-MB4XDTk5MDYyMzEyMTQ0NVoXDTE5MDYyMzEyMTQ0NVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoT
-DkVxdWlmYXggU2VjdXJlMSYwJAYDVQQLEx1FcXVpZmF4IFNlY3VyZSBlQnVzaW5lc3MgQ0EtMjCB
-nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA5Dk5kx5SBhsoNviyoynF7Y6yEb3+6+e0dMKP/wXn
-2Z0GvxLIPw7y1tEkshHe0XMJitSxLJgJDR5QRrKDpkWNYmi7hRsgcDKqQM2mll/EcTc/BPO3QSQ5
-BxoeLmFYoBIL5aXfxavqN3HMHMg3OrmXUqesxWoklE6ce8/AatbfIb0CAwEAAaOCAQkwggEFMHAG
-A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORXF1aWZheCBTZWN1cmUx
-JjAkBgNVBAsTHUVxdWlmYXggU2VjdXJlIGVCdXNpbmVzcyBDQS0yMQ0wCwYDVQQDEwRDUkwxMBoG
-A1UdEAQTMBGBDzIwMTkwNjIzMTIxNDQ1WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUUJ4L6q9e
-uSBIplBqy/3YIHqngnYwHQYDVR0OBBYEFFCeC+qvXrkgSKZQasv92CB6p4J2MAwGA1UdEwQFMAMB
-Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAAyGgq3oThr1
-jokn4jVYPSm0B482UJW/bsGe68SQsoWou7dC4A8HOd/7npCy0cE+U58DRLB+S/Rv5Hwf5+Kx5Lia
-78O9zt4LMjTZ3ijtM2vE1Nc9ElirfQkty3D1E4qUoSek1nDFbZS1yX2doNLGCEnZZpum0/QL3MUm
-V+GRMOrN
------END CERTIFICATE-----
-
-AddTrust Low-Value Services Root
-================================
------BEGIN CERTIFICATE-----
-MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
-QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRU
-cnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMwMTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQsw
-CQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBO
-ZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEB
-AQUAA4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ulCDtbKRY6
-54eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6ntGO0/7Gcrjyvd7ZWxbWr
-oulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyldI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1
-Zmne3yzxbrww2ywkEtvrNTVokMsAsJchPXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJui
-GMx1I4S+6+JNM3GOGvDC+Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8w
-HQYDVR0OBBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8EBTAD
-AQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBlMQswCQYDVQQGEwJT
-RTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEw
-HwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxt
-ZBsfzQ3duQH6lmM0MkhHma6X7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0Ph
-iVYrqW9yTkkz43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY
-eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJlpz/+0WatC7xr
-mYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOAWiFeIc9TVPC6b4nbqKqVz4vj
-ccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk=
------END CERTIFICATE-----
-
-AddTrust External Root
-======================
------BEGIN CERTIFICATE-----
-MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
-QWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYD
-VQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEw
-NDgzOFowbzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRU
-cnVzdCBFeHRlcm5hbCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0Eg
-Um9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvtH7xsD821
-+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9uMq/NzgtHj6RQa1wVsfw
-Tz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzXmk6vBbOmcZSccbNQYArHE504B4YCqOmo
-aSYYkKtMsE8jqzpPhNjfzp/haW+710LXa0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy
-2xSoRcRdKn23tNbE7qzNE0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv7
-7+ldU9U0WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYDVR0P
-BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0Jvf6xCZU7wO94CTL
-VBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEmMCQGA1UECxMdQWRk
-VHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsxIjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENB
-IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZl
-j7DYd7usQWxHYINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5
-6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvCNr4TDea9Y355
-e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEXc4g/VhsxOBi0cQ+azcgOno4u
-G+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5amnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
------END CERTIFICATE-----
-
-AddTrust Public Services Root
-=============================
------BEGIN CERTIFICATE-----
-MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
-QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSAwHgYDVQQDExdBZGRU
-cnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAxMDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJ
-BgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5l
-dHdvcmsxIDAeBgNVBAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEF
-AAOCAQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV6tsfSlbu
-nyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nXGCwwfQ56HmIexkvA/X1i
-d9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnPdzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSG
-Aa2Il+tmzV7R/9x98oTaunet3IAIx6eH1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAw
-HM+A+WD+eeSI8t0A65RF62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0G
-A1UdDgQWBBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
-/zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDELMAkGA1UEBhMCU0Ux
-FDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29yazEgMB4G
-A1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4
-JNojVhaTdt02KLmuG7jD8WS6IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL
-+YPoRNWyQSW/iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao
-GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh4SINhwBk/ox9
-Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQmXiLsks3/QppEIW1cxeMiHV9H
-EufOX1362KqxMy3ZdvJOOjMMK7MtkAY=
------END CERTIFICATE-----
-
-AddTrust Qualified Certificates Root
-====================================
------BEGIN CERTIFICATE-----
-MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
-QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSMwIQYDVQQDExpBZGRU
-cnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcx
-CzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQ
-IE5ldHdvcmsxIzAhBgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG
-9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwqxBb/4Oxx
-64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G87B4pfYOQnrjfxvM0PC3
-KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i2O+tCBGaKZnhqkRFmhJePp1tUvznoD1o
-L/BLcHwTOK28FSXx1s6rosAx1i+f4P8UWfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GR
-wVY18BTcZTYJbqukB8c10cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HU
-MIHRMB0GA1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/
-BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6FrpGkwZzELMAkGA1UE
-BhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29y
-azEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlmaWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQAD
-ggEBABmrder4i2VhlRO6aQTvhsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxG
-GuoYQ992zPlmhpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X
-dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3P6CxB9bpT9ze
-RXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9YiQBCYz95OdBEsIJuQRno3eDB
-iFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5noxqE=
------END CERTIFICATE-----
-
-Entrust Root Certification Authority
-====================================
------BEGIN CERTIFICATE-----
-MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMCVVMxFjAUBgNV
-BAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0Lm5ldC9DUFMgaXMgaW5jb3Jw
-b3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMWKGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsG
-A1UEAxMkRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0
-MloXDTI2MTEyNzIwNTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMu
-MTkwNwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSByZWZlcmVu
-Y2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNVBAMTJEVudHJ1c3QgUm9v
-dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
-ALaVtkNC+sZtKm9I35RMOVcF7sN5EUFoNu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYsz
-A9u3g3s+IIRe7bJWKKf44LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOww
-Cj0Yzfv9KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGIrb68
-j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi94DkZfs0Nw4pgHBN
-rziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOBsDCBrTAOBgNVHQ8BAf8EBAMCAQYw
-DwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAigA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1
-MzQyWjAfBgNVHSMEGDAWgBRokORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DH
-hmak8fdLQ/uEvW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA
-A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9tO1KzKtvn1ISM
-Y/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6ZuaAGAT/3B+XxFNSRuzFVJ7yVTa
-v52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTS
-W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0
-tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8
------END CERTIFICATE-----
-
-RSA Security 2048 v3
-====================
------BEGIN CERTIFICATE-----
-MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6MRkwFwYDVQQK
-ExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJpdHkgMjA0OCBWMzAeFw0wMTAy
-MjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAXBgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAb
-BgNVBAsTFFJTQSBTZWN1cml0eSAyMDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
-AQEAt49VcdKA3XtpeafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37RqtBaB4Y6lXIL5F4iSj7
-Jylg/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3OTsor8udGuorryGlwSMiuLgb
-WhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYqODGBDSnhAMFRD0xS+ARaqn1y07iH
-KrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP
-+Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpuAWgXIszACwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/
-MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4E
-FgQUB8NRMKSq6UWuNST6/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYcHnmY
-v/3VEhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/Zb5gEydxiKRz44Rj
-0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+f00/FGj1EVDVwfSQpQgdMWD/YIwj
-VAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJqaHVOrSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395
-nzIlQnQFgCi/vcEkllgVsRch6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kA
-pKnXwiJPZ9d37CAFYd4=
------END CERTIFICATE-----
-
-GeoTrust Global CA
-==================
------BEGIN CERTIFICATE-----
-MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVTMRYwFAYDVQQK
-Ew1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9iYWwgQ0EwHhcNMDIwNTIxMDQw
-MDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j
-LjEbMBkGA1UEAxMSR2VvVHJ1c3QgR2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
-CgKCAQEA2swYYzD99BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjo
-BbdqfnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDviS2Aelet
-8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU1XupGc1V3sjs0l44U+Vc
-T4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+bw8HHa8sHo9gOeL6NlMTOdReJivbPagU
-vTLrGAMoUgRx5aszPeE4uwc2hGKceeoWMPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTAD
-AQH/MB0GA1UdDgQWBBTAephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVk
-DBF9qn1luMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKInZ57Q
-zxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfStQWVYrmm3ok9Nns4
-d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcFPseKUgzbFbS9bZvlxrFUaKnjaZC2
-mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Unhw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6p
-XE0zX5IJL4hmXXeXxx12E6nV5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvm
-Mw==
------END CERTIFICATE-----
-
-GeoTrust Global CA 2
-====================
------BEGIN CERTIFICATE-----
-MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
-R2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwHhcNMDQwMzA0MDUw
-MDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j
-LjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
-ggEKAoIBAQDvPE1APRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/
-NTL8Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hLTytCOb1k
-LUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL5mkWRxHCJ1kDs6ZgwiFA
-Vvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7S4wMcoKK+xfNAGw6EzywhIdLFnopsk/b
-HdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQF
-MAMBAf8wHQYDVR0OBBYEFHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNH
-K266ZUapEBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6tdEPx7
-srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv/NgdRN3ggX+d6Yvh
-ZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywNA0ZF66D0f0hExghAzN4bcLUprbqL
-OzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkC
-x1YAzUm5s2x7UwQa4qjJqhIFI8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqF
-H4z1Ir+rzoPz4iIprn2DQKi6bA==
------END CERTIFICATE-----
-
-GeoTrust Universal CA
-=====================
------BEGIN CERTIFICATE-----
-MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
-R2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVyc2FsIENBMB4XDTA0MDMwNDA1
-MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IElu
-Yy4xHjAcBgNVBAMTFUdlb1RydXN0IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIP
-ADCCAgoCggIBAKYVVaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9t
-JPi8cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTTQjOgNB0e
-RXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFhF7em6fgemdtzbvQKoiFs
-7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2vc7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d
-8Lsrlh/eezJS/R27tQahsiFepdaVaH/wmZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7V
-qnJNk22CDtucvc+081xdVHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3Cga
-Rr0BHdCXteGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZf9hB
-Z3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfReBi9Fi1jUIxaS5BZu
-KGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+nhutxx9z3SxPGWX9f5NAEC7S8O08
-ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0
-XG0D08DYj3rWMB8GA1UdIwQYMBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIB
-hjANBgkqhkiG9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc
-aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fXIwjhmF7DWgh2
-qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzynANXH/KttgCJwpQzgXQQpAvvL
-oJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0zuzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsK
-xr2EoyNB3tZ3b4XUhRxQ4K5RirqNPnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxF
-KyDuSN/n3QmOGKjaQI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2
-DFKWkoRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9ER/frslK
-xfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQtDF4JbAiXfKM9fJP/P6EU
-p8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/SfuvmbJxPgWp6ZKy7PtXny3YuxadIwVyQD8vI
-P/rmMuGNG2+k5o7Y+SlIis5z/iw=
------END CERTIFICATE-----
-
-GeoTrust Universal CA 2
-=======================
------BEGIN CERTIFICATE-----
-MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
-R2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwHhcNMDQwMzA0
-MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3Qg
-SW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUA
-A4ICDwAwggIKAoICAQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0
-DE81WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUGFF+3Qs17
-j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdqXbboW0W63MOhBW9Wjo8Q
-JqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxLse4YuU6W3Nx2/zu+z18DwPw76L5GG//a
-QMJS9/7jOvdqdzXQ2o3rXhhqMcceujwbKNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2
-WP0+GfPtDCapkzj4T8FdIgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP
-20gaXT73y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRthAAn
-ZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgocQIgfksILAAX/8sgC
-SqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4Lt1ZrtmhN79UNdxzMk+MBB4zsslG
-8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2
-+/CfXGJx7Tz0RzgQKzAfBgNVHSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8E
-BAMCAYYwDQYJKoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z
-dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQL1EuxBRa3ugZ
-4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgrFg5fNuH8KrUwJM/gYwx7WBr+
-mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSoag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpq
-A1Ihn0CoZ1Dy81of398j9tx4TuaYT1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpg
-Y+RdM4kX2TGq2tbzGDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiP
-pm8m1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJVOCiNUW7d
-FGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH6aLcr34YEoP9VhdBLtUp
-gn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwXQMAJKOSLakhT2+zNVVXxxvjpoixMptEm
-X36vWkzaH6byHCx+rgIW0lbQL1dTR+iS
------END CERTIFICATE-----
-
-America Online Root Certification Authority 1
-=============================================
------BEGIN CERTIFICATE-----
-MIIDpDCCAoygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
-QW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBPbmxpbmUgUm9vdCBDZXJ0aWZp
-Y2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyODA2MDAwMFoXDTM3MTExOTIwNDMwMFowYzELMAkG
-A1UEBhMCVVMxHDAaBgNVBAoTE0FtZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2Eg
-T25saW5lIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIwDQYJKoZIhvcNAQEBBQAD
-ggEPADCCAQoCggEBAKgv6KRpBgNHw+kqmP8ZonCaxlCyfqXfaE0bfA+2l2h9LaaLl+lkhsmj76CG
-v2BlnEtUiMJIxUo5vxTjWVXlGbR0yLQFOVwWpeKVBeASrlmLojNoWBym1BW32J/X3HGrfpq/m44z
-DyL9Hy7nBzbvYjnF3cu6JRQj3gzGPTzOggjmZj7aUTsWOqMFf6Dch9Wc/HKpoH145LcxVR5lu9Rh
-sCFg7RAycsWSJR74kEoYeEfffjA3PlAb2xzTa5qGUwew76wGePiEmf4hjUyAtgyC9mZweRrTT6PP
-8c9GsEsPPt2IYriMqQkoO3rHl+Ee5fSfwMCuJKDIodkP1nsmgmkyPacCAwEAAaNjMGEwDwYDVR0T
-AQH/BAUwAwEB/zAdBgNVHQ4EFgQUAK3Zo/Z59m50qX8zPYEX10zPM94wHwYDVR0jBBgwFoAUAK3Z
-o/Z59m50qX8zPYEX10zPM94wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBBQUAA4IBAQB8itEf
-GDeC4Liwo+1WlchiYZwFos3CYiZhzRAW18y0ZTTQEYqtqKkFZu90821fnZmv9ov761KyBZiibyrF
-VL0lvV+uyIbqRizBs73B6UlwGBaXCBOMIOAbLjpHyx7kADCVW/RFo8AasAFOq73AI25jP4BKxQft
-3OJvx8Fi8eNy1gTIdGcL+oiroQHIb/AUr9KZzVGTfu0uOMe9zkZQPXLjeSWdm4grECDdpbgyn43g
-Kd8hdIaC2y+CMMbHNYaz+ZZfRtsMRf3zUMNvxsNIrUam4SdHCh0Om7bCd39j8uB9Gr784N/Xx6ds
-sPmuujz9dLQR6FgNgLzTqIA6me11zEZ7
------END CERTIFICATE-----
-
-America Online Root Certification Authority 2
-=============================================
------BEGIN CERTIFICATE-----
-MIIFpDCCA4ygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
-QW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBPbmxpbmUgUm9vdCBDZXJ0aWZp
-Y2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyODA2MDAwMFoXDTM3MDkyOTE0MDgwMFowYzELMAkG
-A1UEBhMCVVMxHDAaBgNVBAoTE0FtZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2Eg
-T25saW5lIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIwDQYJKoZIhvcNAQEBBQAD
-ggIPADCCAgoCggIBAMxBRR3pPU0Q9oyxQcngXssNt79Hc9PwVU3dxgz6sWYFas14tNwC206B89en
-fHG8dWOgXeMHDEjsJcQDIPT/DjsS/5uN4cbVG7RtIuOx238hZK+GvFciKtZHgVdEglZTvYYUAQv8
-f3SkWq7xuhG1m1hagLQ3eAkzfDJHA1zEpYNI9FdWboE2JxhP7JsowtS013wMPgwr38oE18aO6lhO
-qKSlGBxsRZijQdEt0sdtjRnxrXm3gT+9BoInLRBYBbV4Bbkv2wxrkJB+FFk4u5QkE+XRnRTf04JN
-RvCAOVIyD+OEsnpD8l7eXz8d3eOyG6ChKiMDbi4BFYdcpnV1x5dhvt6G3NRI270qv0pV2uh9UPu0
-gBe4lL8BPeraunzgWGcXuVjgiIZGZ2ydEEdYMtA1fHkqkKJaEBEjNa0vzORKW6fIJ/KD3l67Xnfn
-6KVuY8INXWHQjNJsWiEOyiijzirplcdIz5ZvHZIlyMbGwcEMBawmxNJ10uEqZ8A9W6Wa6897Gqid
-FEXlD6CaZd4vKL3Ob5Rmg0gp2OpljK+T2WSfVVcmv2/LNzGZo2C7HK2JNDJiuEMhBnIMoVxtRsX6
-Kc8w3onccVvdtjc+31D1uAclJuW8tf48ArO3+L5DwYcRlJ4jbBeKuIonDFRH8KmzwICMoCfrHRnj
-B453cMor9H124HhnAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFE1FwWg4u3Op
-aaEg5+31IqEjFNeeMB8GA1UdIwQYMBaAFE1FwWg4u3OpaaEg5+31IqEjFNeeMA4GA1UdDwEB/wQE
-AwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAZ2sGuV9FOypLM7PmG2tZTiLMubekJcmnxPBUlgtk87FY
-T15R/LKXeydlwuXK5w0MJXti4/qftIe3RUavg6WXSIylvfEWK5t2LHo1YGwRgJfMqZJS5ivmae2p
-+DYtLHe/YUjRYwu5W1LtGLBDQiKmsXeu3mnFzcccobGlHBD7GL4acN3Bkku+KVqdPzW+5X1R+FXg
-JXUjhx5c3LqdsKyzadsXg8n33gy8CNyRnqjQ1xU3c6U1uPx+xURABsPr+CKAXEfOAuMRn0T//Zoy
-zH1kUQ7rVyZ2OuMeIjzCpjbdGe+n/BLzJsBZMYVMnNjP36TMzCmT/5RtdlwTCJfy7aULTd3oyWgO
-ZtMADjMSW7yV5TKQqLPGbIOtd+6Lfn6xqavT4fG2wLHqiMDn05DpKJKUe2h7lyoKZy2FAjgQ5ANh
-1NolNscIWC2hp1GvMApJ9aZphwctREZ2jirlmjvXGKL8nDgQzMY70rUXOm/9riW99XJZZLF0Kjhf
-GEzfz3EEWjbUvy+ZnOjZurGV5gJLIaFb1cFPj65pbVPbAZO1XB4Y3WRayhgoPmMEEf0cjQAPuDff
-Z4qdZqkCapH/E8ovXYO8h5Ns3CRRFgQlZvqz2cK6Kb6aSDiCmfS/O0oxGfm/jiEzFMpPVF/7zvuP
-cX/9XhmgD0uRuMRUvAawRY8mkaKO/qk=
------END CERTIFICATE-----
-
-Visa eCommerce Root
-===================
------BEGIN CERTIFICATE-----
-MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBrMQswCQYDVQQG
-EwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2Ug
-QXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2
-WhcNMjIwNjI0MDAxNjEyWjBrMQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMm
-VmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv
-bW1lcmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h2mCxlCfL
-F9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4ElpF7sDPwsRROEW+1QK8b
-RaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdVZqW1LS7YgFmypw23RuwhY/81q6UCzyr0
-TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI
-/k4+oKsGGelT84ATB+0tvz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzs
-GHxBvfaLdXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEG
-MB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUFAAOCAQEAX/FBfXxc
-CLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcRzCSs00Rsca4BIGsDoo8Ytyk6feUW
-YFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pz
-zkWKsKZJ/0x9nXGIxHYdkFsd7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBu
-YQa7FkKMcPcw++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt
-398znM/jra6O1I7mT1GvFpLgXPYHDw==
------END CERTIFICATE-----
-
-Certum Root CA
-==============
------BEGIN CERTIFICATE-----
-MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQK
-ExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBDQTAeFw0wMjA2MTExMDQ2Mzla
-Fw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8u
-by4xEjAQBgNVBAMTCUNlcnR1bSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6x
-wS7TT3zNJc4YPk/EjG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdL
-kKWoePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GIULdtlkIJ
-89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapuOb7kky/ZR6By6/qmW6/K
-Uz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUgAKpoC6EahQGcxEZjgoi2IrHu/qpGWX7P
-NSzVttpd90gzFFS269lvzs2I1qsb2pY7HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkq
-hkiG9w0BAQUFAAOCAQEAuI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+
-GXYkHAQaTOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTgxSvg
-GrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1qCjqTE5s7FCMTY5w/
-0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5xO/fIR/RpbxXyEV6DHpx8Uq79AtoS
-qFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs6GAqm4VKQPNriiTsBhYscw==
------END CERTIFICATE-----
-
-Comodo AAA Services root
-========================
------BEGIN CERTIFICATE-----
-MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
-R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
-TGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAw
-MFoXDTI4MTIzMTIzNTk1OVowezELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hl
-c3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNV
-BAMMGEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
-ggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQuaBtDFcCLNSS1UY8y2bmhG
-C1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe3M/vg4aijJRPn2jymJBGhCfHdr/jzDUs
-i14HZGWCwEiwqJH5YZ92IFCokcdmtet4YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszW
-Y19zjNoFmag4qMsXeDZRrOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjH
-Ypy+g8cmez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQUoBEK
-Iz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wewYDVR0f
-BHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNl
-cy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29tb2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2Vz
-LmNybDANBgkqhkiG9w0BAQUFAAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm
-7l3sAg9g1o1QGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz
-Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z
-8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C
-12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
------END CERTIFICATE-----
-
-Comodo Secure Services root
-===========================
------BEGIN CERTIFICATE-----
-MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
-R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
-TGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAw
-MDAwMFoXDTI4MTIzMTIzNTk1OVowfjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFu
-Y2hlc3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAi
-BgNVBAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP
-ADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPMcm3ye5drswfxdySRXyWP
-9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3SHpR7LZQdqnXXs5jLrLxkU0C8j6ysNstc
-rbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rC
-oznl2yY4rYsK7hljxxwk3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3V
-p6ea5EQz6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNVHQ4E
-FgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w
-gYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL1NlY3VyZUNlcnRpZmlj
-YXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRwOi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlm
-aWNhdGVTZXJ2aWNlcy5jcmwwDQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm
-4J4oqF7Tt/Q05qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj
-Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtIgKvcnDe4IRRL
-DXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJaD61JlfutuC23bkpgHl9j6Pw
-pCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDlizeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1H
-RR3B7Hzs/Sk=
------END CERTIFICATE-----
-
-Comodo Trusted Services root
-============================
------BEGIN CERTIFICATE-----
-MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
-R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
-TGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEw
-MDAwMDBaFw0yODEyMzEyMzU5NTlaMH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1h
-bmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUw
-IwYDVQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0BAQEFAAOC
-AQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWWfnJSoBVC21ndZHoa0Lh7
-3TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMtTGo87IvDktJTdyR0nAducPy9C1t2ul/y
-/9c3S0pgePfw+spwtOpZqqPOSC+pw7ILfhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6
-juljatEPmsbS9Is6FARW1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsS
-ivnkBbA7kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0GA1Ud
-DgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
-/zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21vZG9jYS5jb20vVHJ1c3RlZENlcnRp
-ZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRodHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENl
-cnRpZmljYXRlU2VydmljZXMuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8Ntw
-uleGFTQQuS9/HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32
-pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxISjBc/lDb+XbDA
-BHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+xqFx7D+gIIxmOom0jtTYsU0l
-R+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/AtyjcndBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O
-9y5Xt5hwXsjEeLBi
------END CERTIFICATE-----
-
-QuoVadis Root CA
-================
------BEGIN CERTIFICATE-----
-MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJCTTEZMBcGA1UE
-ChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
-eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAz
-MTkxODMzMzNaFw0yMTAzMTcxODMzMzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRp
-cyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQD
-EyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF
-AAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Ypli4kVEAkOPcahdxYTMuk
-J0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2DrOpm2RgbaIr1VxqYuvXtdj182d6UajtL
-F8HVj71lODqV0D1VNk7feVcxKh7YWWVJWCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeL
-YzcS19Dsw3sgQUSj7cugF+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWen
-AScOospUxbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCCAk4w
-PQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVvdmFkaXNvZmZzaG9y
-ZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREwggENMIIBCQYJKwYBBAG+WAABMIH7
-MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNlIG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmlj
-YXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJs
-ZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh
-Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYIKwYBBQUHAgEW
-Fmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3TKbkGGew5Oanwl4Rqy+/fMIGu
-BgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rqy+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkw
-FwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0
-aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6
-tlCLMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSkfnIYj9lo
-fFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf87C9TqnN7Az10buYWnuul
-LsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1RcHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2x
-gI4JVrmcGmD+XcHXetwReNDWXcG31a0ymQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi
-5upZIof4l/UO/erMkqQWxFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi
-5nrQNiOKSnQ2+Q==
------END CERTIFICATE-----
-
-QuoVadis Root CA 2
-==================
------BEGIN CERTIFICATE-----
-MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT
-EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMjAeFw0wNjExMjQx
-ODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM
-aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4IC
-DwAwggIKAoICAQCaGMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6
-XJxgFyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55JWpzmM+Yk
-lvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bBrrcCaoF6qUWD4gXmuVbB
-lDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp+ARz8un+XJiM9XOva7R+zdRcAitMOeGy
-lZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt
-66/3FsvbzSUr5R/7mp/iUcw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1Jdxn
-wQ5hYIizPtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og/zOh
-D7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UHoycR7hYQe7xFSkyy
-BNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuIyV77zGHcizN300QyNQliBJIWENie
-J0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1Ud
-DgQWBBQahGK8SEwzJQTU7tD2A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGU
-a6FJpEcwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT
-ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2fBluornFdLwUv
-Z+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzng/iN/Ae42l9NLmeyhP3ZRPx3
-UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2BlfF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodm
-VjB3pjd4M1IQWK4/YY7yarHvGH5KWWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK
-+JDSV6IZUaUtl0HaB0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrW
-IozchLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPRTUIZ3Ph1
-WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWDmbA4CD/pXvk1B+TJYm5X
-f6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0ZohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II
-4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8
-VCLAAVBpQ570su9t+Oza8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u
------END CERTIFICATE-----
-
-QuoVadis Root CA 3
-==================
------BEGIN CERTIFICATE-----
-MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT
-EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMzAeFw0wNjExMjQx
-OTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM
-aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4IC
-DwAwggIKAoICAQDMV0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNgg
-DhoB4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUrH556VOij
-KTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd8lyyBTNvijbO0BNO/79K
-DDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9CabwvvWhDFlaJKjdhkf2mrk7AyxRllDdLkgbv
-BNDInIjbC3uBr7E9KsRlOni27tyAsdLTmZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwp
-p5ijJUMv7/FfJuGITfhebtfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8
-nT8KKdjcT5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDtWAEX
-MJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZc6tsgLjoC2SToJyM
-Gf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A4iLItLRkT9a6fUg+qGkM17uGcclz
-uD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYDVR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHT
-BgkrBgEEAb5YAAMwgcUwgZMGCCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmlj
-YXRlIGNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0
-aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVudC4wLQYIKwYB
-BQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2NwczALBgNVHQ8EBAMCAQYwHQYD
-VR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4GA1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4
-ywLQoUmkRzBFMQswCQYDVQQGEwJCTTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UE
-AxMSUXVvVmFkaXMgUm9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZV
-qyM07ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSemd1o417+s
-hvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd+LJ2w/w4E6oM3kJpK27z
-POuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2
-Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadNt54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp
-8kokUvd0/bpO5qgdAm6xDYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBC
-bjPsMZ57k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6szHXu
-g/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0jWy10QJLZYxkNc91p
-vGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeTmJlglFwjz1onl14LBQaTNx47aTbr
-qZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK4SVhM7JZG+Ju1zdXtg2pEto=
------END CERTIFICATE-----
-
-Security Communication Root CA
-==============================
------BEGIN CERTIFICATE-----
-MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP
-U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw
-HhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP
-U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw
-ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw
-8yl89f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJDKaVv0uM
-DPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9Ms+k2Y7CI9eNqPPYJayX
-5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/NQV3Is00qVUarH9oe4kA92819uZKAnDfd
-DJZkndwi92SL32HeFZRSFaB9UslLqCHJxrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2
-JChzAgMBAAGjPzA9MB0GA1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYw
-DwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vGkl3g
-0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfrUj94nK9NrvjVT8+a
-mCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5Bw+SUEmK3TGXX8npN6o7WWWXlDLJ
-s58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJUJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ
-6rBK+1YWc26sTfcioU+tHXotRSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAi
-FL39vmwLAw==
------END CERTIFICATE-----
-
-Sonera Class 2 Root CA
-======================
------BEGIN CERTIFICATE-----
-MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG
-U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAxMDQwNjA3Mjk0MFoXDTIxMDQw
-NjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh
-IENsYXNzMiBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3
-/Ei9vX+ALTU74W+oZ6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybT
-dXnt5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s3TmVToMG
-f+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2EjvOr7nQKV0ba5cTppCD8P
-tOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu8nYybieDwnPz3BjotJPqdURrBGAgcVeH
-nfO+oJAjPYok4doh28MCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITT
-XjwwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt
-0jSv9zilzqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/3DEI
-cbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvDFNr450kkkdAdavph
-Oe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6Tk6ezAyNlNzZRZxe7EJQY670XcSx
-EtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLH
-llpwrN9M
------END CERTIFICATE-----
-
-Staat der Nederlanden Root CA
-=============================
------BEGIN CERTIFICATE-----
-MIIDujCCAqKgAwIBAgIEAJiWijANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQGEwJOTDEeMBwGA1UE
-ChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQDEx1TdGFhdCBkZXIgTmVkZXJsYW5kZW4g
-Um9vdCBDQTAeFw0wMjEyMTcwOTIzNDlaFw0xNTEyMTYwOTE1MzhaMFUxCzAJBgNVBAYTAk5MMR4w
-HAYDVQQKExVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xJjAkBgNVBAMTHVN0YWF0IGRlciBOZWRlcmxh
-bmRlbiBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmNK1URF6gaYUmHFt
-vsznExvWJw56s2oYHLZhWtVhCb/ekBPHZ+7d89rFDBKeNVU+LCeIQGv33N0iYfXCxw719tV2U02P
-jLwYdjeFnejKScfST5gTCaI+Ioicf9byEGW07l8Y1Rfj+MX94p2i71MOhXeiD+EwR+4A5zN9RGca
-C1Hoi6CeUJhoNFIfLm0B8mBF8jHrqTFoKbt6QZ7GGX+UtFE5A3+y3qcym7RHjm+0Sq7lr7HcsBth
-vJly3uSJt3omXdozSVtSnA71iq3DuD3oBmrC1SoLbHuEvVYFy4ZlkuxEK7COudxwC0barbxjiDn6
-22r+I/q85Ej0ZytqERAhSQIDAQABo4GRMIGOMAwGA1UdEwQFMAMBAf8wTwYDVR0gBEgwRjBEBgRV
-HSAAMDwwOgYIKwYBBQUHAgEWLmh0dHA6Ly93d3cucGtpb3ZlcmhlaWQubmwvcG9saWNpZXMvcm9v
-dC1wb2xpY3kwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSofeu8Y6R0E3QA7Jbg0zTBLL9s+DAN
-BgkqhkiG9w0BAQUFAAOCAQEABYSHVXQ2YcG70dTGFagTtJ+k/rvuFbQvBgwp8qiSpGEN/KtcCFtR
-EytNwiphyPgJWPwtArI5fZlmgb9uXJVFIGzmeafR2Bwp/MIgJ1HI8XxdNGdphREwxgDS1/PTfLbw
-MVcoEoJz6TMvplW0C5GUR5z6u3pCMuiufi3IvKwUv9kP2Vv8wfl6leF9fpb8cbDCTMjfRTTJzg3y
-nGQI0DvDKcWy7ZAEwbEpkcUwb8GpcjPM/l0WFywRaed+/sWDCN+83CI6LiBpIzlWYGeQiy52OfsR
-iJf2fL1LuCAWZwWN4jvBcj+UlTfHXbme2JOhF4//DGYVwSR8MnwDHTuhWEUykw==
------END CERTIFICATE-----
-
-UTN DATACorp SGC Root CA
-========================
------BEGIN CERTIFICATE-----
-MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCBkzELMAkGA1UE
-BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
-IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZ
-BgNVBAMTElVUTiAtIERBVEFDb3JwIFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBa
-MIGTMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4w
-HAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRy
-dXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjANBgkqhkiG9w0BAQEFAAOC
-AQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ys
-raP6LnD43m77VkIVni5c7yPeIbkFdicZD0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlo
-wHDyUwDAXlCCpVZvNvlK4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA
-9P4yPykqlXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulWbfXv
-33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQABo4GrMIGoMAsGA1Ud
-DwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRTMtGzz3/64PGgXYVOktKeRR20TzA9
-BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dD
-LmNybDAqBgNVHSUEIzAhBggrBgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3
-DQEBBQUAA4IBAQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft
-Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyjj98C5OBxOvG0
-I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVHKWss5nbZqSl9Mt3JNjy9rjXx
-EZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwP
-DPafepE39peC4N1xaf92P2BNPM/3mfnGV/TJVTl4uix5yaaIK/QI
------END CERTIFICATE-----
-
-UTN USERFirst Hardware Root CA
-==============================
------BEGIN CERTIFICATE-----
-MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCBlzELMAkGA1UE
-BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
-IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAd
-BgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgx
-OTIyWjCBlzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0
-eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVz
-ZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwggEiMA0GCSqGSIb3
-DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlI
-wrthdBKWHTxqctU8EGc6Oe0rE81m65UJM6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFd
-tqdt++BxF2uiiPsA3/4aMXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8
-i4fDidNdoI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqIDsjf
-Pe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9KsyoUhbAgMBAAGjgbkw
-gbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFKFyXyYbKJhDlV0HN9WF
-lp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNF
-UkZpcnN0LUhhcmR3YXJlLmNybDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUF
-BwMGBggrBgEFBQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM
-//bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28GpgoiskliCE7/yMgUsogW
-XecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gECJChicsZUN/KHAG8HQQZexB2
-lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kn
-iCrVWFCVH/A7HFe7fRQ5YiuayZSSKqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67
-nfhmqA==
------END CERTIFICATE-----
-
-Camerfirma Chambers of Commerce Root
-====================================
------BEGIN CERTIFICATE-----
-MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe
-QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i
-ZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAx
-NjEzNDNaFw0zNzA5MzAxNjEzNDRaMH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZp
-cm1hIFNBIENJRiBBODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3Jn
-MSIwIAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0BAQEFAAOC
-AQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtbunXF/KGIJPov7coISjlU
-xFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0dBmpAPrMMhe5cG3nCYsS4No41XQEMIwRH
-NaqbYE6gZj3LJgqcQKH0XZi/caulAGgq7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jW
-DA+wWFjbw2Y3npuRVDM30pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFV
-d9oKDMyXroDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIGA1Ud
-EwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5jaGFtYmVyc2lnbi5v
-cmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p26EpW1eLTXYGduHRooowDgYDVR0P
-AQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hh
-bWJlcnNpZ24ub3JnMCcGA1UdEgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYD
-VR0gBFEwTzBNBgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz
-aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEBAAxBl8IahsAi
-fJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZdp0AJPaxJRUXcLo0waLIJuvvD
-L8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wN
-UPf6s+xCX6ndbcj0dc97wXImsQEcXCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/n
-ADydb47kMgkdTXg0eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1
-erfutGWaIZDgqtCYvDi1czyL+Nw=
------END CERTIFICATE-----
-
-Camerfirma Global Chambersign Root
-==================================
------BEGIN CERTIFICATE-----
-MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe
-QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i
-ZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYx
-NDE4WhcNMzcwOTMwMTYxNDE4WjB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJt
-YSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEg
-MB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUAA4IBDQAw
-ggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0Mi+ITaFgCPS3CU6gSS9J
-1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/sQJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8O
-by4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpVeAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl
-6DJWk0aJqCWKZQbua795B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c
-8lCrEqWhz0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0TAQH/
-BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1iZXJzaWduLm9yZy9j
-aGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4wTcbOX60Qq+UDpfqpFDAOBgNVHQ8B
-Af8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAHMCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBj
-aGFtYmVyc2lnbi5vcmcwKgYDVR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9y
-ZzBbBgNVHSAEVDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh
-bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0BAQUFAAOCAQEA
-PDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUMbKGKfKX0j//U2K0X1S0E0T9Y
-gOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXiryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJ
-PJ7oKXqJ1/6v/2j1pReQvayZzKWGVwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4
-IBHNfTIzSJRUTN3cecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREes
-t2d/AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A==
------END CERTIFICATE-----
-
-NetLock Notary (Class A) Root
-=============================
------BEGIN CERTIFICATE-----
-MIIGfTCCBWWgAwIBAgICAQMwDQYJKoZIhvcNAQEEBQAwga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQI
-EwdIdW5nYXJ5MREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6
-dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9j
-ayBLb3pqZWd5em9pIChDbGFzcyBBKSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNDIzMTQ0N1oX
-DTE5MDIxOTIzMTQ0N1owga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQH
-EwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQuMRowGAYD
-VQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBLb3pqZWd5em9pIChDbGFz
-cyBBKSBUYW51c2l0dmFueWtpYWRvMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvHSM
-D7tM9DceqQWC2ObhbHDqeLVu0ThEDaiDzl3S1tWBxdRL51uUcCbbO51qTGL3cfNk1mE7PetzozfZ
-z+qMkjvN9wfcZnSX9EUi3fRc4L9t875lM+QVOr/bmJBVOMTtplVjC7B4BPTjbsE/jvxReB+SnoPC
-/tmwqcm8WgD/qaiYdPv2LD4VOQ22BFWoDpggQrOxJa1+mm9dU7GrDPzr4PN6s6iz/0b2Y6LYOph7
-tqyF/7AlT3Rj5xMHpQqPBffAZG9+pyeAlt7ULoZgx2srXnN7F+eRP2QM2EsiNCubMvJIH5+hCoR6
-4sKtlz2O1cH5VqNQ6ca0+pii7pXmKgOM3wIDAQABo4ICnzCCApswDgYDVR0PAQH/BAQDAgAGMBIG
-A1UdEwEB/wQIMAYBAf8CAQQwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaC
-Ak1GSUdZRUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pv
-bGdhbHRhdGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQu
-IEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2Vn
-LWJpenRvc2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0
-ZXRlbGUgYXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFz
-IGxlaXJhc2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBh
-IGh0dHBzOi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVu
-b3J6ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1YW5jZSBh
-bmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sg
-Q1BTIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFp
-bCBhdCBjcHNAbmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4IBAQBIJEb3ulZv+sgoA0BO5TE5
-ayZrU3/b39/zcT0mwBQOxmd7I6gMc90Bu8bKbjc5VdXHjFYgDigKDtIqpLBJUsY4B/6+CgmM0ZjP
-ytoUMaFP0jn8DxEsQ8Pdq5PHVT5HfBgaANzze9jyf1JsIPQLX2lS9O74silg6+NJMSEN1rUQQeJB
-CWziGppWS3cC9qCbmieH6FUpccKQn0V4GuEVZD3QDtigdp+uxdAu6tYPVuxkf1qbFFgBJ34TUMdr
-KuZoPL9coAob4Q566eKAw+np9v1sEZ7Q5SgnK1QyQhSCdeZK8CtmdWOMovsEPoMOmzbwGOQmIMOM
-8CgHrTwXZoi1/baI
------END CERTIFICATE-----
-
-NetLock Business (Class B) Root
-===============================
------BEGIN CERTIFICATE-----
-MIIFSzCCBLSgAwIBAgIBaTANBgkqhkiG9w0BAQQFADCBmTELMAkGA1UEBhMCSFUxETAPBgNVBAcT
-CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV
-BAsTEVRhbnVzaXR2YW55a2lhZG9rMTIwMAYDVQQDEylOZXRMb2NrIFV6bGV0aSAoQ2xhc3MgQikg
-VGFudXNpdHZhbnlraWFkbzAeFw05OTAyMjUxNDEwMjJaFw0xOTAyMjAxNDEwMjJaMIGZMQswCQYD
-VQQGEwJIVTERMA8GA1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRv
-bnNhZ2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxMjAwBgNVBAMTKU5ldExvY2sg
-VXpsZXRpIChDbGFzcyBCKSBUYW51c2l0dmFueWtpYWRvMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB
-iQKBgQCx6gTsIKAjwo84YM/HRrPVG/77uZmeBNwcf4xKgZjupNTKihe5In+DCnVMm8Bp2GQ5o+2S
-o/1bXHQawEfKOml2mrriRBf8TKPV/riXiK+IA4kfpPIEPsgHC+b5sy96YhQJRhTKZPWLgLViqNhr
-1nGTLbO/CVRY7QbrqHvcQ7GhaQIDAQABo4ICnzCCApswEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNV
-HQ8BAf8EBAMCAAYwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1GSUdZ
-RUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pvbGdhbHRh
-dGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQuIEEgaGl0
-ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2VnLWJpenRv
-c2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUg
-YXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJh
-c2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBhIGh0dHBz
-Oi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVub3J6ZXNA
-bmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1YW5jZSBhbmQgdGhl
-IHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sgQ1BTIGF2
-YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBj
-cHNAbmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4GBAATbrowXr/gOkDFOzT4JwG06sPgzTEdM
-43WIEJessDgVkcYplswhwG08pXTP2IKlOcNl40JwuyKQ433bNXbhoLXan3BukxowOR0w2y7jfLKR
-stE3Kfq51hdcR0/jHTjrn9V7lagonhVK0dHQKwCXoOKSNitjrFgBazMpUIaD8QFI
------END CERTIFICATE-----
-
-NetLock Express (Class C) Root
-==============================
------BEGIN CERTIFICATE-----
-MIIFTzCCBLigAwIBAgIBaDANBgkqhkiG9w0BAQQFADCBmzELMAkGA1UEBhMCSFUxETAPBgNVBAcT
-CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV
-BAsTEVRhbnVzaXR2YW55a2lhZG9rMTQwMgYDVQQDEytOZXRMb2NrIEV4cHJlc3N6IChDbGFzcyBD
-KSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNTE0MDgxMVoXDTE5MDIyMDE0MDgxMVowgZsxCzAJ
-BgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6
-dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE0MDIGA1UEAxMrTmV0TG9j
-ayBFeHByZXNzeiAoQ2xhc3MgQykgVGFudXNpdHZhbnlraWFkbzCBnzANBgkqhkiG9w0BAQEFAAOB
-jQAwgYkCgYEA6+ywbGGKIyWvYCDj2Z/8kwvbXY2wobNAOoLO/XXgeDIDhlqGlZHtU/qdQPzm6N3Z
-W3oDvV3zOwzDUXmbrVWg6dADEK8KuhRC2VImESLH0iDMgqSaqf64gXadarfSNnU+sYYJ9m5tfk63
-euyucYT2BDMIJTLrdKwWRMbkQJMdf60CAwEAAaOCAp8wggKbMBIGA1UdEwEB/wQIMAYBAf8CAQQw
-DgYDVR0PAQH/BAQDAgAGMBEGCWCGSAGG+EIBAQQEAwIABzCCAmAGCWCGSAGG+EIBDQSCAlEWggJN
-RklHWUVMRU0hIEV6ZW4gdGFudXNpdHZhbnkgYSBOZXRMb2NrIEtmdC4gQWx0YWxhbm9zIFN6b2xn
-YWx0YXRhc2kgRmVsdGV0ZWxlaWJlbiBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0LiBB
-IGhpdGVsZXNpdGVzIGZvbHlhbWF0YXQgYSBOZXRMb2NrIEtmdC4gdGVybWVrZmVsZWxvc3NlZy1i
-aXp0b3NpdGFzYSB2ZWRpLiBBIGRpZ2l0YWxpcyBhbGFpcmFzIGVsZm9nYWRhc2FuYWsgZmVsdGV0
-ZWxlIGF6IGVsb2lydCBlbGxlbm9yemVzaSBlbGphcmFzIG1lZ3RldGVsZS4gQXogZWxqYXJhcyBs
-ZWlyYXNhIG1lZ3RhbGFsaGF0byBhIE5ldExvY2sgS2Z0LiBJbnRlcm5ldCBob25sYXBqYW4gYSBo
-dHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIGNpbWVuIHZhZ3kga2VyaGV0byBheiBlbGxlbm9y
-emVzQG5ldGxvY2submV0IGUtbWFpbCBjaW1lbi4gSU1QT1JUQU5UISBUaGUgaXNzdWFuY2UgYW5k
-IHRoZSB1c2Ugb2YgdGhpcyBjZXJ0aWZpY2F0ZSBpcyBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIENQ
-UyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cubmV0bG9jay5uZXQvZG9jcyBvciBieSBlLW1haWwg
-YXQgY3BzQG5ldGxvY2submV0LjANBgkqhkiG9w0BAQQFAAOBgQAQrX/XDDKACtiG8XmYta3UzbM2
-xJZIwVzNmtkFLp++UOv0JhQQLdRmF/iewSf98e3ke0ugbLWrmldwpu2gpO0u9f38vf5NNwgMvOOW
-gyL1SRt/Syu0VMGAfJlOHdCM7tCs5ZL6dVb+ZKATj7i4Fp1hBWeAyNDYpQcCNJgEjTME1A==
------END CERTIFICATE-----
-
-XRamp Global CA Root
-====================
------BEGIN CERTIFICATE-----
-MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UE
-BhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2Vj
-dXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB
-dXRob3JpdHkwHhcNMDQxMTAxMTcxNDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMx
-HjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkg
-U2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
-dHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS638eMpSe2OAtp87ZOqCwu
-IR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCPKZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMx
-foArtYzAQDsRhtDLooY2YKTVMIJt2W7QDxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FE
-zG+gSqmUsE3a56k0enI4qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqs
-AxcZZPRaJSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNViPvry
-xS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud
-EwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASsjVy16bYbMDYGA1UdHwQvMC0wK6Ap
-oCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMC
-AQEwDQYJKoZIhvcNAQEFBQADggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc
-/Kh4ZzXxHfARvbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt
-qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLaIR9NmXmd4c8n
-nxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSyi6mx5O+aGtA9aZnuqCij4Tyz
-8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQO+7ETPTsJ3xCwnR8gooJybQDJbw=
------END CERTIFICATE-----
-
-Go Daddy Class 2 CA
-===================
------BEGIN CERTIFICATE-----
-MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMY
-VGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRp
-ZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkG
-A1UEBhMCVVMxITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g
-RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQAD
-ggENADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCAPVYYYwhv
-2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6wwdhFJ2+qN1j3hybX2C32
-qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXiEqITLdiOr18SPaAIBQi2XKVlOARFmR6j
-YGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmY
-vLEHZ6IVDd2gWMZEewo+YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0O
-BBYEFNLEsNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h/t2o
-atTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMu
-MTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwG
-A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wim
-PQoZ+YeAEW5p5JYXMP80kWNyOO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKt
-I3lpjbi2Tc7PTMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ
-HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mERdEr/VxqHD3VI
-Ls9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5CufReYNnyicsbkqWletNw+vHX/b
-vZ8=
------END CERTIFICATE-----
-
-Starfield Class 2 CA
-====================
------BEGIN CERTIFICATE-----
-MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzElMCMGA1UEChMc
-U3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZpZWxkIENsYXNzIDIg
-Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQwNjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBo
-MQswCQYDVQQGEwJVUzElMCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAG
-A1UECxMpU3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqG
-SIb3DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf8MOh2tTY
-bitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN+lq2cwQlZut3f+dZxkqZ
-JRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVm
-epsZGD3/cVE8MC5fvj13c7JdBmzDI1aaK4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSN
-F4Azbl5KXZnJHoe0nRrA1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HF
-MIHCMB0GA1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fRzt0f
-hvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNo
-bm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBDbGFzcyAyIENlcnRpZmljYXRpb24g
-QXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGs
-afPzWdqbAYcaT1epoXkJKtv3L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLM
-PUxA2IGvd56Deruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl
-xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynpVSJYACPq4xJD
-KVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEYWQPJIrSPnNVeKtelttQKbfi3
-QBFGmh95DmK/D5fs4C8fF5Q=
------END CERTIFICATE-----
-
-StartCom Certification Authority
-================================
------BEGIN CERTIFICATE-----
-MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN
-U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu
-ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0
-NjM2WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk
-LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg
-U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
-ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y
-o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/
-Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d
-eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt
-2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z
-6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ
-osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/
-untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc
-UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT
-37uMdBNSSwIDAQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE
-FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9jZXJ0LnN0YXJ0
-Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3JsLnN0YXJ0Y29tLm9yZy9zZnNj
-YS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFMBgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUH
-AgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRw
-Oi8vY2VydC5zdGFydGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYg
-U3RhcnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlhYmlsaXR5
-LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2YgdGhlIFN0YXJ0Q29tIENl
-cnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFpbGFibGUgYXQgaHR0cDovL2NlcnQuc3Rh
-cnRjb20ub3JnL3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilT
-dGFydENvbSBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOC
-AgEAFmyZ9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8jhvh
-3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUWFjgKXlf2Ysd6AgXm
-vB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJzewT4F+irsfMuXGRuczE6Eri8sxHk
-fY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3
-fsNrarnDy0RLrHiQi+fHLB5LEUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZ
-EoalHmdkrQYuL6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq
-yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuCO3NJo2pXh5Tl
-1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6Vum0ABj6y6koQOdjQK/W/7HW/
-lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkyShNOsF/5oirpt9P/FlUQqmMGqz9IgcgA38coro
-g14=
------END CERTIFICATE-----
-
-Taiwan GRCA
-===========
------BEGIN CERTIFICATE-----
-MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/MQswCQYDVQQG
-EwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4X
-DTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1owPzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dv
-dmVybm1lbnQgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQAD
-ggIPADCCAgoCggIBAJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qN
-w8XRIePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1qgQdW8or5
-BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKyyhwOeYHWtXBiCAEuTk8O
-1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAtsF/tnyMKtsc2AtJfcdgEWFelq16TheEfO
-htX7MfP6Mb40qij7cEwdScevLJ1tZqa2jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wov
-J5pGfaENda1UhhXcSTvxls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7
-Q3hub/FCVGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHKYS1t
-B6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoHEgKXTiCQ8P8NHuJB
-O9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThNXo+EHWbNxWCWtFJaBYmOlXqYwZE8
-lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1UdDgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNV
-HRMEBTADAQH/MDkGBGcqBwAEMTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg2
-09yewDL7MTqKUWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZ
-TulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyfqzvS/3WXy6Tj
-Zwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaKZEk9GhiHkASfQlK3T8v+R0F2
-Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFEJPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlU
-D7gsL0u8qV1bYH+Mh6XgUmMqvtg7hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6Qz
-DxARvBMB1uUO07+1EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+Hbk
-Z6MmnD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WXudpVBrkk
-7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44VbnzssQwmSNOXfJIoRIM3BKQ
-CZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDeLMDDav7v3Aun+kbfYNucpllQdSNpc5Oy
-+fwC00fmcc4QAu4njIT/rEUNE1yDMuAlpYYsfPQS
------END CERTIFICATE-----
-
-Firmaprofesional Root CA
-========================
------BEGIN CERTIFICATE-----
-MIIEVzCCAz+gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBnTELMAkGA1UEBhMCRVMxIjAgBgNVBAcT
-GUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMTOUF1dG9yaWRhZCBkZSBDZXJ0aWZp
-Y2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2ODEmMCQGCSqGSIb3DQEJARYXY2FA
-ZmlybWFwcm9mZXNpb25hbC5jb20wHhcNMDExMDI0MjIwMDAwWhcNMTMxMDI0MjIwMDAwWjCBnTEL
-MAkGA1UEBhMCRVMxIjAgBgNVBAcTGUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMT
-OUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2
-ODEmMCQGCSqGSIb3DQEJARYXY2FAZmlybWFwcm9mZXNpb25hbC5jb20wggEiMA0GCSqGSIb3DQEB
-AQUAA4IBDwAwggEKAoIBAQDnIwNvbyOlXnjOlSztlB5uCp4Bx+ow0Syd3Tfom5h5VtP8c9/Qit5V
-j1H5WuretXDE7aTt/6MNbg9kUDGvASdYrv5sp0ovFy3Tc9UTHI9ZpTQsHVQERc1ouKDAA6XPhUJH
-lShbz++AbOCQl4oBPB3zhxAwJkh91/zpnZFx/0GaqUC1N5wpIE8fUuOgfRNtVLcK3ulqTgesrBlf
-3H5idPayBQC6haD9HThuy1q7hryUZzM1gywfI834yJFxzJeL764P3CkDG8A563DtwW4O2GcLiam8
-NeTvtjS0pbbELaW+0MOUJEjb35bTALVmGotmBQ/dPz/LP6pemkr4tErvlTcbAgMBAAGjgZ8wgZww
-KgYDVR0RBCMwIYYfaHR0cDovL3d3dy5maXJtYXByb2Zlc2lvbmFsLmNvbTASBgNVHRMBAf8ECDAG
-AQH/AgEBMCsGA1UdEAQkMCKADzIwMDExMDI0MjIwMDAwWoEPMjAxMzEwMjQyMjAwMDBaMA4GA1Ud
-DwEB/wQEAwIBBjAdBgNVHQ4EFgQUMwugZtHq2s7eYpMEKFK1FH84aLcwDQYJKoZIhvcNAQEFBQAD
-ggEBAEdz/o0nVPD11HecJ3lXV7cVVuzH2Fi3AQL0M+2TUIiefEaxvT8Ub/GzR0iLjJcG1+p+o1wq
-u00vR+L4OQbJnC4xGgN49Lw4xiKLMzHwFgQEffl25EvXwOaD7FnMP97/T2u3Z36mhoEyIwOdyPdf
-wUpgpZKpsaSgYMN4h7Mi8yrrW6ntBas3D7Hi05V2Y1Z0jFhyGzflZKG+TQyTmAyX9odtsz/ny4Cm
-7YjHX1BiAuiZdBbQ5rQ58SfLyEDW44YQqSMSkuBpQWOnryULwMWSyx6Yo1q6xTMPoJcB3X/ge9YG
-VM+h4k0460tQtcsm9MracEpqoeJ5quGnM/b9Sh/22WA=
------END CERTIFICATE-----
-
-Wells Fargo Root CA
-===================
------BEGIN CERTIFICATE-----
-MIID5TCCAs2gAwIBAgIEOeSXnjANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UEBhMCVVMxFDASBgNV
-BAoTC1dlbGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhv
-cml0eTEvMC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN
-MDAxMDExMTY0MTI4WhcNMjEwMTE0MTY0MTI4WjCBgjELMAkGA1UEBhMCVVMxFDASBgNVBAoTC1dl
-bGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEv
-MC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqG
-SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDVqDM7Jvk0/82bfuUER84A4n135zHCLielTWi5MbqNQ1mX
-x3Oqfz1cQJ4F5aHiidlMuD+b+Qy0yGIZLEWukR5zcUHESxP9cMIlrCL1dQu3U+SlK93OvRw6esP3
-E48mVJwWa2uv+9iWsWCaSOAlIiR5NM4OJgALTqv9i86C1y8IcGjBqAr5dE8Hq6T54oN+J3N0Prj5
-OEL8pahbSCOz6+MlsoCultQKnMJ4msZoGK43YjdeUXWoWGPAUe5AeH6orxqg4bB4nVCMe+ez/I4j
-sNtlAHCEAQgAFG5Uhpq6zPk3EPbg3oQtnaSFN9OH4xXQwReQfhkhahKpdv0SAulPIV4XAgMBAAGj
-YTBfMA8GA1UdEwEB/wQFMAMBAf8wTAYDVR0gBEUwQzBBBgtghkgBhvt7hwcBCzAyMDAGCCsGAQUF
-BwIBFiRodHRwOi8vd3d3LndlbGxzZmFyZ28uY29tL2NlcnRwb2xpY3kwDQYJKoZIhvcNAQEFBQAD
-ggEBANIn3ZwKdyu7IvICtUpKkfnRLb7kuxpo7w6kAOnu5+/u9vnldKTC2FJYxHT7zmu1Oyl5GFrv
-m+0fazbuSCUlFLZWohDo7qd/0D+j0MNdJu4HzMPBJCGHHt8qElNvQRbn7a6U+oxy+hNH8Dx+rn0R
-OhPs7fpvcmR7nX1/Jv16+yWt6j4pf0zjAFcysLPp7VMX2YuyFA4w6OXVE8Zkr8QA1dhYJPz1j+zx
-x32l2w8n0cbyQIjmH/ZhqPRCyLk306m+LFZ4wnKbWV01QIroTmMatukgalHizqSQ33ZwmVxwQ023
-tqcZZE6St8WRPH9IFmV7Fv3L/PvZ1dZPIWU7Sn9Ho/s=
------END CERTIFICATE-----
-
-Swisscom Root CA 1
-==================
------BEGIN CERTIFICATE-----
-MIIF2TCCA8GgAwIBAgIQXAuFXAvnWUHfV8w/f52oNjANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQG
-EwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0YWwgQ2VydGlmaWNhdGUgU2Vy
-dmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3QgQ0EgMTAeFw0wNTA4MTgxMjA2MjBaFw0yNTA4
-MTgyMjA2MjBaMGQxCzAJBgNVBAYTAmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGln
-aXRhbCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAxMIIC
-IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0LmwqAzZuz8h+BvVM5OAFmUgdbI9m2BtRsiM
-MW8Xw/qabFbtPMWRV8PNq5ZJkCoZSx6jbVfd8StiKHVFXqrWW/oLJdihFvkcxC7mlSpnzNApbjyF
-NDhhSbEAn9Y6cV9Nbc5fuankiX9qUvrKm/LcqfmdmUc/TilftKaNXXsLmREDA/7n29uj/x2lzZAe
-AR81sH8A25Bvxn570e56eqeqDFdvpG3FEzuwpdntMhy0XmeLVNxzh+XTF3xmUHJd1BpYwdnP2IkC
-b6dJtDZd0KTeByy2dbcokdaXvij1mB7qWybJvbCXc9qukSbraMH5ORXWZ0sKbU/Lz7DkQnGMU3nn
-7uHbHaBuHYwadzVcFh4rUx80i9Fs/PJnB3r1re3WmquhsUvhzDdf/X/NTa64H5xD+SpYVUNFvJbN
-cA78yeNmuk6NO4HLFWR7uZToXTNShXEuT46iBhFRyePLoW4xCGQMwtI89Tbo19AOeCMgkckkKmUp
-WyL3Ic6DXqTz3kvTaI9GdVyDCW4pa8RwjPWd1yAv/0bSKzjCL3UcPX7ape8eYIVpQtPM+GP+HkM5
-haa2Y0EQs3MevNP6yn0WR+Kn1dCjigoIlmJWbjTb2QK5MHXjBNLnj8KwEUAKrNVxAmKLMb7dxiNY
-MUJDLXT5xp6mig/p/r+D5kNXJLrvRjSq1xIBOO0CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYw
-HQYDVR0hBBYwFDASBgdghXQBUwABBgdghXQBUwABMBIGA1UdEwEB/wQIMAYBAf8CAQcwHwYDVR0j
-BBgwFoAUAyUv3m+CATpcLNwroWm1Z9SM0/0wHQYDVR0OBBYEFAMlL95vggE6XCzcK6FptWfUjNP9
-MA0GCSqGSIb3DQEBBQUAA4ICAQA1EMvspgQNDQ/NwNurqPKIlwzfky9NfEBWMXrrpA9gzXrzvsMn
-jgM+pN0S734edAY8PzHyHHuRMSG08NBsl9Tpl7IkVh5WwzW9iAUPWxAaZOHHgjD5Mq2eUCzneAXQ
-MbFamIp1TpBcahQq4FJHgmDmHtqBsfsUC1rxn9KVuj7QG9YVHaO+htXbD8BJZLsuUBlL0iT43R4H
-VtA4oJVwIHaM190e3p9xxCPvgxNcoyQVTSlAPGrEqdi3pkSlDfTgnXceQHAm/NrZNuR55LU/vJtl
-vrsRls/bxig5OgjOR1tTWsWZ/l2p3e9M1MalrQLmjAcSHm8D0W+go/MpvRLHUKKwf4ipmXeascCl
-OS5cfGniLLDqN2qk4Vrh9VDlg++luyqI54zb/W1elxmofmZ1a3Hqv7HHb6D0jqTsNFFbjCYDcKF3
-1QESVwA12yPeDooomf2xEG9L/zgtYE4snOtnta1J7ksfrK/7DZBaZmBwXarNeNQk7shBoJMBkpxq
-nvy5JMWzFYJ+vq6VK+uxwNrjAWALXmmshFZhvnEX/h0TD/7Gh0Xp/jKgGg0TpJRVcaUWi7rKibCy
-x/yP2FS1k2Kdzs9Z+z0YzirLNRWCXf9UIltxUvu3yf5gmwBBZPCqKuy2QkPOiWaByIufOVQDJdMW
-NY6E0F/6MBr1mmz0DlP5OlvRHA==
------END CERTIFICATE-----
-
-DigiCert Assured ID Root CA
-===========================
------BEGIN CERTIFICATE-----
-MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQG
-EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw
-IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzEx
-MTEwMDAwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL
-ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0Ew
-ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7cJpSIqvTO
-9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYPmDI2dsze3Tyoou9q+yHy
-UmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW
-/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpy
-oeb6pNnVFzF1roV9Iq4/AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whf
-GHdPAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRF
-66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzANBgkq
-hkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRCdWKuh+vy1dneVrOfzM4UKLkNl2Bc
-EkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTffwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38Fn
-SbNd67IJKusm7Xi+fT8r87cmNW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i
-8b5QZ7dsvfPxH2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe
-+o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g==
------END CERTIFICATE-----
-
-DigiCert Global Root CA
-=======================
------BEGIN CERTIFICATE-----
-MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQG
-EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw
-HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBDQTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAw
-MDAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3
-dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkq
-hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsBCSDMAZOn
-TjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97nh6Vfe63SKMI2tavegw5
-BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt43C/dxC//AH2hdmoRBBYMql1GNXRor5H
-4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7PT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y
-7vrTC0LUq7dBMtoM1O/4gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQAB
-o2MwYTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbRTLtm
-8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDQYJKoZIhvcNAQEF
-BQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/EsrhMAtudXH/vTBH1jLuG2cenTnmCmr
-EbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIt
-tep3Sp+dWOIrWcBAI+0tKIJFPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886
-UAb3LujEV0lsYSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
-CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
------END CERTIFICATE-----
-
-DigiCert High Assurance EV Root CA
-==================================
------BEGIN CERTIFICATE-----
-MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQG
-EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSsw
-KQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5jZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAw
-MFoXDTMxMTExMDAwMDAwMFowbDELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZ
-MBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFu
-Y2UgRVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm+9S75S0t
-Mqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTWPNt0OKRKzE0lgvdKpVMS
-OO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEMxChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3
-MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFBIk5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQ
-NAQTXKFx01p8VdteZOE3hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUe
-h10aUAsgEsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMB
-Af8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaAFLE+w2kD+L9HAdSY
-JhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3NecnzyIZgYIVyHbIUf4KmeqvxgydkAQ
-V8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6zeM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFp
-myPInngiK3BD41VHMWEZ71jFhS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkK
-mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
-vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K
------END CERTIFICATE-----
-
-Certplus Class 2 Primary CA
-===========================
------BEGIN CERTIFICATE-----
-MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAwPTELMAkGA1UE
-BhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFzcyAyIFByaW1hcnkgQ0EwHhcN
-OTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2Vy
-dHBsdXMxGzAZBgNVBAMTEkNsYXNzIDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP
-ADCCAQoCggEBANxQltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR
-5aiRVhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyLkcAbmXuZ
-Vg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCdEgETjdyAYveVqUSISnFO
-YFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yasH7WLO7dDWWuwJKZtkIvEcupdM5i3y95e
-e++U8Rs+yskhwcWYAqqi9lt3m/V+llU0HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRME
-CDAGAQH/AgEKMAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJ
-YIZIAYb4QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMuY29t
-L0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/AN9WM2K191EBkOvD
-P9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8yfFC82x/xXp8HVGIutIKPidd3i1R
-TtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMRFcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+
-7UCmnYR0ObncHoUW2ikbhiMAybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW
-//1IMwrh3KWBkJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7
-l7+ijrRU
------END CERTIFICATE-----
-
-DST Root CA X3
-==============
------BEGIN CERTIFICATE-----
-MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/MSQwIgYDVQQK
-ExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMTDkRTVCBSb290IENBIFgzMB4X
-DTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVowPzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1
-cmUgVHJ1c3QgQ28uMRcwFQYDVQQDEw5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQAD
-ggEPADCCAQoCggEBAN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmT
-rE4Orz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEqOLl5CjH9
-UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9bxiqKqy69cK3FCxolkHRy
-xXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40d
-utolucbY38EVAjqr2m7xPi71XAicPNaDaeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0T
-AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQ
-MA0GCSqGSIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69ikug
-dB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXrAvHRAosZy5Q6XkjE
-GB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZzR8srzJmwN0jP41ZL9c8PDHIyh8bw
-RLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubS
-fZGL+T0yjWW06XyxV3bqxbYoOb8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ
------END CERTIFICATE-----
-
-DST ACES CA X6
-==============
------BEGIN CERTIFICATE-----
-MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBbMQswCQYDVQQG
-EwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QxETAPBgNVBAsTCERTVCBBQ0VT
-MRcwFQYDVQQDEw5EU1QgQUNFUyBDQSBYNjAeFw0wMzExMjAyMTE5NThaFw0xNzExMjAyMTE5NTha
-MFsxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdDERMA8GA1UE
-CxMIRFNUIEFDRVMxFzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjANBgkqhkiG9w0BAQEFAAOC
-AQ8AMIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5WZFcRt2SPp/5DgO0PWGSvSMmtWPuktKe1jzI
-DZBfZIGxqAgNTNj50wUoUrQBJcWVHAx+PhCEdc/BGZFjz+iokYi5Q1K7gLFViYsx+tC3dr5BPTCa
-pCIlF3PoHuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZHfAjIgrrep4c9oW24MFbCswKBXy314pow
-GCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4aahELfrd755jWjHZvwTvbUJN+5dCOHze4vbrGn2zpfDPy
-MjwmR/onJALJfh1biEITajV8fTXpLmaRcpPVMibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1Ud
-EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rkc3Qu
-Y29tMGIGA1UdIARbMFkwVwYKYIZIAWUDAgEBATBJMEcGCCsGAQUFBwIBFjtodHRwOi8vd3d3LnRy
-dXN0ZHN0LmNvbS9jZXJ0aWZpY2F0ZXMvcG9saWN5L0FDRVMtaW5kZXguaHRtbDAdBgNVHQ4EFgQU
-CXIGThhDD+XWzMNqizF7eI+og7gwDQYJKoZIhvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V2
-5FYrnJmQ6AgwbN99Pe7lv7UkQIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6t
-Fr8hlxCBPeP/h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8smk/f3rPanTK+gQq
-nExaBqXpIK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir42NInPRmJX1p7ijvMDNpRrscL9yuwNwXs
-vFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf29w4LTJxoeHtxMcfrHuBnQfO3
-oKfN5XozNmr6mis=
------END CERTIFICATE-----
-
-SwissSign Gold CA - G2
-======================
------BEGIN CERTIFICATE-----
-MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNVBAYTAkNIMRUw
-EwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2lnbiBHb2xkIENBIC0gRzIwHhcN
-MDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBFMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dp
-c3NTaWduIEFHMR8wHQYDVQQDExZTd2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0B
-AQEFAAOCAg8AMIICCgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUq
-t2/876LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+bbqBHH5C
-jCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c6bM8K8vzARO/Ws/BtQpg
-vd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqEemA8atufK+ze3gE/bk3lUIbLtK/tREDF
-ylqM2tIrfKjuvqblCqoOpd8FUrdVxyJdMmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvR
-AiTysybUa9oEVeXBCsdtMDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuend
-jIj3o02yMszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69yFGkO
-peUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPiaG59je883WX0XaxR
-7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxMgI93e2CaHt+28kgeDrpOVG2Y4OGi
-GqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUw
-AwEB/zAdBgNVHQ4EFgQUWyV7lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64
-OfPAeGZe6Drn8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov
-L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe645R88a7A3hfm
-5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczOUYrHUDFu4Up+GC9pWbY9ZIEr
-44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOf
-Mke6UiI0HTJ6CVanfCU2qT1L2sCCbwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6m
-Gu6uLftIdxf+u+yvGPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxp
-mo/a77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCChdiDyyJk
-vC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid392qgQmwLOM7XdVAyksLf
-KzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEppLd6leNcG2mqeSz53OiATIgHQv2ieY2Br
-NU0LbbqhPcCT4H8js1WtciVORvnSFu+wZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6Lqj
-viOvrv1vA+ACOzB2+httQc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ
------END CERTIFICATE-----
-
-SwissSign Silver CA - G2
-========================
------BEGIN CERTIFICATE-----
-MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCQ0gxFTAT
-BgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMB4X
-DTA2MTAyNTA4MzI0NloXDTM2MTAyNTA4MzI0NlowRzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3
-aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkqhkiG
-9w0BAQEFAAOCAg8AMIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dOcbpLj6VzHVxumK4DV644
-N0MvFz0fyM5oEMF4rhkDKxD6LHmD9ui5aLlV8gREpzn5/ASLHvGiTSf5YXu6t+WiE7brYT7QbNHm
-+/pe7R20nqA1W6GSy/BJkv6FCgU+5tkL4k+73JU3/JHpMjUi0R86TieFnbAVlDLaYQ1HTWBCrpJH
-6INaUFjpiou5XaHc3ZlKHzZnu0jkg7Y360g6rw9njxcH6ATK72oxh9TAtvmUcXtnZLi2kUpCe2Uu
-MGoM9ZDulebyzYLs2aFK7PayS+VFheZteJMELpyCbTapxDFkH4aDCyr0NQp4yVXPQbBH6TCfmb5h
-qAaEuSh6XzjZG6k4sIN/c8HDO0gqgg8hm7jMqDXDhBuDsz6+pJVpATqJAHgE2cn0mRmrVn5bi4Y5
-FZGkECwJMoBgs5PAKrYYC51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRHHTBs
-ROopN4WSaGa8gzj+ezku01DwH/teYLappvonQfGbGHLy9YR0SslnxFSuSGTfjNFusB3hB48IHpmc
-celM2KX3RxIfdNFRnobzwqIjQAtz20um53MGjMGg6cFZrEb65i/4z3GcRm25xBWNOHkDRUjvxF3X
-CO6HOSKGsg0PWEP3calILv3q1h8CAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/
-BAUwAwEB/zAdBgNVHQ4EFgQUF6DNweRBtjpbO8tFnb0cwpj6hlgwHwYDVR0jBBgwFoAUF6DNweRB
-tjpbO8tFnb0cwpj6hlgwRgYDVR0gBD8wPTA7BglghXQBWQEDAQEwLjAsBggrBgEFBQcCARYgaHR0
-cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBAHPGgeAn0i0P
-4JUw4ppBf1AsX19iYamGamkYDHRJ1l2E6kFSGG9YrVBWIGrGvShpWJHckRE1qTodvBqlYJ7YH39F
-kWnZfrt4csEGDyrOj4VwYaygzQu4OSlWhDJOhrs9xCrZ1x9y7v5RoSJBsXECYxqCsGKrXlcSH9/L
-3XWgwF15kIwb4FDm3jH+mHtwX6WQ2K34ArZv02DdQEsixT2tOnqfGhpHkXkzuoLcMmkDlm4fS/Bx
-/uNncqCxv1yL5PqZIseEuRuNI5c/7SXgz2W79WEE790eslpBIlqhn10s6FvJbakMDHiqYMZWjwFa
-DGi8aRl5xB9+lwW/xekkUV7U1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHkFlt4dR2Xem1ZqSqP
-e97Dh4kQmUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQRdAtq/gsD/KNVV4n+Ssuu
-WxcFyPKNIzFTONItaj+CuY0IavdeQXRuwxF+B6wpYJE/OMpXEA29MC/HpeZBoNquBYeaoKRlbEwJ
-DIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+hAhm0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ub
-DgEj8Z+7fNzcbBGXJbLytGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u
------END CERTIFICATE-----
-
-GeoTrust Primary Certification Authority
-========================================
------BEGIN CERTIFICATE-----
-MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQG
-EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMoR2VvVHJ1c3QgUHJpbWFyeSBD
-ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjExMjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgx
-CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQ
-cmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
-CgKCAQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9AWbK7hWN
-b6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjAZIVcFU2Ix7e64HXprQU9
-nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE07e9GceBrAqg1cmuXm2bgyxx5X9gaBGge
-RwLmnWDiNpcB3841kt++Z8dtd1k7j53WkBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGt
-tm/81w7a4DSwDRp35+MImO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
-AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJKoZI
-hvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ16CePbJC/kRYkRj5K
-Ts4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl4b7UVXGYNTq+k+qurUKykG/g/CFN
-NWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6KoKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHa
-Floxt/m0cYASSJlyc1pZU8FjUjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG
-1riR/aYNKxoUAT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk=
------END CERTIFICATE-----
-
-thawte Primary Root CA
-======================
------BEGIN CERTIFICATE-----
-MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCBqTELMAkGA1UE
-BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2
-aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv
-cml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3
-MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwg
-SW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMv
-KGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMT
-FnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCs
-oPD7gFnUnMekz52hWXMJEEUMDSxuaPFsW0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ
-1CRfBsDMRJSUjQJib+ta3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGc
-q/gcfomk6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6Sk/K
-aAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94JNqR32HuHUETVPm4p
-afs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYD
-VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XPr87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUF
-AAOCAQEAeRHAS7ORtvzw6WfUDW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeE
-uzLlQRHAd9mzYJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX
-xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2/qxAeeWsEG89
-jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/LHbTY5xZ3Y+m4Q6gLkH3LpVH
-z7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7jVaMaA==
------END CERTIFICATE-----
-
-VeriSign Class 3 Public Primary Certification Authority - G5
-============================================================
------BEGIN CERTIFICATE-----
-MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE
-BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO
-ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk
-IHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRp
-ZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCB
-yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2ln
-biBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBh
-dXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmlt
-YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
-ggEKAoIBAQCvJAgIKXo1nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKz
-j/i5Vbext0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIzSdhD
-Y2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQGBO+QueQA5N06tRn/
-Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+rCpSx4/VBEnkjWNHiDxpg8v+R70r
-fk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/
-BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2Uv
-Z2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy
-aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKvMzEzMA0GCSqG
-SIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzEp6B4Eq1iDkVwZMXnl2YtmAl+
-X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKE
-KQsTb47bDN0lAtukixlE0kF6BWlKWE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiC
-Km0oHw0LxOXnGiYZ4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vE
-ZV8NhnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq
------END CERTIFICATE-----
-
-SecureTrust CA
-==============
------BEGIN CERTIFICATE-----
-MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBIMQswCQYDVQQG
-EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xFzAVBgNVBAMTDlNlY3VyZVRy
-dXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIzMTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAe
-BgNVBAoTF1NlY3VyZVRydXN0IENvcnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCC
-ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQX
-OZEzZum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO0gMdA+9t
-DWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIaowW8xQmxSPmjL8xk037uH
-GFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b
-01k/unK8RCSc43Oz969XL0Imnal0ugBS8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmH
-ursCAwEAAaOBnTCBmjATBgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/
-BAUwAwEB/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCegJYYj
-aHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ
-KoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt36Z3q059c4EVlew3KW+JwULKUBRSu
-SceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHf
-mbx8IVQr5Fiiu1cprp6poxkmD5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZ
-nMUFdAvnZyPSCPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR
-3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE=
------END CERTIFICATE-----
-
-Secure Global CA
-================
------BEGIN CERTIFICATE-----
-MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQG
-EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBH
-bG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkxMjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEg
-MB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwg
-Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jx
-YDiJiQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa/FHtaMbQ
-bqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJjnIFHovdRIWCQtBJwB1g
-8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnIHmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYV
-HDGA76oYa8J719rO+TMg1fW9ajMtgQT7sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi
-0XPnj3pDAgMBAAGjgZ0wgZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud
-EwEB/wQFMAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCswKaAn
-oCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsGAQQBgjcVAQQDAgEA
-MA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0LURYD7xh8yOOvaliTFGCRsoTciE6+
-OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXOH0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cn
-CDpOGR86p1hcF895P4vkp9MmI50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/5
-3CYNv6ZHdAbYiNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc
-f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW
------END CERTIFICATE-----
-
-COMODO Certification Authority
-==============================
------BEGIN CERTIFICATE-----
-MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCBgTELMAkGA1UE
-BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG
-A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNVBAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1
-dGhvcml0eTAeFw0wNjEyMDEwMDAwMDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEb
-MBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFD
-T01PRE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
-MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3UcEbVASY06m/weaKXTuH
-+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI2GqGd0S7WWaXUF601CxwRM/aN5VCaTww
-xHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV
-4EajcNxo2f8ESIl33rXp+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA
-1KGzqSX+DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5OnKVI
-rLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW/zAOBgNVHQ8BAf8E
-BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6gPKA6hjhodHRwOi8vY3JsLmNvbW9k
-b2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOC
-AQEAPpiem/Yb6dc5t3iuHXIYSdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CP
-OGEIqB6BCsAvIC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/
-RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4zJVSk/BwJVmc
-IGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5ddBA6+C4OmF4O5MBKgxTMVBbkN
-+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IBZQ==
------END CERTIFICATE-----
-
-Network Solutions Certificate Authority
-=======================================
------BEGIN CERTIFICATE-----
-MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQG
-EwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydOZXR3b3Jr
-IFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMx
-MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu
-MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G
-CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwzc7MEL7xx
-jOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPPOCwGJgl6cvf6UDL4wpPT
-aaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rlmGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXT
-crA/vGp97Eh/jcOrqnErU2lBUzS1sLnFBgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc
-/Qzpf14Dl847ABSHJ3A4qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMB
-AAGjgZcwgZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIBBjAP
-BgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwubmV0c29sc3NsLmNv
-bS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3JpdHkuY3JsMA0GCSqGSIb3DQEBBQUA
-A4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc86fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q
-4LqILPxFzBiwmZVRDuwduIj/h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/
-GGUsyfJj4akH/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv
-wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHNpGxlaKFJdlxD
-ydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey
------END CERTIFICATE-----
-
-WellsSecure Public Root Certificate Authority
-=============================================
------BEGIN CERTIFICATE-----
-MIIEvTCCA6WgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoM
-F1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYw
-NAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN
-MDcxMjEzMTcwNzU0WhcNMjIxMjE0MDAwNzU0WjCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dl
-bGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYD
-VQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G
-CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDub7S9eeKPCCGeOARBJe+rWxxTkqxtnt3CxC5FlAM1
-iGd0V+PfjLindo8796jE2yljDpFoNoqXjopxaAkH5OjUDk/41itMpBb570OYj7OeUt9tkTmPOL13
-i0Nj67eT/DBMHAGTthP796EfvyXhdDcsHqRePGj4S78NuR4uNuip5Kf4D8uCdXw1LSLWwr8L87T8
-bJVhHlfXBIEyg1J55oNjz7fLY4sR4r1e6/aN7ZVyKLSsEmLpSjPmgzKuBXWVvYSV2ypcm44uDLiB
-K0HmOFafSZtsdvqKXfcBeYF8wYNABf5x/Qw/zE5gCQ5lRxAvAcAFP4/4s0HvWkJ+We/SlwxlAgMB
-AAGjggE0MIIBMDAPBgNVHRMBAf8EBTADAQH/MDkGA1UdHwQyMDAwLqAsoCqGKGh0dHA6Ly9jcmwu
-cGtpLndlbGxzZmFyZ28uY29tL3dzcHJjYS5jcmwwDgYDVR0PAQH/BAQDAgHGMB0GA1UdDgQWBBQm
-lRkQ2eihl5H/3BnZtQQ+0nMKajCBsgYDVR0jBIGqMIGngBQmlRkQ2eihl5H/3BnZtQQ+0nMKaqGB
-i6SBiDCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRww
-GgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMg
-Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHmCAQEwDQYJKoZIhvcNAQEFBQADggEBALkVsUSRzCPI
-K0134/iaeycNzXK7mQDKfGYZUMbVmO2rvwNa5U3lHshPcZeG1eMd/ZDJPHV3V3p9+N701NX3leZ0
-bh08rnyd2wIDBSxxSyU+B+NemvVmFymIGjifz6pBA4SXa5M4esowRBskRDPQ5NHcKDj0E0M1NSlj
-qHyita04pO2t/caaH/+Xc/77szWnk4bGdpEA5qxRFsQnMlzbc9qlk1eOPm01JghZ1edE13YgY+es
-E2fDbbFwRnzVlhE9iW9dqKHrjQrawx0zbKPqZxmamX9LPYNRKh3KL4YMon4QLSvUFpULB6ouFJJJ
-tylv2G0xffX8oRAHh84vWdw+WNs=
------END CERTIFICATE-----
-
-COMODO ECC Certification Authority
-==================================
------BEGIN CERTIFICATE-----
-MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTELMAkGA1UEBhMC
-R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE
-ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBB
-dXRob3JpdHkwHhcNMDgwMzA2MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0Ix
-GzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR
-Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRo
-b3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSRFtSrYpn1PlILBs5BAH+X
-4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0JcfRK9ChQtP6IHG4/bC8vCVlbpVsLM5ni
-wz2J+Wos77LTBumjQjBAMB0GA1UdDgQWBBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8E
-BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VG
-FAkK+qDmfQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdvGDeA
-U/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY=
------END CERTIFICATE-----
-
-IGC/A
-=====
------BEGIN CERTIFICATE-----
-MIIEAjCCAuqgAwIBAgIFORFFEJQwDQYJKoZIhvcNAQEFBQAwgYUxCzAJBgNVBAYTAkZSMQ8wDQYD
-VQQIEwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVE
-Q1NTSTEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZy
-MB4XDTAyMTIxMzE0MjkyM1oXDTIwMTAxNzE0MjkyMlowgYUxCzAJBgNVBAYTAkZSMQ8wDQYDVQQI
-EwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVEQ1NT
-STEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZyMIIB
-IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsh/R0GLFMzvABIaIs9z4iPf930Pfeo2aSVz2
-TqrMHLmh6yeJ8kbpO0px1R2OLc/mratjUMdUC24SyZA2xtgv2pGqaMVy/hcKshd+ebUyiHDKcMCW
-So7kVc0dJ5S/znIq7Fz5cyD+vfcuiWe4u0dzEvfRNWk68gq5rv9GQkaiv6GFGvm/5P9JhfejcIYy
-HF2fYPepraX/z9E0+X1bF8bc1g4oa8Ld8fUzaJ1O/Id8NhLWo4DoQw1VYZTqZDdH6nfK0LJYBcNd
-frGoRpAxVs5wKpayMLh35nnAvSk7/ZR3TL0gzUEl4C7HG7vupARB0l2tEmqKm0f7yd1GQOGdPDPQ
-tQIDAQABo3cwdTAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBRjAVBgNVHSAEDjAMMAoGCCqB
-egF5AQEBMB0GA1UdDgQWBBSjBS8YYFDCiQrdKyFP/45OqDAxNjAfBgNVHSMEGDAWgBSjBS8YYFDC
-iQrdKyFP/45OqDAxNjANBgkqhkiG9w0BAQUFAAOCAQEABdwm2Pp3FURo/C9mOnTgXeQp/wYHE4RK
-q89toB9RlPhJy3Q2FLwV3duJL92PoF189RLrn544pEfMs5bZvpwlqwN+Mw+VgQ39FuCIvjfwbF3Q
-MZsyK10XZZOYYLxuj7GoPB7ZHPOpJkL5ZB3C55L29B5aqhlSXa/oovdgoPaN8In1buAKBQGVyYsg
-Crpa/JosPL3Dt8ldeCUFP1YUmwza+zpI/pdpXsoQhvdOlgQITeywvl3cO45Pwf2aNjSaTFR+FwNI
-lQgRHAdvhQh+XU3Endv7rs6y0bO4g2wdsrN58dhwmX7wEwLOXt1R0982gaEbeC9xs/FZTEYYKKuF
-0mBWWg==
------END CERTIFICATE-----
-
-Security Communication EV RootCA1
-=================================
------BEGIN CERTIFICATE-----
-MIIDfTCCAmWgAwIBAgIBADANBgkqhkiG9w0BAQUFADBgMQswCQYDVQQGEwJKUDElMCMGA1UEChMc
-U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEqMCgGA1UECxMhU2VjdXJpdHkgQ29tbXVuaWNh
-dGlvbiBFViBSb290Q0ExMB4XDTA3MDYwNjAyMTIzMloXDTM3MDYwNjAyMTIzMlowYDELMAkGA1UE
-BhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xKjAoBgNVBAsTIVNl
-Y3VyaXR5IENvbW11bmljYXRpb24gRVYgUm9vdENBMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
-AQoCggEBALx/7FebJOD+nLpCeamIivqA4PUHKUPqjgo0No0c+qe1OXj/l3X3L+SqawSERMqm4miO
-/VVQYg+kcQ7OBzgtQoVQrTyWb4vVog7P3kmJPdZkLjjlHmy1V4qe70gOzXppFodEtZDkBp2uoQSX
-WHnvIEqCa4wiv+wfD+mEce3xDuS4GBPMVjZd0ZoeUWs5bmB2iDQL87PRsJ3KYeJkHcFGB7hj3R4z
-ZbOOCVVSPbW9/wfrrWFVGCypaZhKqkDFMxRldAD5kd6vA0jFQFTcD4SQaCDFkpbcLuUCRarAX1T4
-bepJz11sS6/vmsJWXMY1VkJqMF/Cq/biPT+zyRGPMUzXn0kCAwEAAaNCMEAwHQYDVR0OBBYEFDVK
-9U2vP9eCOKyrcWUXdYydVZPmMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqG
-SIb3DQEBBQUAA4IBAQCoh+ns+EBnXcPBZsdAS5f8hxOQWsTvoMpfi7ent/HWtWS3irO4G8za+6xm
-iEHO6Pzk2x6Ipu0nUBsCMCRGef4Eh3CXQHPRwMFXGZpppSeZq51ihPZRwSzJIxXYKLerJRO1RuGG
-Av8mjMSIkh1W/hln8lXkgKNrnKt34VFxDSDbEJrbvXZ5B3eZKK2aXtqxT0QsNY6llsf9g/BYxnnW
-mHyojf6GPgcWkuF75x3sM3Z+Qi5KhfmRiWiEA4Glm5q+4zfFVKtWOxgtQaQM+ELbmaDgcm+7XeEW
-T1MKZPlO9L9OVL14bIjqv5wTJMJwaaJ/D8g8rQjJsJhAoyrniIPtd490
------END CERTIFICATE-----
-
-OISTE WISeKey Global Root GA CA
-===============================
------BEGIN CERTIFICATE-----
-MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCBijELMAkGA1UE
-BhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHlyaWdodCAoYykgMjAwNTEiMCAG
-A1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBH
-bG9iYWwgUm9vdCBHQSBDQTAeFw0wNTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYD
-VQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIw
-IAYDVQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5
-IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy0+zAJs9
-Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxRVVuuk+g3/ytr6dTqvirdqFEr12bDYVxg
-Asj1znJ7O7jyTmUIms2kahnBAbtzptf2w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbD
-d50kc3vkDIzh2TbhmYsFmQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ
-/yxViJGg4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t94B3R
-LoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw
-AwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ
-KoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOxSPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vIm
-MMkQyh2I+3QZH4VFvbBsUfk2ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4
-+vg1YFkCExh8vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa
-hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZiFj4A4xylNoEY
-okxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ/L7fCg0=
------END CERTIFICATE-----
-
-Microsec e-Szigno Root CA
-=========================
------BEGIN CERTIFICATE-----
-MIIHqDCCBpCgAwIBAgIRAMy4579OKRr9otxmpRwsDxEwDQYJKoZIhvcNAQEFBQAwcjELMAkGA1UE
-BhMCSFUxETAPBgNVBAcTCEJ1ZGFwZXN0MRYwFAYDVQQKEw1NaWNyb3NlYyBMdGQuMRQwEgYDVQQL
-EwtlLVN6aWdubyBDQTEiMCAGA1UEAxMZTWljcm9zZWMgZS1Temlnbm8gUm9vdCBDQTAeFw0wNTA0
-MDYxMjI4NDRaFw0xNzA0MDYxMjI4NDRaMHIxCzAJBgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVz
-dDEWMBQGA1UEChMNTWljcm9zZWMgTHRkLjEUMBIGA1UECxMLZS1Temlnbm8gQ0ExIjAgBgNVBAMT
-GU1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
-AQDtyADVgXvNOABHzNuEwSFpLHSQDCHZU4ftPkNEU6+r+ICbPHiN1I2uuO/TEdyB5s87lozWbxXG
-d36hL+BfkrYn13aaHUM86tnsL+4582pnS4uCzyL4ZVX+LMsvfUh6PXX5qqAnu3jCBspRwn5mS6/N
-oqdNAoI/gqyFxuEPkEeZlApxcpMqyabAvjxWTHOSJ/FrtfX9/DAFYJLG65Z+AZHCabEeHXtTRbjc
-QR/Ji3HWVBTji1R4P770Yjtb9aPs1ZJ04nQw7wHb4dSrmZsqa/i9phyGI0Jf7Enemotb9HI6QMVJ
-PqW+jqpx62z69Rrkav17fVVA71hu5tnVvCSrwe+3AgMBAAGjggQ3MIIEMzBnBggrBgEFBQcBAQRb
-MFkwKAYIKwYBBQUHMAGGHGh0dHBzOi8vcmNhLmUtc3ppZ25vLmh1L29jc3AwLQYIKwYBBQUHMAKG
-IWh0dHA6Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNydDAPBgNVHRMBAf8EBTADAQH/MIIBcwYD
-VR0gBIIBajCCAWYwggFiBgwrBgEEAYGoGAIBAQEwggFQMCgGCCsGAQUFBwIBFhxodHRwOi8vd3d3
-LmUtc3ppZ25vLmh1L1NaU1ovMIIBIgYIKwYBBQUHAgIwggEUHoIBEABBACAAdABhAG4A+gBzAO0A
-dAB2AOEAbgB5ACAA6QByAHQAZQBsAG0AZQB6AOkAcwDpAGgAZQB6ACAA6QBzACAAZQBsAGYAbwBn
-AGEAZADhAHMA4QBoAG8AegAgAGEAIABTAHoAbwBsAGcA4QBsAHQAYQB0APMAIABTAHoAbwBsAGcA
-4QBsAHQAYQB0AOEAcwBpACAAUwB6AGEAYgDhAGwAeQB6AGEAdABhACAAcwB6AGUAcgBpAG4AdAAg
-AGsAZQBsAGwAIABlAGwAagDhAHIAbgBpADoAIABoAHQAdABwADoALwAvAHcAdwB3AC4AZQAtAHMA
-egBpAGcAbgBvAC4AaAB1AC8AUwBaAFMAWgAvMIHIBgNVHR8EgcAwgb0wgbqggbeggbSGIWh0dHA6
-Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNybIaBjmxkYXA6Ly9sZGFwLmUtc3ppZ25vLmh1L0NO
-PU1pY3Jvc2VjJTIwZS1Temlnbm8lMjBSb290JTIwQ0EsT1U9ZS1Temlnbm8lMjBDQSxPPU1pY3Jv
-c2VjJTIwTHRkLixMPUJ1ZGFwZXN0LEM9SFU/Y2VydGlmaWNhdGVSZXZvY2F0aW9uTGlzdDtiaW5h
-cnkwDgYDVR0PAQH/BAQDAgEGMIGWBgNVHREEgY4wgYuBEGluZm9AZS1zemlnbm8uaHWkdzB1MSMw
-IQYDVQQDDBpNaWNyb3NlYyBlLVN6aWduw7MgUm9vdCBDQTEWMBQGA1UECwwNZS1TemlnbsOzIEhT
-WjEWMBQGA1UEChMNTWljcm9zZWMgS2Z0LjERMA8GA1UEBxMIQnVkYXBlc3QxCzAJBgNVBAYTAkhV
-MIGsBgNVHSMEgaQwgaGAFMegSXUWYYTbMUuE0vE3QJDvTtz3oXakdDByMQswCQYDVQQGEwJIVTER
-MA8GA1UEBxMIQnVkYXBlc3QxFjAUBgNVBAoTDU1pY3Jvc2VjIEx0ZC4xFDASBgNVBAsTC2UtU3pp
-Z25vIENBMSIwIAYDVQQDExlNaWNyb3NlYyBlLVN6aWdubyBSb290IENBghEAzLjnv04pGv2i3Gal
-HCwPETAdBgNVHQ4EFgQUx6BJdRZhhNsxS4TS8TdAkO9O3PcwDQYJKoZIhvcNAQEFBQADggEBANMT
-nGZjWS7KXHAM/IO8VbH0jgdsZifOwTsgqRy7RlRw7lrMoHfqaEQn6/Ip3Xep1fvj1KcExJW4C+FE
-aGAHQzAxQmHl7tnlJNUb3+FKG6qfx1/4ehHqE5MAyopYse7tDk2016g2JnzgOsHVV4Lxdbb9iV/a
-86g4nzUGCM4ilb7N1fy+W955a9x6qWVmvrElWl/tftOsRm1M9DKHtCAE4Gx4sHfRhUZLphK3dehK
-yVZs15KrnfVJONJPU+NVkBHbmJbGSfI+9J8b4PeI3CVimUTYc78/MPMMNz7UwiiAc7EBt51alhQB
-S6kRnSlqLtBdgcDPsiBDxwPgN05dCtxZICU=
------END CERTIFICATE-----
-
-Certigna
-========
------BEGIN CERTIFICATE-----
-MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNVBAYTAkZSMRIw
-EAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4XDTA3MDYyOTE1MTMwNVoXDTI3
-MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwI
-Q2VydGlnbmEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7q
-XOEm7RFHYeGifBZ4QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyH
-GxnygQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbwzBfsV1/p
-ogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q130yGLMLLGq/jj8UEYkg
-DncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKf
-Irjxwo1p3Po6WAbfAgMBAAGjgbwwgbkwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQ
-tCRZvgHyUtVF9lo53BEwZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJ
-BgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzjAQ/J
-SP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQUFAAOCAQEA
-hQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8hbV6lUmPOEvjvKtpv6zf+EwLHyzs+
-ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFncfca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1klu
-PBS1xp81HlDQwY9qcEQCYsuuHWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY
-1gkIl2PlwS6wt0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw
-WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg==
------END CERTIFICATE-----
-
-AC Ra\xC3\xADz Certic\xC3\xA1mara S.A.
-======================================
------BEGIN CERTIFICATE-----
-MIIGZjCCBE6gAwIBAgIPB35Sk3vgFeNX8GmMy+wMMA0GCSqGSIb3DQEBBQUAMHsxCzAJBgNVBAYT
-AkNPMUcwRQYDVQQKDD5Tb2NpZWRhZCBDYW1lcmFsIGRlIENlcnRpZmljYWNpw7NuIERpZ2l0YWwg
-LSBDZXJ0aWPDoW1hcmEgUy5BLjEjMCEGA1UEAwwaQUMgUmHDrXogQ2VydGljw6FtYXJhIFMuQS4w
-HhcNMDYxMTI3MjA0NjI5WhcNMzAwNDAyMjE0MjAyWjB7MQswCQYDVQQGEwJDTzFHMEUGA1UECgw+
-U29jaWVkYWQgQ2FtZXJhbCBkZSBDZXJ0aWZpY2FjacOzbiBEaWdpdGFsIC0gQ2VydGljw6FtYXJh
-IFMuQS4xIzAhBgNVBAMMGkFDIFJhw616IENlcnRpY8OhbWFyYSBTLkEuMIICIjANBgkqhkiG9w0B
-AQEFAAOCAg8AMIICCgKCAgEAq2uJo1PMSCMI+8PPUZYILrgIem08kBeGqentLhM0R7LQcNzJPNCN
-yu5LF6vQhbCnIwTLqKL85XXbQMpiiY9QngE9JlsYhBzLfDe3fezTf3MZsGqy2IiKLUV0qPezuMDU
-2s0iiXRNWhU5cxh0T7XrmafBHoi0wpOQY5fzp6cSsgkiBzPZkc0OnB8OIMfuuzONj8LSWKdf/WU3
-4ojC2I+GdV75LaeHM/J4Ny+LvB2GNzmxlPLYvEqcgxhaBvzz1NS6jBUJJfD5to0EfhcSM2tXSExP
-2yYe68yQ54v5aHxwD6Mq0Do43zeX4lvegGHTgNiRg0JaTASJaBE8rF9ogEHMYELODVoqDA+bMMCm
-8Ibbq0nXl21Ii/kDwFJnmxL3wvIumGVC2daa49AZMQyth9VXAnow6IYm+48jilSH5L887uvDdUhf
-HjlvgWJsxS3EF1QZtzeNnDeRyPYL1epjb4OsOMLzP96a++EjYfDIJss2yKHzMI+ko6Kh3VOz3vCa
-Mh+DkXkwwakfU5tTohVTP92dsxA7SH2JD/ztA/X7JWR1DhcZDY8AFmd5ekD8LVkH2ZD6mq093ICK
-5lw1omdMEWux+IBkAC1vImHFrEsm5VoQgpukg3s0956JkSCXjrdCx2bD0Omk1vUgjcTDlaxECp1b
-czwmPS9KvqfJpxAe+59QafMCAwEAAaOB5jCB4zAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE
-AwIBBjAdBgNVHQ4EFgQU0QnQ6dfOeXRU+Tows/RtLAMDG2gwgaAGA1UdIASBmDCBlTCBkgYEVR0g
-ADCBiTArBggrBgEFBQcCARYfaHR0cDovL3d3dy5jZXJ0aWNhbWFyYS5jb20vZHBjLzBaBggrBgEF
-BQcCAjBOGkxMaW1pdGFjaW9uZXMgZGUgZ2FyYW507WFzIGRlIGVzdGUgY2VydGlmaWNhZG8gc2Ug
-cHVlZGVuIGVuY29udHJhciBlbiBsYSBEUEMuMA0GCSqGSIb3DQEBBQUAA4ICAQBclLW4RZFNjmEf
-AygPU3zmpFmps4p6xbD/CHwso3EcIRNnoZUSQDWDg4902zNc8El2CoFS3UnUmjIz75uny3XlesuX
-EpBcunvFm9+7OSPI/5jOCk0iAUgHforA1SBClETvv3eiiWdIG0ADBaGJ7M9i4z0ldma/Jre7Ir5v
-/zlXdLp6yQGVwZVR6Kss+LGGIOk/yzVb0hfpKv6DExdA7ohiZVvVO2Dpezy4ydV/NgIlqmjCMRW3
-MGXrfx1IebHPOeJCgBbT9ZMj/EyXyVo3bHwi2ErN0o42gzmRkBDI8ck1fj+404HGIGQatlDCIaR4
-3NAvO2STdPCWkPHv+wlaNECW8DYSwaN0jJN+Qd53i+yG2dIPPy3RzECiiWZIHiCznCNZc6lEc7wk
-eZBWN7PGKX6jD/EpOe9+XCgycDWs2rjIdWb8m0w5R44bb5tNAlQiM+9hup4phO9OSzNHdpdqy35f
-/RWmnkJDW2ZaiogN9xa5P1FlK2Zqi9E4UqLWRhH6/JocdJ6PlwsCT2TG9WjTSy3/pDceiz+/RL5h
-RqGEPQgnTIEgd4kI6mdAXmwIUV80WoyWaM3X94nCHNMyAK9Sy9NgWyo6R35rMDOhYil/SrnhLecU
-Iw4OGEfhefwVVdCx/CVxY3UzHCMrr1zZ7Ud3YA47Dx7SwNxkBYn8eNZcLCZDqQ==
------END CERTIFICATE-----
-
-TC TrustCenter Class 2 CA II
-============================
------BEGIN CERTIFICATE-----
-MIIEqjCCA5KgAwIBAgIOLmoAAQACH9dSISwRXDswDQYJKoZIhvcNAQEFBQAwdjELMAkGA1UEBhMC
-REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNVBAsTGVRDIFRydXN0Q2VudGVy
-IENsYXNzIDIgQ0ExJTAjBgNVBAMTHFRDIFRydXN0Q2VudGVyIENsYXNzIDIgQ0EgSUkwHhcNMDYw
-MTEyMTQzODQzWhcNMjUxMjMxMjI1OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1
-c3RDZW50ZXIgR21iSDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQTElMCMGA1UE
-AxMcVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
-AQoCggEBAKuAh5uO8MN8h9foJIIRszzdQ2Lu+MNF2ujhoF/RKrLqk2jftMjWQ+nEdVl//OEd+DFw
-IxuInie5e/060smp6RQvkL4DUsFJzfb95AhmC1eKokKguNV/aVyQMrKXDcpK3EY+AlWJU+MaWss2
-xgdW94zPEfRMuzBwBJWl9jmM/XOBCH2JXjIeIqkiRUuwZi4wzJ9l/fzLganx4Duvo4bRierERXlQ
-Xa7pIXSSTYtZgo+U4+lK8edJsBTj9WLL1XK9H7nSn6DNqPoByNkN39r8R52zyFTfSUrxIan+GE7u
-SNQZu+995OKdy1u2bv/jzVrndIIFuoAlOMvkaZ6vQaoahPUCAwEAAaOCATQwggEwMA8GA1UdEwEB
-/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTjq1RMgKHbVkO3kUrL84J6E1wIqzCB
-7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRydXN0Y2VudGVyLmRlL2NybC92Mi90
-Y19jbGFzc18yX2NhX0lJLmNybIaBn2xkYXA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBU
-cnVzdENlbnRlciUyMENsYXNzJTIwMiUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21i
-SCxPVT1yb290Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u
-TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEAjNfffu4bgBCzg/XbEeprS6iSGNn3Bzn1LL4G
-dXpoUxUc6krtXvwjshOg0wn/9vYua0Fxec3ibf2uWWuFHbhOIprtZjluS5TmVfwLG4t3wVMTZonZ
-KNaL80VKY7f9ewthXbhtvsPcW3nS7Yblok2+XnR8au0WOB9/WIFaGusyiC2y8zl3gK9etmF1Kdsj
-TYjKUCjLhdLTEKJZbtOTVAB6okaVhgWcqRmY5TFyDADiZ9lA4CQze28suVyrZZ0srHbqNZn1l7kP
-JOzHdiEoZa5X6AeIdUpWoNIFOqTmjZKILPPy4cHGYdtBxceb9w4aUUXCYWvcZCcXjFq32nQozZfk
-vQ==
------END CERTIFICATE-----
-
-TC TrustCenter Class 3 CA II
-============================
------BEGIN CERTIFICATE-----
-MIIEqjCCA5KgAwIBAgIOSkcAAQAC5aBd1j8AUb8wDQYJKoZIhvcNAQEFBQAwdjELMAkGA1UEBhMC
-REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNVBAsTGVRDIFRydXN0Q2VudGVy
-IENsYXNzIDMgQ0ExJTAjBgNVBAMTHFRDIFRydXN0Q2VudGVyIENsYXNzIDMgQ0EgSUkwHhcNMDYw
-MTEyMTQ0MTU3WhcNMjUxMjMxMjI1OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1
-c3RDZW50ZXIgR21iSDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQTElMCMGA1UE
-AxMcVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
-AQoCggEBALTgu1G7OVyLBMVMeRwjhjEQY0NVJz/GRcekPewJDRoeIMJWHt4bNwcwIi9v8Qbxq63W
-yKthoy9DxLCyLfzDlml7forkzMA5EpBCYMnMNWju2l+QVl/NHE1bWEnrDgFPZPosPIlY2C8u4rBo
-6SI7dYnWRBpl8huXJh0obazovVkdKyT21oQDZogkAHhg8fir/gKya/si+zXmFtGt9i4S5Po1auUZ
-uV3bOx4a+9P/FRQI2AlqukWdFHlgfa9Aigdzs5OW03Q0jTo3Kd5c7PXuLjHCINy+8U9/I1LZW+Jk
-2ZyqBwi1Rb3R0DHBq1SfqdLDYmAD8bs5SpJKPQq5ncWg/jcCAwEAAaOCATQwggEwMA8GA1UdEwEB
-/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTUovyfs8PYA9NXXAek0CSnwPIA1DCB
-7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRydXN0Y2VudGVyLmRlL2NybC92Mi90
-Y19jbGFzc18zX2NhX0lJLmNybIaBn2xkYXA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBU
-cnVzdENlbnRlciUyMENsYXNzJTIwMyUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21i
-SCxPVT1yb290Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u
-TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEANmDkcPcGIEPZIxpC8vijsrlNirTzwppVMXzE
-O2eatN9NDoqTSheLG43KieHPOh6sHfGcMrSOWXaiQYUlN6AT0PV8TtXqluJucsG7Kv5sbviRmEb8
-yRtXW+rIGjs/sFGYPAfaLFkB2otE6OF0/ado3VS6g0bsyEa1+K+XwDsJHI/OcpY9M1ZwvJbL2NV9
-IJqDnxrcOfHFcqMRA/07QlIp2+gB95tejNaNhk4Z+rwcvsUhpYeeeC422wlxo3I0+GzjBgnyXlal
-092Y+tTmBvTwtiBjS+opvaqCZh77gaqnN60TGOaSw4HBM7uIHqHn4rS9MWwOUT1v+5ZWgOI2F9Hc
-5A==
------END CERTIFICATE-----
-
-TC TrustCenter Universal CA I
-=============================
------BEGIN CERTIFICATE-----
-MIID3TCCAsWgAwIBAgIOHaIAAQAC7LdggHiNtgYwDQYJKoZIhvcNAQEFBQAweTELMAkGA1UEBhMC
-REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNVBAsTG1RDIFRydXN0Q2VudGVy
-IFVuaXZlcnNhbCBDQTEmMCQGA1UEAxMdVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBIEkwHhcN
-MDYwMzIyMTU1NDI4WhcNMjUxMjMxMjI1OTU5WjB5MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMg
-VHJ1c3RDZW50ZXIgR21iSDEkMCIGA1UECxMbVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBMSYw
-JAYDVQQDEx1UQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0EgSTCCASIwDQYJKoZIhvcNAQEBBQAD
-ggEPADCCAQoCggEBAKR3I5ZEr5D0MacQ9CaHnPM42Q9e3s9B6DGtxnSRJJZ4Hgmgm5qVSkr1YnwC
-qMqs+1oEdjneX/H5s7/zA1hV0qq34wQi0fiU2iIIAI3TfCZdzHd55yx4Oagmcw6iXSVphU9VDprv
-xrlE4Vc93x9UIuVvZaozhDrzznq+VZeujRIPFDPiUHDDSYcTvFHe15gSWu86gzOSBnWLknwSaHtw
-ag+1m7Z3W0hZneTvWq3zwZ7U10VOylY0Ibw+F1tvdwxIAUMpsN0/lm7mlaoMwCC2/T42J5zjXM9O
-gdwZu5GQfezmlwQek8wiSdeXhrYTCjxDI3d+8NzmzSQfO4ObNDqDNOMCAwEAAaNjMGEwHwYDVR0j
-BBgwFoAUkqR1LKSevoFE63n8isWVpesQdXMwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
-AYYwHQYDVR0OBBYEFJKkdSyknr6BROt5/IrFlaXrEHVzMA0GCSqGSIb3DQEBBQUAA4IBAQAo0uCG
-1eb4e/CX3CJrO5UUVg8RMKWaTzqwOuAGy2X17caXJ/4l8lfmXpWMPmRgFVp/Lw0BxbFg/UU1z/Cy
-vwbZ71q+s2IhtNerNXxTPqYn8aEt2hojnczd7Dwtnic0XQ/CNnm8yUpiLe1r2X1BQ3y2qsrtYbE3
-ghUJGooWMNjsydZHcnhLEEYUjl8Or+zHL6sQ17bxbuyGssLoDZJz3KL0Dzq/YSMQiZxIQG5wALPT
-ujdEWBF6AmqI8Dc08BnprNRlc/ZpjGSUOnmFKbAWKwyCPwacx/0QK54PLLae4xW/2TYcuiUaUj0a
-7CIMHOCkoj3w6DnPgcB77V0fb8XQC9eY
------END CERTIFICATE-----
-
-Deutsche Telekom Root CA 2
-==========================
------BEGIN CERTIFICATE-----
-MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMT
-RGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEG
-A1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENBIDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5
-MjM1OTAwWjBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0G
-A1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBS
-b290IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEUha88EOQ5
-bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhCQN/Po7qCWWqSG6wcmtoI
-KyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1MjwrrFDa1sPeg5TKqAyZMg4ISFZbavva4VhY
-AUlfckE8FQYBjl2tqriTtM2e66foai1SNNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aK
-Se5TBY8ZTNXeWHmb0mocQqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTV
-jlsB9WoHtxa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAPBgNV
-HRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAlGRZrTlk5ynr
-E/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756AbrsptJh6sTtU6zkXR34ajgv8HzFZMQSy
-zhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpaIzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8
-rZ7/gFnkm0W09juwzTkZmDLl6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4G
-dyd1Lx+4ivn+xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU
-Cm26OWMohpLzGITY+9HPBVZkVw==
------END CERTIFICATE-----
-
-ComSign Secured CA
-==================
------BEGIN CERTIFICATE-----
-MIIDqzCCApOgAwIBAgIRAMcoRwmzuGxFjB36JPU2TukwDQYJKoZIhvcNAQEFBQAwPDEbMBkGA1UE
-AxMSQ29tU2lnbiBTZWN1cmVkIENBMRAwDgYDVQQKEwdDb21TaWduMQswCQYDVQQGEwJJTDAeFw0w
-NDAzMjQxMTM3MjBaFw0yOTAzMTYxNTA0NTZaMDwxGzAZBgNVBAMTEkNvbVNpZ24gU2VjdXJlZCBD
-QTEQMA4GA1UEChMHQ29tU2lnbjELMAkGA1UEBhMCSUwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
-ggEKAoIBAQDGtWhfHZQVw6QIVS3joFd67+l0Kru5fFdJGhFeTymHDEjWaueP1H5XJLkGieQcPOqs
-49ohgHMhCu95mGwfCP+hUH3ymBvJVG8+pSjsIQQPRbsHPaHA+iqYHU4Gk/v1iDurX8sWv+bznkqH
-7Rnqwp9D5PGBpX8QTz7RSmKtUxvLg/8HZaWSLWapW7ha9B20IZFKF3ueMv5WJDmyVIRD9YTC2LxB
-kMyd1mja6YJQqTtoz7VdApRgFrFD2UNd3V2Hbuq7s8lr9gOUCXDeFhF6K+h2j0kQmHe5Y1yLM5d1
-9guMsqtb3nQgJT/j8xH5h2iGNXHDHYwt6+UarA9z1YJZQIDTAgMBAAGjgacwgaQwDAYDVR0TBAUw
-AwEB/zBEBgNVHR8EPTA7MDmgN6A1hjNodHRwOi8vZmVkaXIuY29tc2lnbi5jby5pbC9jcmwvQ29t
-U2lnblNlY3VyZWRDQS5jcmwwDgYDVR0PAQH/BAQDAgGGMB8GA1UdIwQYMBaAFMFL7XC29z58ADsA
-j8c+DkWfHl3sMB0GA1UdDgQWBBTBS+1wtvc+fAA7AI/HPg5Fnx5d7DANBgkqhkiG9w0BAQUFAAOC
-AQEAFs/ukhNQq3sUnjO2QiBq1BW9Cav8cujvR3qQrFHBZE7piL1DRYHjZiM/EoZNGeQFsOY3wo3a
-BijJD4mkU6l1P7CW+6tMM1X5eCZGbxs2mPtCdsGCuY7e+0X5YxtiOzkGynd6qDwJz2w2PQ8KRUtp
-FhpFfTMDZflScZAmlaxMDPWLkz/MdXSFmLr/YnpNH4n+rr2UAJm/EaXc4HnFFgt9AmEd6oX5AhVP
-51qJThRv4zdLhfXBPGHg/QVBspJ/wx2g0K5SZGBrGMYmnNj1ZOQ2GmKfig8+/21OGVZOIJFsnzQz
-OjRXUDpvgV4GxvU+fE6OK85lBi5d0ipTdF7Tbieejw==
------END CERTIFICATE-----
-
-Cybertrust Global Root
-======================
------BEGIN CERTIFICATE-----
-MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYGA1UEChMPQ3li
-ZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBSb290MB4XDTA2MTIxNTA4
-MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQD
-ExZDeWJlcnRydXN0IEdsb2JhbCBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
-+Mi8vRRQZhP/8NN57CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW
-0ozSJ8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2yHLtgwEZL
-AfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iPt3sMpTjr3kfb1V05/Iin
-89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNzFtApD0mpSPCzqrdsxacwOUBdrsTiXSZT
-8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAYXSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAP
-BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2
-MDSgMqAwhi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3JsMB8G
-A1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUAA4IBAQBW7wojoFRO
-lZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMjWqd8BfP9IjsO0QbE2zZMcwSO5bAi
-5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUxXOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2
-hO0j9n0Hq0V+09+zv+mKts2oomcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+T
-X3EJIrduPuocA06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW
-WL1WMRJOEcgh4LMRkWXbtKaIOM5V
------END CERTIFICATE-----
-
-ePKI Root Certification Authority
-=================================
------BEGIN CERTIFICATE-----
-MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBeMQswCQYDVQQG
-EwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0ZC4xKjAoBgNVBAsMIWVQS0kg
-Um9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMx
-MjdaMF4xCzAJBgNVBAYTAlRXMSMwIQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEq
-MCgGA1UECwwhZVBLSSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0B
-AQEFAAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAHSyZbCUNs
-IZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAhijHyl3SJCRImHJ7K2RKi
-lTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3XDZoTM1PRYfl61dd4s5oz9wCGzh1NlDiv
-qOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX
-12ruOzjjK9SXDrkb5wdJfzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0O
-WQqraffAsgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uUWH1+
-ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLSnT0IFaUQAS2zMnao
-lQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pHdmX2Os+PYhcZewoozRrSgx4hxyy/
-vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJipNiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXi
-Zo1jDiVN1Rmy5nk3pyKdVDECAwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/Qkqi
-MAwGA1UdEwQFMAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH
-ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGBuvl2ICO1J2B0
-1GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6YlPwZpVnPDimZI+ymBV3QGypzq
-KOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkPJXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdV
-xrsStZf0X4OFunHB2WyBEXYKCrC/gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEP
-NXubrjlpC2JgQCA2j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+r
-GNm65ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUBo2M3IUxE
-xJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS/jQ6fbjpKdx2qcgw+BRx
-gMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2zGp1iro2C6pSe3VkQw63d4k3jMdXH7Ojy
-sP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTEW9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmOD
-BCEIZ43ygknQW/2xzQ+DhNQ+IIX3Sj0rnP0qCglN6oH4EZw=
------END CERTIFICATE-----
-
-T\xc3\x9c\x42\xC4\xB0TAK UEKAE K\xC3\xB6k Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1 - S\xC3\xBCr\xC3\xBCm 3
-=============================================================================================================================
------BEGIN CERTIFICATE-----
-MIIFFzCCA/+gAwIBAgIBETANBgkqhkiG9w0BAQUFADCCASsxCzAJBgNVBAYTAlRSMRgwFgYDVQQH
-DA9HZWJ6ZSAtIEtvY2FlbGkxRzBFBgNVBAoMPlTDvHJraXllIEJpbGltc2VsIHZlIFRla25vbG9q
-aWsgQXJhxZ90xLFybWEgS3VydW11IC0gVMOcQsSwVEFLMUgwRgYDVQQLDD9VbHVzYWwgRWxla3Ry
-b25payB2ZSBLcmlwdG9sb2ppIEFyYcWfdMSxcm1hIEVuc3RpdMO8c8O8IC0gVUVLQUUxIzAhBgNV
-BAsMGkthbXUgU2VydGlmaWthc3lvbiBNZXJrZXppMUowSAYDVQQDDEFUw5xCxLBUQUsgVUVLQUUg
-S8O2ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSAtIFPDvHLDvG0gMzAeFw0wNzA4
-MjQxMTM3MDdaFw0xNzA4MjExMTM3MDdaMIIBKzELMAkGA1UEBhMCVFIxGDAWBgNVBAcMD0dlYnpl
-IC0gS29jYWVsaTFHMEUGA1UECgw+VMO8cmtpeWUgQmlsaW1zZWwgdmUgVGVrbm9sb2ppayBBcmHF
-n3TEsXJtYSBLdXJ1bXUgLSBUw5xCxLBUQUsxSDBGBgNVBAsMP1VsdXNhbCBFbGVrdHJvbmlrIHZl
-IEtyaXB0b2xvamkgQXJhxZ90xLFybWEgRW5zdGl0w7xzw7wgLSBVRUtBRTEjMCEGA1UECwwaS2Ft
-dSBTZXJ0aWZpa2FzeW9uIE1lcmtlemkxSjBIBgNVBAMMQVTDnELEsFRBSyBVRUtBRSBLw7ZrIFNl
-cnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIC0gU8O8csO8bSAzMIIBIjANBgkqhkiG9w0B
-AQEFAAOCAQ8AMIIBCgKCAQEAim1L/xCIOsP2fpTo6iBkcK4hgb46ezzb8R1Sf1n68yJMlaCQvEhO
-Eav7t7WNeoMojCZG2E6VQIdhn8WebYGHV2yKO7Rm6sxA/OOqbLLLAdsyv9Lrhc+hDVXDWzhXcLh1
-xnnRFDDtG1hba+818qEhTsXOfJlfbLm4IpNQp81McGq+agV/E5wrHur+R84EpW+sky58K5+eeROR
-6Oqeyjh1jmKwlZMq5d/pXpduIF9fhHpEORlAHLpVK/swsoHvhOPc7Jg4OQOFCKlUAwUp8MmPi+oL
-hmUZEdPpCSPeaJMDyTYcIW7OjGbxmTDY17PDHfiBLqi9ggtm/oLL4eAagsNAgQIDAQABo0IwQDAd
-BgNVHQ4EFgQUvYiHyY/2pAoLquvF/pEjnatKijIwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF
-MAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAB18+kmPNOm3JpIWmgV050vQbTlswyb2zrgxvMTfvCr4
-N5EY3ATIZJkrGG2AA1nJrvhY0D7twyOfaTyGOBye79oneNGEN3GKPEs5z35FBtYt2IpNeBLWrcLT
-y9LQQfMmNkqblWwM7uXRQydmwYj3erMgbOqwaSvHIOgMA8RBBZniP+Rr+KCGgceExh/VS4ESshYh
-LBOhgLJeDEoTniDYYkCrkOpkSi+sDQESeUWoL4cZaMjihccwsnX5OD+ywJO0a+IDRM5noN+J1q2M
-dqMTw5RhK2vZbMEHCiIHhWyFJEapvj+LeISCfiQMnf2BN+MlqO02TpUsyZyQ2uypQjyttgI=
------END CERTIFICATE-----
-
-Buypass Class 2 CA 1
-====================
------BEGIN CERTIFICATE-----
-MIIDUzCCAjugAwIBAgIBATANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU
-QnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3MgQ2xhc3MgMiBDQSAxMB4XDTA2
-MTAxMzEwMjUwOVoXDTE2MTAxMzEwMjUwOVowSzELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBh
-c3MgQVMtOTgzMTYzMzI3MR0wGwYDVQQDDBRCdXlwYXNzIENsYXNzIDIgQ0EgMTCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBAIs8B0XY9t/mx8q6jUPFR42wWsE425KEHK8T1A9vNkYgxC7M
-cXA0ojTTNy7Y3Tp3L8DrKehc0rWpkTSHIln+zNvnma+WwajHQN2lFYxuyHyXA8vmIPLXl18xoS83
-0r7uvqmtqEyeIWZDO6i88wmjONVZJMHCR3axiFyCO7srpgTXjAePzdVBHfCuuCkslFJgNJQ72uA4
-0Z0zPhX0kzLFANq1KWYOOngPIVJfAuWSeyXTkh4vFZ2B5J2O6O+JzhRMVB0cgRJNcKi+EAUXfh/R
-uFdV7c27UsKwHnjCTTZoy1YmwVLBvXb3WNVyfh9EdrsAiR0WnVE1703CVu9r4Iw7DekCAwEAAaNC
-MEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUP42aWYv8e3uco684sDntkHGA1sgwDgYDVR0P
-AQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQAVGn4TirnoB6NLJzKyQJHyIdFkhb5jatLPgcIV
-1Xp+DCmsNx4cfHZSldq1fyOhKXdlyTKdqC5Wq2B2zha0jX94wNWZUYN/Xtm+DKhQ7SLHrQVMdvvt
-7h5HZPb3J31cKA9FxVxiXqaakZG3Uxcu3K1gnZZkOb1naLKuBctN518fV4bVIJwo+28TOPX2EZL2
-fZleHwzoq0QkKXJAPTZSr4xYkHPB7GEseaHsh7U/2k3ZIQAw3pDaDtMaSKk+hQsUi4y8QZ5q9w5w
-wDX3OaJdZtB7WZ+oRxKaJyOkLY4ng5IgodcVf/EuGO70SH8vf/GhGLWhC5SgYiAynB321O+/TIho
------END CERTIFICATE-----
-
-Buypass Class 3 CA 1
-====================
------BEGIN CERTIFICATE-----
-MIIDUzCCAjugAwIBAgIBAjANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU
-QnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3MgQ2xhc3MgMyBDQSAxMB4XDTA1
-MDUwOTE0MTMwM1oXDTE1MDUwOTE0MTMwM1owSzELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBh
-c3MgQVMtOTgzMTYzMzI3MR0wGwYDVQQDDBRCdXlwYXNzIENsYXNzIDMgQ0EgMTCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBAKSO13TZKWTeXx+HgJHqTjnmGcZEC4DVC69TB4sSveZn8AKx
-ifZgisRbsELRwCGoy+Gb72RRtqfPFfV0gGgEkKBYouZ0plNTVUhjP5JW3SROjvi6K//zNIqeKNc0
-n6wv1g/xpC+9UrJJhW05NfBEMJNGJPO251P7vGGvqaMU+8IXF4Rs4HyI+MkcVyzwPX6UvCWThOia
-AJpFBUJXgPROztmuOfbIUxAMZTpHe2DC1vqRycZxbL2RhzyRhkmr8w+gbCZ2Xhysm3HljbybIR6c
-1jh+JIAVMYKWsUnTYjdbiAwKYjT+p0h+mbEwi5A3lRyoH6UsjfRVyNvdWQrCrXig9IsCAwEAAaNC
-MEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUOBTmyPCppAP0Tj4io1vy1uCtQHQwDgYDVR0P
-AQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQABZ6OMySU9E2NdFm/soT4JXJEVKirZgCFPBdy7
-pYmrEzMqnji3jG8CcmPHc3ceCQa6Oyh7pEfJYWsICCD8igWKH7y6xsL+z27sEzNxZy5p+qksP2bA
-EllNC1QCkoS72xLvg3BweMhT+t/Gxv/ciC8HwEmdMldg0/L2mSlf56oBzKwzqBwKu5HEA6BvtjT5
-htOzdlSY9EqBs1OdTUDs5XcTRa9bqh/YL0yCe/4qxFi7T/ye/QNlGioOw6UgFpRreaaiErS7GqQj
-el/wroQk5PMr+4okoyeYZdowdXb8GZHo2+ubPzK/QJcHJrrM85SFSnonk8+QQtS4Wxam58tAA915
------END CERTIFICATE-----
-
-EBG Elektronik Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1
-==========================================================================
------BEGIN CERTIFICATE-----
-MIIF5zCCA8+gAwIBAgIITK9zQhyOdAIwDQYJKoZIhvcNAQEFBQAwgYAxODA2BgNVBAMML0VCRyBF
-bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMTcwNQYDVQQKDC5FQkcg
-QmlsacWfaW0gVGVrbm9sb2ppbGVyaSB2ZSBIaXptZXRsZXJpIEEuxZ4uMQswCQYDVQQGEwJUUjAe
-Fw0wNjA4MTcwMDIxMDlaFw0xNjA4MTQwMDMxMDlaMIGAMTgwNgYDVQQDDC9FQkcgRWxla3Ryb25p
-ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTE3MDUGA1UECgwuRUJHIEJpbGnFn2lt
-IFRla25vbG9qaWxlcmkgdmUgSGl6bWV0bGVyaSBBLsWeLjELMAkGA1UEBhMCVFIwggIiMA0GCSqG
-SIb3DQEBAQUAA4ICDwAwggIKAoICAQDuoIRh0DpqZhAy2DE4f6en5f2h4fuXd7hxlugTlkaDT7by
-X3JWbhNgpQGR4lvFzVcfd2NR/y8927k/qqk153nQ9dAktiHq6yOU/im/+4mRDGSaBUorzAzu8T2b
-gmmkTPiab+ci2hC6X5L8GCcKqKpE+i4stPtGmggDg3KriORqcsnlZR9uKg+ds+g75AxuetpX/dfr
-eYteIAbTdgtsApWjluTLdlHRKJ2hGvxEok3MenaoDT2/F08iiFD9rrbskFBKW5+VQarKD7JK/oCZ
-TqNGFav4c0JqwmZ2sQomFd2TkuzbqV9UIlKRcF0T6kjsbgNs2d1s/OsNA/+mgxKb8amTD8UmTDGy
-Y5lhcucqZJnSuOl14nypqZoaqsNW2xCaPINStnuWt6yHd6i58mcLlEOzrz5z+kI2sSXFCjEmN1Zn
-uqMLfdb3ic1nobc6HmZP9qBVFCVMLDMNpkGMvQQxahByCp0OLna9XvNRiYuoP1Vzv9s6xiQFlpJI
-qkuNKgPlV5EQ9GooFW5Hd4RcUXSfGenmHmMWOeMRFeNYGkS9y8RsZteEBt8w9DeiQyJ50hBs37vm
-ExH8nYQKE3vwO9D8owrXieqWfo1IhR5kX9tUoqzVegJ5a9KK8GfaZXINFHDk6Y54jzJ0fFfy1tb0
-Nokb+Clsi7n2l9GkLqq+CxnCRelwXQIDAJ3Zo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB
-/wQEAwIBBjAdBgNVHQ4EFgQU587GT/wWZ5b6SqMHwQSny2re2kcwHwYDVR0jBBgwFoAU587GT/wW
-Z5b6SqMHwQSny2re2kcwDQYJKoZIhvcNAQEFBQADggIBAJuYml2+8ygjdsZs93/mQJ7ANtyVDR2t
-FcU22NU57/IeIl6zgrRdu0waypIN30ckHrMk2pGI6YNw3ZPX6bqz3xZaPt7gyPvT/Wwp+BVGoGgm
-zJNSroIBk5DKd8pNSe/iWtkqvTDOTLKBtjDOWU/aWR1qeqRFsIImgYZ29fUQALjuswnoT4cCB64k
-XPBfrAowzIpAoHMEwfuJJPaaHFy3PApnNgUIMbOv2AFoKuB4j3TeuFGkjGwgPaL7s9QJ/XvCgKqT
-bCmYIai7FvOpEl90tYeY8pUm3zTvilORiF0alKM/fCL414i6poyWqD1SNGKfAB5UVUJnxk1Gj7sU
-RT0KlhaOEKGXmdXTMIXM3rRyt7yKPBgpaP3ccQfuJDlq+u2lrDgv+R4QDgZxGhBM/nV+/x5XOULK
-1+EVoVZVWRvRo68R2E7DpSvvkL/A7IITW43WciyTTo9qKd+FPNMN4KIYEsxVL0e3p5sC/kH2iExt
-2qkBR4NkJ2IQgtYSe14DHzSpyZH+r11thie3I6p1GMog57AP14kOpmciY/SDQSsGS7tY1dHXt7kQ
-Y9iJSrSq3RZj9W6+YKH47ejWkE8axsWgKdOnIaj1Wjz3x0miIZpKlVIglnKaZsv30oZDfCK+lvm9
-AahH3eU7QPl1K5srRmSGjR70j/sHd9DqSaIcjVIUpgqT
------END CERTIFICATE-----
-
-certSIGN ROOT CA
-================
------BEGIN CERTIFICATE-----
-MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYTAlJPMREwDwYD
-VQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTAeFw0wNjA3MDQxNzIwMDRa
-Fw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UE
-CxMQY2VydFNJR04gUk9PVCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7I
-JUqOtdu0KBuqV5Do0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHH
-rfAQUySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5dRdY4zTW2
-ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQOA7+j0xbm0bqQfWwCHTD
-0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwvJoIQ4uNllAoEwF73XVv4EOLQunpL+943
-AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8B
-Af8EBAMCAcYwHQYDVR0OBBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IB
-AQA+0hyJLjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecYMnQ8
-SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ44gx+FkagQnIl6Z0
-x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6IJd1hJyMctTEHBDa0GpC9oHRxUIlt
-vBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNwi/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7Nz
-TogVZ96edhBiIL5VaZVDADlN9u6wWk5JRFRYX0KD
------END CERTIFICATE-----
-
-CNNIC ROOT
-==========
------BEGIN CERTIFICATE-----
-MIIDVTCCAj2gAwIBAgIESTMAATANBgkqhkiG9w0BAQUFADAyMQswCQYDVQQGEwJDTjEOMAwGA1UE
-ChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwHhcNMDcwNDE2MDcwOTE0WhcNMjcwNDE2MDcw
-OTE0WjAyMQswCQYDVQQGEwJDTjEOMAwGA1UEChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1Qw
-ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDTNfc/c3et6FtzF8LRb+1VvG7q6KR5smzD
-o+/hn7E7SIX1mlwhIhAsxYLO2uOabjfhhyzcuQxauohV3/2q2x8x6gHx3zkBwRP9SFIhxFXf2tiz
-VHa6dLG3fdfA6PZZxU3Iva0fFNrfWEQlMhkqx35+jq44sDB7R3IJMfAw28Mbdim7aXZOV/kbZKKT
-VrdvmW7bCgScEeOAH8tjlBAKqeFkgjH5jCftppkA9nCTGPihNIaj3XrCGHn2emU1z5DrvTOTn1Or
-czvmmzQgLx3vqR1jGqCA2wMv+SYahtKNu6m+UjqHZ0gNv7Sg2Ca+I19zN38m5pIEo3/PIKe38zrK
-y5nLAgMBAAGjczBxMBEGCWCGSAGG+EIBAQQEAwIABzAfBgNVHSMEGDAWgBRl8jGtKvf33VKWCscC
-wQ7vptU7ETAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIB/jAdBgNVHQ4EFgQUZfIxrSr3991S
-lgrHAsEO76bVOxEwDQYJKoZIhvcNAQEFBQADggEBAEs17szkrr/Dbq2flTtLP1se31cpolnKOOK5
-Gv+e5m4y3R6u6jW39ZORTtpC4cMXYFDy0VwmuYK36m3knITnA3kXr5g9lNvHugDnuL8BV8F3RTIM
-O/G0HAiw/VGgod2aHRM2mm23xzy54cXZF/qD1T0VoDy7HgviyJA/qIYM/PmLXoXLT1tLYhFHxUV8
-BS9BsZ4QaRuZluBVeftOhpm4lNqGOGqTo+fLbuXf6iFViZx9fX+Y9QCJ7uOEwFyWtcVG6kbghVW2
-G8kS1sHNzYDzAgE8yGnLRUhj2JTQ7IUOO04RZfSCjKY9ri4ilAnIXOo8gV0WKgOXFlUJ24pBgp5m
-mxE=
------END CERTIFICATE-----
-
-ApplicationCA - Japanese Government
-===================================
------BEGIN CERTIFICATE-----
-MIIDoDCCAoigAwIBAgIBMTANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJKUDEcMBoGA1UEChMT
-SmFwYW5lc2UgR292ZXJubWVudDEWMBQGA1UECxMNQXBwbGljYXRpb25DQTAeFw0wNzEyMTIxNTAw
-MDBaFw0xNzEyMTIxNTAwMDBaMEMxCzAJBgNVBAYTAkpQMRwwGgYDVQQKExNKYXBhbmVzZSBHb3Zl
-cm5tZW50MRYwFAYDVQQLEw1BcHBsaWNhdGlvbkNBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
-CgKCAQEAp23gdE6Hj6UG3mii24aZS2QNcfAKBZuOquHMLtJqO8F6tJdhjYq+xpqcBrSGUeQ3DnR4
-fl+Kf5Sk10cI/VBaVuRorChzoHvpfxiSQE8tnfWuREhzNgaeZCw7NCPbXCbkcXmP1G55IrmTwcrN
-wVbtiGrXoDkhBFcsovW8R0FPXjQilbUfKW1eSvNNcr5BViCH/OlQR9cwFO5cjFW6WY2H/CPek9AE
-jP3vbb3QesmlOmpyM8ZKDQUXKi17safY1vC+9D/qDihtQWEjdnjDuGWk81quzMKq2edY3rZ+nYVu
-nyoKb58DKTCXKB28t89UKU5RMfkntigm/qJj5kEW8DOYRwIDAQABo4GeMIGbMB0GA1UdDgQWBBRU
-WssmP3HMlEYNllPqa0jQk/5CdTAOBgNVHQ8BAf8EBAMCAQYwWQYDVR0RBFIwUKROMEwxCzAJBgNV
-BAYTAkpQMRgwFgYDVQQKDA/ml6XmnKzlm73mlL/lupwxIzAhBgNVBAsMGuOCouODl+ODquOCseOD
-vOOCt+ODp+ODs0NBMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADlqRHZ3ODrs
-o2dGD/mLBqj7apAxzn7s2tGJfHrrLgy9mTLnsCTWw//1sogJhyzjVOGjprIIC8CFqMjSnHH2HZ9g
-/DgzE+Ge3Atf2hZQKXsvcJEPmbo0NI2VdMV+eKlmXb3KIXdCEKxmJj3ekav9FfBv7WxfEPjzFvYD
-io+nEhEMy/0/ecGc/WLuo89UDNErXxc+4z6/wCs+CZv+iKZ+tJIX/COUgb1up8WMwusRRdv4QcmW
-dupwX3kSa+SjB1oF7ydJzyGfikwJcGapJsErEU4z0g781mzSDjJkaP+tBXhfAx2o45CsJOAPQKdL
-rosot4LKGAfmt1t06SAZf7IbiVQ=
------END CERTIFICATE-----
-
-GeoTrust Primary Certification Authority - G3
-=============================================
------BEGIN CERTIFICATE-----
-MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UE
-BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA4IEdlb1RydXN0
-IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFy
-eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIz
-NTk1OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAo
-YykgMjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMT
-LUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz+uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5j
-K/BGvESyiaHAKAxJcCGVn2TAppMSAmUmhsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdE
-c5IiaacDiGydY8hS2pgn5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3C
-IShwiP/WJmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exALDmKu
-dlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZChuOl1UcCAwEAAaNC
-MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMR5yo6hTgMdHNxr
-2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IBAQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9
-cr5HqQ6XErhK8WTTOd8lNNTBzU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbE
-Ap7aDHdlDkQNkv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD
-AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUHSJsMC8tJP33s
-t/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2Gspki4cErx5z481+oghLrGREt
------END CERTIFICATE-----
-
-thawte Primary Root CA - G2
-===========================
------BEGIN CERTIFICATE-----
-MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDELMAkGA1UEBhMC
-VVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMpIDIwMDcgdGhhd3RlLCBJbmMu
-IC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3Qg
-Q0EgLSBHMjAeFw0wNzExMDUwMDAwMDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEV
-MBMGA1UEChMMdGhhd3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBG
-b3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAt
-IEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/BebfowJPDQfGAFG6DAJS
-LSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6papu+7qzcMBniKI11KOasf2twu8x+qi5
-8/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU
-mtgAMADna3+FGO6Lts6KDPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUN
-G4k8VIZ3KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41oxXZ3K
-rr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg==
------END CERTIFICATE-----
-
-thawte Primary Root CA - G3
-===========================
------BEGIN CERTIFICATE-----
-MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCBrjELMAkGA1UE
-BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2
-aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv
-cml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0w
-ODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh
-d3RlLCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9uMTgwNgYD
-VQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIG
-A1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
-MIIBCgKCAQEAsr8nLPvb2FvdeHsbnndmgcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2At
-P0LMqmsywCPLLEHd5N/8YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC
-+BsUa0Lfb1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS99irY
-7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2SzhkGcuYMXDhpxwTW
-vGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUkOQIDAQABo0IwQDAPBgNVHRMBAf8E
-BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJ
-KoZIhvcNAQELBQADggEBABpA2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweK
-A3rD6z8KLFIWoCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu
-t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7cKUGRIjxpp7sC
-8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fMm7v/OeZWYdMKp8RcTGB7BXcm
-er/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZuMdRAGmI0Nj81Aa6sY6A=
------END CERTIFICATE-----
-
-GeoTrust Primary Certification Authority - G2
-=============================================
------BEGIN CERTIFICATE-----
-MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDELMAkGA1UEBhMC
-VVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA3IEdlb1RydXN0IElu
-Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBD
-ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1
-OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg
-MjAwNyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMTLUdl
-b1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjB2MBAGByqGSM49AgEG
-BSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcLSo17VDs6bl8VAsBQps8lL33KSLjHUGMc
-KiEIfJo22Av+0SbFWDEwKCXzXV2juLaltJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYD
-VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+
-EVXVMAoGCCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGTqQ7m
-ndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBuczrD6ogRLQy7rQkgu2
-npaqBA+K
------END CERTIFICATE-----
-
-VeriSign Universal Root Certification Authority
-===============================================
------BEGIN CERTIFICATE-----
-MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCBvTELMAkGA1UE
-BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO
-ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk
-IHVzZSBvbmx5MTgwNgYDVQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9u
-IEF1dGhvcml0eTAeFw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJV
-UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
-cmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
-IG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNhbCBSb290IENlcnRpZmljYXRpb24gQXV0
-aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj
-1mCOkdeQmIN65lgZOIzF9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGP
-MiJhgsWHH26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+HLL72
-9fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN/BMReYTtXlT2NJ8I
-AfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPTrJ9VAMf2CGqUuV/c4DPxhGD5WycR
-tPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0G
-CCsGAQUFBwEMBGEwX6FdoFswWTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2O
-a8PPgGrUSBgsexkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud
-DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4sAPmLGd75JR3
-Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+seQxIcaBlVZaDrHC1LGmWazx
-Y8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTx
-P/jgdFcrGJ2BtMQo2pSXpXDrrB2+BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+P
-wGZsY6rp2aQW9IHRlRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4
-mJO37M2CYfE45k+XmCpajQ==
------END CERTIFICATE-----
-
-VeriSign Class 3 Public Primary Certification Authority - G4
-============================================================
------BEGIN CERTIFICATE-----
-MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjELMAkGA1UEBhMC
-VVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3
-b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVz
-ZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmlj
-YXRpb24gQXV0aG9yaXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjEL
-MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBU
-cnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRo
-b3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5
-IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8
-Utpkmw4tXNherJI9/gHmGUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGz
-rl0Bp3vefLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUwAwEB
-/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEw
-HzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVyaXNpZ24u
-Y29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMWkf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMD
-A2gAMGUCMGYhDBgmYFo4e1ZC4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIx
-AJw9SDkjOVgaFRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA==
------END CERTIFICATE-----
-
-NetLock Arany (Class Gold) Főtanúsítvány
-============================================
------BEGIN CERTIFICATE-----
-MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQGEwJIVTERMA8G
-A1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3MDUGA1UECwwuVGFuw7pzw610
-dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBB
-cmFueSAoQ2xhc3MgR29sZCkgRsWRdGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgx
-MjA2MTUwODIxWjCBpzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxO
-ZXRMb2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlmaWNhdGlv
-biBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNzIEdvbGQpIEbFkXRhbsO6
-c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxCRec75LbRTDofTjl5Bu
-0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrTlF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw
-/HpYzY6b7cNGbIRwXdrzAZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAk
-H3B5r9s5VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRGILdw
-fzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2BJtr+UBdADTHLpl1
-neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAGAQH/AgEEMA4GA1UdDwEB/wQEAwIB
-BjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2MU9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwW
-qZw8UQCgwBEIBaeZ5m8BiFRhbvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTta
-YtOUZcTh5m2C+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC
-bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2FuLjbvrW5Kfna
-NwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2XjG4Kvte9nHfRCaexOYNkbQu
-dZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E=
------END CERTIFICATE-----
-
-Staat der Nederlanden Root CA - G2
-==================================
------BEGIN CERTIFICATE-----
-MIIFyjCCA7KgAwIBAgIEAJiWjDANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJOTDEeMBwGA1UE
-CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFhdCBkZXIgTmVkZXJsYW5kZW4g
-Um9vdCBDQSAtIEcyMB4XDTA4MDMyNjExMTgxN1oXDTIwMDMyNTExMDMxMFowWjELMAkGA1UEBhMC
-TkwxHjAcBgNVBAoMFVN0YWF0IGRlciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5l
-ZGVybGFuZGVuIFJvb3QgQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMVZ
-5291qj5LnLW4rJ4L5PnZyqtdj7U5EILXr1HgO+EASGrP2uEGQxGZqhQlEq0i6ABtQ8SpuOUfiUtn
-vWFI7/3S4GCI5bkYYCjDdyutsDeqN95kWSpGV+RLufg3fNU254DBtvPUZ5uW6M7XxgpT0GtJlvOj
-CwV3SPcl5XCsMBQgJeN/dVrlSPhOewMHBPqCYYdu8DvEpMfQ9XQ+pV0aCPKbJdL2rAQmPlU6Yiil
-e7Iwr/g3wtG61jj99O9JMDeZJiFIhQGp5Rbn3JBV3w/oOM2ZNyFPXfUib2rFEhZgF1XyZWampzCR
-OME4HYYEhLoaJXhena/MUGDWE4dS7WMfbWV9whUYdMrhfmQpjHLYFhN9C0lK8SgbIHRrxT3dsKpI
-CT0ugpTNGmXZK4iambwYfp/ufWZ8Pr2UuIHOzZgweMFvZ9C+X+Bo7d7iscksWXiSqt8rYGPy5V65
-48r6f1CGPqI0GAwJaCgRHOThuVw+R7oyPxjMW4T182t0xHJ04eOLoEq9jWYv6q012iDTiIJh8BIi
-trzQ1aTsr1SIJSQ8p22xcik/Plemf1WvbibG/ufMQFxRRIEKeN5KzlW/HdXZt1bv8Hb/C3m1r737
-qWmRRpdogBQ2HbN/uymYNqUg+oJgYjOk7Na6B6duxc8UpufWkjTYgfX8HV2qXB72o007uPc5AgMB
-AAGjgZcwgZQwDwYDVR0TAQH/BAUwAwEB/zBSBgNVHSAESzBJMEcGBFUdIAAwPzA9BggrBgEFBQcC
-ARYxaHR0cDovL3d3dy5wa2lvdmVyaGVpZC5ubC9wb2xpY2llcy9yb290LXBvbGljeS1HMjAOBgNV
-HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJFoMocVHYnitfGsNig0jQt8YojrMA0GCSqGSIb3DQEBCwUA
-A4ICAQCoQUpnKpKBglBu4dfYszk78wIVCVBR7y29JHuIhjv5tLySCZa59sCrI2AGeYwRTlHSeYAz
-+51IvuxBQ4EffkdAHOV6CMqqi3WtFMTC6GY8ggen5ieCWxjmD27ZUD6KQhgpxrRW/FYQoAUXvQwj
-f/ST7ZwaUb7dRUG/kSS0H4zpX897IZmflZ85OkYcbPnNe5yQzSipx6lVu6xiNGI1E0sUOlWDuYaN
-kqbG9AclVMwWVxJKgnjIFNkXgiYtXSAfea7+1HAWFpWD2DU5/1JddRwWxRNVz0fMdWVSSt7wsKfk
-CpYL+63C4iWEst3kvX5ZbJvw8NjnyvLplzh+ib7M+zkXYT9y2zqR2GUBGR2tUKRXCnxLvJxxcypF
-URmFzI79R6d0lR2o0a9OF7FpJsKqeFdbxU2n5Z4FF5TKsl+gSRiNNOkmbEgeqmiSBeGCc1qb3Adb
-CG19ndeNIdn8FCCqwkXfP+cAslHkwvgFuXkajDTznlvkN1trSt8sV4pAWja63XVECDdCcAz+3F4h
-oKOKwJCcaNpQ5kUQR3i2TtJlycM33+FCY7BXN0Ute4qcvwXqZVUz9zkQxSgqIXobisQk+T8VyJoV
-IPVVYpbtbZNQvOSqeK3Zywplh6ZmwcSBo3c6WB4L7oOLnR7SUqTMHW+wmG2UMbX4cQrcufx9MmDm
-66+KAQ==
------END CERTIFICATE-----
-
-CA Disig
-========
------BEGIN CERTIFICATE-----
-MIIEDzCCAvegAwIBAgIBATANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQGEwJTSzETMBEGA1UEBxMK
-QnJhdGlzbGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwHhcNMDYw
-MzIyMDEzOTM0WhcNMTYwMzIyMDEzOTM0WjBKMQswCQYDVQQGEwJTSzETMBEGA1UEBxMKQnJhdGlz
-bGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwggEiMA0GCSqGSIb3
-DQEBAQUAA4IBDwAwggEKAoIBAQCS9jHBfYj9mQGp2HvycXXxMcbzdWb6UShGhJd4NLxs/LxFWYgm
-GErENx+hSkS943EE9UQX4j/8SFhvXJ56CbpRNyIjZkMhsDxkovhqFQ4/61HhVKndBpnXmjxUizkD
-Pw/Fzsbrg3ICqB9x8y34dQjbYkzo+s7552oftms1grrijxaSfQUMbEYDXcDtab86wYqg6I7ZuUUo
-hwjstMoVvoLdtUSLLa2GDGhibYVW8qwUYzrG0ZmsNHhWS8+2rT+MitcE5eN4TPWGqvWP+j1scaMt
-ymfraHtuM6kMgiioTGohQBUgDCZbg8KpFhXAJIJdKxatymP2dACw30PEEGBWZ2NFAgMBAAGjgf8w
-gfwwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUjbJJaJ1yCCW5wCf1UJNWSEZx+Y8wDgYDVR0P
-AQH/BAQDAgEGMDYGA1UdEQQvMC2BE2Nhb3BlcmF0b3JAZGlzaWcuc2uGFmh0dHA6Ly93d3cuZGlz
-aWcuc2svY2EwZgYDVR0fBF8wXTAtoCugKYYnaHR0cDovL3d3dy5kaXNpZy5zay9jYS9jcmwvY2Ff
-ZGlzaWcuY3JsMCygKqAohiZodHRwOi8vY2EuZGlzaWcuc2svY2EvY3JsL2NhX2Rpc2lnLmNybDAa
-BgNVHSAEEzARMA8GDSuBHpGT5goAAAABAQEwDQYJKoZIhvcNAQEFBQADggEBAF00dGFMrzvY/59t
-WDYcPQuBDRIrRhCA/ec8J9B6yKm2fnQwM6M6int0wHl5QpNt/7EpFIKrIYwvF/k/Ji/1WcbvgAa3
-mkkp7M5+cTxqEEHA9tOasnxakZzArFvITV734VP/Q3f8nktnbNfzg9Gg4H8l37iYC5oyOGwwoPP/
-CBUz91BKez6jPiCp3C9WgArtQVCwyfTssuMmRAAOb54GvCKWU3BlxFAKRmukLyeBEicTXxChds6K
-ezfqwzlhA5WYOudsiCUI/HloDYd9Yvi0X/vF2Ey9WLw/Q1vUHgFNPGO+I++MzVpQuGhU+QqZMxEA
-4Z7CRneC9VkGjCFMhwnN5ag=
------END CERTIFICATE-----
-
-Juur-SK
-=======
------BEGIN CERTIFICATE-----
-MIIE5jCCA86gAwIBAgIEO45L/DANBgkqhkiG9w0BAQUFADBdMRgwFgYJKoZIhvcNAQkBFglwa2lA
-c2suZWUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKExlBUyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMRAw
-DgYDVQQDEwdKdXVyLVNLMB4XDTAxMDgzMDE0MjMwMVoXDTE2MDgyNjE0MjMwMVowXTEYMBYGCSqG
-SIb3DQEJARYJcGtpQHNrLmVlMQswCQYDVQQGEwJFRTEiMCAGA1UEChMZQVMgU2VydGlmaXRzZWVy
-aW1pc2tlc2t1czEQMA4GA1UEAxMHSnV1ci1TSzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
-ggEBAIFxNj4zB9bjMI0TfncyRsvPGbJgMUaXhvSYRqTCZUXP00B841oiqBB4M8yIsdOBSvZiF3tf
-TQou0M+LI+5PAk676w7KvRhj6IAcjeEcjT3g/1tf6mTll+g/mX8MCgkzABpTpyHhOEvWgxutr2TC
-+Rx6jGZITWYfGAriPrsfB2WThbkasLnE+w0R9vXW+RvHLCu3GFH+4Hv2qEivbDtPL+/40UceJlfw
-UR0zlv/vWT3aTdEVNMfqPxZIe5EcgEMPPbgFPtGzlc3Yyg/CQ2fbt5PgIoIuvvVoKIO5wTtpeyDa
-Tpxt4brNj3pssAki14sL2xzVWiZbDcDq5WDQn/413z8CAwEAAaOCAawwggGoMA8GA1UdEwEB/wQF
-MAMBAf8wggEWBgNVHSAEggENMIIBCTCCAQUGCisGAQQBzh8BAQEwgfYwgdAGCCsGAQUFBwICMIHD
-HoHAAFMAZQBlACAAcwBlAHIAdABpAGYAaQBrAGEAYQB0ACAAbwBuACAAdgDkAGwAagBhAHMAdABh
-AHQAdQBkACAAQQBTAC0AaQBzACAAUwBlAHIAdABpAGYAaQB0AHMAZQBlAHIAaQBtAGkAcwBrAGUA
-cwBrAHUAcwAgAGEAbABhAG0ALQBTAEsAIABzAGUAcgB0AGkAZgBpAGsAYQBhAHQAaQBkAGUAIABr
-AGkAbgBuAGkAdABhAG0AaQBzAGUAawBzMCEGCCsGAQUFBwIBFhVodHRwOi8vd3d3LnNrLmVlL2Nw
-cy8wKwYDVR0fBCQwIjAgoB6gHIYaaHR0cDovL3d3dy5zay5lZS9qdXVyL2NybC8wHQYDVR0OBBYE
-FASqekej5ImvGs8KQKcYP2/v6X2+MB8GA1UdIwQYMBaAFASqekej5ImvGs8KQKcYP2/v6X2+MA4G
-A1UdDwEB/wQEAwIB5jANBgkqhkiG9w0BAQUFAAOCAQEAe8EYlFOiCfP+JmeaUOTDBS8rNXiRTHyo
-ERF5TElZrMj3hWVcRrs7EKACr81Ptcw2Kuxd/u+gkcm2k298gFTsxwhwDY77guwqYHhpNjbRxZyL
-abVAyJRld/JXIWY7zoVAtjNjGr95HvxcHdMdkxuLDF2FvZkwMhgJkVLpfKG6/2SSmuz+Ne6ML678
-IIbsSt4beDI3poHSna9aEhbKmVv8b20OxaAehsmR0FyYgl9jDIpaq9iVpszLita/ZEuOyoqysOkh
-Mp6qqIWYNIE5ITuoOlIyPfZrN4YGWhWY3PARZv40ILcD9EEQfTmEeZZyY7aWAuVrua0ZTbvGRNs2
-yyqcjg==
------END CERTIFICATE-----
-
-Hongkong Post Root CA 1
-=======================
------BEGIN CERTIFICATE-----
-MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoT
-DUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMB4XDTAzMDUx
-NTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25n
-IFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEF
-AAOCAQ8AMIIBCgKCAQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1
-ApzQjVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEnPzlTCeqr
-auh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjhZY4bXSNmO7ilMlHIhqqh
-qZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9nnV0ttgCXjqQesBCNnLsak3c78QA3xMY
-V18meMjWCnl3v/evt3a5pQuEF10Q6m/hq5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNV
-HRMBAf8ECDAGAQH/AgEDMA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7i
-h9legYsCmEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI37pio
-l7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clBoiMBdDhViw+5Lmei
-IAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJsEhTkYY2sEJCehFC78JZvRZ+K88ps
-T/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpOfMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilT
-c4afU9hDDl3WY4JxHYB0yvbiAmvZWg==
------END CERTIFICATE-----
-
-SecureSign RootCA11
-===================
------BEGIN CERTIFICATE-----
-MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDErMCkGA1UEChMi
-SmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoGA1UEAxMTU2VjdXJlU2lnbiBS
-b290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSsw
-KQYDVQQKEyJKYXBhbiBDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1
-cmVTaWduIFJvb3RDQTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvL
-TJszi1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8h9uuywGO
-wvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOVMdrAG/LuYpmGYz+/3ZMq
-g6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rP
-O7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitA
-bpSACW22s293bzUIUPsCh8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZX
-t94wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAKCh
-OBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xmKbabfSVSSUOrTC4r
-bnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQX5Ucv+2rIrVls4W6ng+4reV6G4pQ
-Oh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWrQbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01
-y8hSyn+B/tlr0/cR7SXf+Of5pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061
-lgeLKBObjBmNQSdJQO7e5iNEOdyhIta6A/I=
------END CERTIFICATE-----
-
-ACEDICOM Root
-=============
------BEGIN CERTIFICATE-----
-MIIFtTCCA52gAwIBAgIIYY3HhjsBggUwDQYJKoZIhvcNAQEFBQAwRDEWMBQGA1UEAwwNQUNFRElD
-T00gUm9vdDEMMAoGA1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00xCzAJBgNVBAYTAkVTMB4XDTA4
-MDQxODE2MjQyMloXDTI4MDQxMzE2MjQyMlowRDEWMBQGA1UEAwwNQUNFRElDT00gUm9vdDEMMAoG
-A1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00xCzAJBgNVBAYTAkVTMIICIjANBgkqhkiG9w0BAQEF
-AAOCAg8AMIICCgKCAgEA/5KV4WgGdrQsyFhIyv2AVClVYyT/kGWbEHV7w2rbYgIB8hiGtXxaOLHk
-WLn709gtn70yN78sFW2+tfQh0hOR2QetAQXW8713zl9CgQr5auODAKgrLlUTY4HKRxx7XBZXehuD
-YAQ6PmXDzQHe3qTWDLqO3tkE7hdWIpuPY/1NFgu3e3eM+SW10W2ZEi5PGrjm6gSSrj0RuVFCPYew
-MYWveVqc/udOXpJPQ/yrOq2lEiZmueIM15jO1FillUAKt0SdE3QrwqXrIhWYENiLxQSfHY9g5QYb
-m8+5eaA9oiM/Qj9r+hwDezCNzmzAv+YbX79nuIQZ1RXve8uQNjFiybwCq0Zfm/4aaJQ0PZCOrfbk
-HQl/Sog4P75n/TSW9R28MHTLOO7VbKvU/PQAtwBbhTIWdjPp2KOZnQUAqhbm84F9b32qhm2tFXTT
-xKJxqvQUfecyuB+81fFOvW8XAjnXDpVCOscAPukmYxHqC9FK/xidstd7LzrZlvvoHpKuE1XI2Sf2
-3EgbsCTBheN3nZqk8wwRHQ3ItBTutYJXCb8gWH8vIiPYcMt5bMlL8qkqyPyHK9caUPgn6C9D4zq9
-2Fdx/c6mUlv53U3t5fZvie27k5x2IXXwkkwp9y+cAS7+UEaeZAwUswdbxcJzbPEHXEUkFDWug/Fq
-TYl6+rPYLWbwNof1K1MCAwEAAaOBqjCBpzAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKaz
-4SsrSbbXc6GqlPUB53NlTKxQMA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUprPhKytJttdzoaqU
-9QHnc2VMrFAwRAYDVR0gBD0wOzA5BgRVHSAAMDEwLwYIKwYBBQUHAgEWI2h0dHA6Ly9hY2VkaWNv
-bS5lZGljb21ncm91cC5jb20vZG9jMA0GCSqGSIb3DQEBBQUAA4ICAQDOLAtSUWImfQwng4/F9tqg
-aHtPkl7qpHMyEVNEskTLnewPeUKzEKbHDZ3Ltvo/Onzqv4hTGzz3gvoFNTPhNahXwOf9jU8/kzJP
-eGYDdwdY6ZXIfj7QeQCM8htRM5u8lOk6e25SLTKeI6RF+7YuE7CLGLHdztUdp0J/Vb77W7tH1Pwk
-zQSulgUV1qzOMPPKC8W64iLgpq0i5ALudBF/TP94HTXa5gI06xgSYXcGCRZj6hitoocf8seACQl1
-ThCojz2GuHURwCRiipZ7SkXp7FnFvmuD5uHorLUwHv4FB4D54SMNUI8FmP8sX+g7tq3PgbUhh8oI
-KiMnMCArz+2UW6yyetLHKKGKC5tNSixthT8Jcjxn4tncB7rrZXtaAWPWkFtPF2Y9fwsZo5NjEFIq
-nxQWWOLcpfShFosOkYuByptZ+thrkQdlVV9SH686+5DdaaVbnG0OLLb6zqylfDJKZ0DcMDQj3dcE
-I2bw/FWAp/tmGYI1Z2JwOV5vx+qQQEQIHriy1tvuWacNGHk0vFQYXlPKNFHtRQrmjseCNj6nOGOp
-MCwXEGCSn1WHElkQwg9naRHMTh5+Spqtr0CodaxWkHS4oJyleW/c6RrIaQXpuvoDs3zk4E7Czp3o
-tkYNbn5XOmeUwssfnHdKZ05phkOTOPu220+DkdRgfks+KzgHVZhepA==
------END CERTIFICATE-----
-
-Verisign Class 3 Public Primary Certification Authority
-=======================================================
------BEGIN CERTIFICATE-----
-MIICPDCCAaUCEDyRMcsf9tAbDpq40ES/Er4wDQYJKoZIhvcNAQEFBQAwXzELMAkGA1UEBhMCVVMx
-FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmltYXJ5
-IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVow
-XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAz
-IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA
-A4GNADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhEBarsAx94
-f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/isI19wKTakyYbnsZogy1Ol
-hec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBABByUqkFFBky
-CEHwxWsKzH4PIRnN5GfcX6kb5sroc50i2JhucwNhkcV8sEVAbkSdjbCxlnRhLQ2pRdKkkirWmnWX
-bj9T/UWZYB2oK0z5XqcJ2HUw19JlYD1n1khVdWk/kfVIC0dpImmClr7JyDiGSnoscxlIaU5rfGW/
-D/xwzoiQ
------END CERTIFICATE-----
-
-Microsec e-Szigno Root CA 2009
-==============================
------BEGIN CERTIFICATE-----
-MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYDVQQGEwJIVTER
-MA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jv
-c2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o
-dTAeFw0wOTA2MTYxMTMwMThaFw0yOTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UE
-BwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUt
-U3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTCCASIw
-DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvPkd6mJviZpWNwrZuuyjNA
-fW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tccbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG
-0IMZfcChEhyVbUr02MelTTMuhTlAdX4UfIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKA
-pxn1ntxVUwOXewdI/5n7N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm
-1HxdrtbCxkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1+rUC
-AwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTLD8bf
-QkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAbBgNVHREE
-FDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqGSIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0o
-lZMEyL/azXm4Q5DwpL7v8u8hmLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfX
-I/OMn74dseGkddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775
-tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c2Pm2G2JwCz02
-yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5tHMN1Rq41Bab2XD0h7lbwyYIi
-LXpUq3DDfSJlgnCW
------END CERTIFICATE-----
-
-E-Guven Kok Elektronik Sertifika Hizmet Saglayicisi
-===================================================
------BEGIN CERTIFICATE-----
-MIIDtjCCAp6gAwIBAgIQRJmNPMADJ72cdpW56tustTANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQG
-EwJUUjEoMCYGA1UEChMfRWxla3Ryb25payBCaWxnaSBHdXZlbmxpZ2kgQS5TLjE8MDoGA1UEAxMz
-ZS1HdXZlbiBLb2sgRWxla3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhZ2xheWljaXNpMB4XDTA3
-MDEwNDExMzI0OFoXDTE3MDEwNDExMzI0OFowdTELMAkGA1UEBhMCVFIxKDAmBgNVBAoTH0VsZWt0
-cm9uaWsgQmlsZ2kgR3V2ZW5saWdpIEEuUy4xPDA6BgNVBAMTM2UtR3V2ZW4gS29rIEVsZWt0cm9u
-aWsgU2VydGlmaWthIEhpem1ldCBTYWdsYXlpY2lzaTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
-AQoCggEBAMMSIJ6wXgBljU5Gu4Bc6SwGl9XzcslwuedLZYDBS75+PNdUMZTe1RK6UxYC6lhj71vY
-8+0qGqpxSKPcEC1fX+tcS5yWCEIlKBHMilpiAVDV6wlTL/jDj/6z/P2douNffb7tC+Bg62nsM+3Y
-jfsSSYMAyYuXjDtzKjKzEve5TfL0TW3H5tYmNwjy2f1rXKPlSFxYvEK+A1qBuhw1DADT9SN+cTAI
-JjjcJRFHLfO6IxClv7wC90Nex/6wN1CZew+TzuZDLMN+DfIcQ2Zgy2ExR4ejT669VmxMvLz4Bcpk
-9Ok0oSy1c+HCPujIyTQlCFzz7abHlJ+tiEMl1+E5YP6sOVkCAwEAAaNCMEAwDgYDVR0PAQH/BAQD
-AgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFJ/uRLOU1fqRTy7ZVZoEVtstxNulMA0GCSqG
-SIb3DQEBBQUAA4IBAQB/X7lTW2M9dTLn+sR0GstG30ZpHFLPqk/CaOv/gKlR6D1id4k9CnU58W5d
-F4dvaAXBlGzZXd/aslnLpRCKysw5zZ/rTt5S/wzw9JKp8mxTq5vSR6AfdPebmvEvFZ96ZDAYBzwq
-D2fK/A+JYZ1lpTzlvBNbCNvj/+27BrtqBrF6T2XGgv0enIu1De5Iu7i9qgi0+6N8y5/NkHZchpZ4
-Vwpm+Vganf2XKWDeEaaQHBkc7gGWIjQ0LpH5t8Qn0Xvmv/uARFoW5evg1Ao4vOSR49XrXMGs3xtq
-fJ7lddK2l4fbzIcrQzqECK+rPNv3PGYxhrCdU3nt+CPeQuMtgvEP5fqX
------END CERTIFICATE-----
-
-GlobalSign Root CA - R3
-=======================
------BEGIN CERTIFICATE-----
-MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4GA1UECxMXR2xv
-YmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh
-bFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT
-aWduIFJvb3QgQ0EgLSBSMzETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln
-bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWt
-iHL8RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsTgHeMCOFJ
-0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmmKPZpO/bLyCiR5Z2KYVc3
-rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zdQQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjl
-OCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZXriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2
-xmmFghcCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE
-FI/wS3+oLkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZURUm7
-lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMpjjM5RcOO5LlXbKr8
-EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK6fBdRoyV3XpYKBovHd7NADdBj+1E
-bddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQXmcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18
-YIvDQVETI53O9zJrlAGomecsMx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7r
-kpeDMdmztcpHWD9f
------END CERTIFICATE-----
-
-TC TrustCenter Universal CA III
-===============================
------BEGIN CERTIFICATE-----
-MIID4TCCAsmgAwIBAgIOYyUAAQACFI0zFQLkbPQwDQYJKoZIhvcNAQEFBQAwezELMAkGA1UEBhMC
-REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNVBAsTG1RDIFRydXN0Q2VudGVy
-IFVuaXZlcnNhbCBDQTEoMCYGA1UEAxMfVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBIElJSTAe
-Fw0wOTA5MDkwODE1MjdaFw0yOTEyMzEyMzU5NTlaMHsxCzAJBgNVBAYTAkRFMRwwGgYDVQQKExNU
-QyBUcnVzdENlbnRlciBHbWJIMSQwIgYDVQQLExtUQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0Ex
-KDAmBgNVBAMTH1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQSBJSUkwggEiMA0GCSqGSIb3DQEB
-AQUAA4IBDwAwggEKAoIBAQDC2pxisLlxErALyBpXsq6DFJmzNEubkKLF5+cvAqBNLaT6hdqbJYUt
-QCggbergvbFIgyIpRJ9Og+41URNzdNW88jBmlFPAQDYvDIRlzg9uwliT6CwLOunBjvvya8o84pxO
-juT5fdMnnxvVZ3iHLX8LR7PH6MlIfK8vzArZQe+f/prhsq75U7Xl6UafYOPfjdN/+5Z+s7Vy+Eut
-CHnNaYlAJ/Uqwa1D7KRTyGG299J5KmcYdkhtWyUB0SbFt1dpIxVbYYqt8Bst2a9c8SaQaanVDED1
-M4BDj5yjdipFtK+/fz6HP3bFzSreIMUWWMv5G/UPyw0RUmS40nZid4PxWJ//AgMBAAGjYzBhMB8G
-A1UdIwQYMBaAFFbn4VslQ4Dg9ozhcbyO5YAvxEjiMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/
-BAQDAgEGMB0GA1UdDgQWBBRW5+FbJUOA4PaM4XG8juWAL8RI4jANBgkqhkiG9w0BAQUFAAOCAQEA
-g8ev6n9NCjw5sWi+e22JLumzCecYV42FmhfzdkJQEw/HkG8zrcVJYCtsSVgZ1OK+t7+rSbyUyKu+
-KGwWaODIl0YgoGhnYIg5IFHYaAERzqf2EQf27OysGh+yZm5WZ2B6dF7AbZc2rrUNXWZzwCUyRdhK
-BgePxLcHsU0GDeGl6/R1yrqc0L2z0zIkTO5+4nYES0lT2PLpVDP85XEfPRRclkvxOvIAu2y0+pZV
-CIgJwcyRGSmwIC3/yzikQOEXvnlhgP8HA4ZMTnsGnxGGjYnuJ8Tb4rwZjgvDwxPHLQNjO9Po5KIq
-woIIlBZU8O8fJ5AluA0OKBtHd0e9HKgl8ZS0Zg==
------END CERTIFICATE-----
-
-Autoridad de Certificacion Firmaprofesional CIF A62634068
-=========================================================
------BEGIN CERTIFICATE-----
-MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCRVMxQjBA
-BgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2
-MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEyMzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIw
-QAYDVQQDDDlBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBB
-NjI2MzQwNjgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDD
-Utd9thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQMcas9UX4P
-B99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefGL9ItWY16Ck6WaVICqjaY
-7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15iNA9wBj4gGFrO93IbJWyTdBSTo3OxDqqH
-ECNZXyAFGUftaI6SEspd/NYrspI8IM/hX68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyI
-plD9amML9ZMWGxmPsu2bm8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctX
-MbScyJCyZ/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirjaEbsX
-LZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/TKI8xWVvTyQKmtFLK
-bpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF6NkBiDkal4ZkQdU7hwxu+g/GvUgU
-vzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVhOSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1Ud
-EwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNH
-DhpkLzCBpgYDVR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp
-cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBvACAAZABlACAA
-bABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBlAGwAbwBuAGEAIAAwADgAMAAx
-ADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx
-51tkljYyGOylMnfX40S2wBEqgLk9am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qk
-R71kMrv2JYSiJ0L1ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaP
-T481PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS3a/DTg4f
-Jl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5kSeTy36LssUzAKh3ntLFl
-osS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF3dvd6qJ2gHN99ZwExEWN57kci57q13XR
-crHedUTnQn3iV2t93Jm8PYMo6oCTjcVMZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoR
-saS8I8nkvof/uZS2+F0gStRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTD
-KCOM/iczQ0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQBjLMi
-6Et8Vcad+qMUu2WFbm5PEn4KPJ2V
------END CERTIFICATE-----
-
-Izenpe.com
-==========
------BEGIN CERTIFICATE-----
-MIIF8TCCA9mgAwIBAgIQALC3WhZIX7/hy/WL1xnmfTANBgkqhkiG9w0BAQsFADA4MQswCQYDVQQG
-EwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wHhcNMDcxMjEz
-MTMwODI4WhcNMzcxMjEzMDgyNzI1WjA4MQswCQYDVQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMu
-QS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDJ
-03rKDx6sp4boFmVqscIbRTJxldn+EFvMr+eleQGPicPK8lVx93e+d5TzcqQsRNiekpsUOqHnJJAK
-ClaOxdgmlOHZSOEtPtoKct2jmRXagaKH9HtuJneJWK3W6wyyQXpzbm3benhB6QiIEn6HLmYRY2xU
-+zydcsC8Lv/Ct90NduM61/e0aL6i9eOBbsFGb12N4E3GVFWJGjMxCrFXuaOKmMPsOzTFlUFpfnXC
-PCDFYbpRR6AgkJOhkEvzTnyFRVSa0QUmQbC1TR0zvsQDyCV8wXDbO/QJLVQnSKwv4cSsPsjLkkxT
-OTcj7NMB+eAJRE1NZMDhDVqHIrytG6P+JrUV86f8hBnp7KGItERphIPzidF0BqnMC9bC3ieFUCbK
-F7jJeodWLBoBHmy+E60QrLUk9TiRodZL2vG70t5HtfG8gfZZa88ZU+mNFctKy6lvROUbQc/hhqfK
-0GqfvEyNBjNaooXlkDWgYlwWTvDjovoDGrQscbNYLN57C9saD+veIR8GdwYDsMnvmfzAuU8Lhij+
-0rnq49qlw0dpEuDb8PYZi+17cNcC1u2HGCgsBCRMd+RIihrGO5rUD8r6ddIBQFqNeb+Lz0vPqhbB
-leStTIo+F5HUsWLlguWABKQDfo2/2n+iD5dPDNMN+9fR5XJ+HMh3/1uaD7euBUbl8agW7EekFwID
-AQABo4H2MIHzMIGwBgNVHREEgagwgaWBD2luZm9AaXplbnBlLmNvbaSBkTCBjjFHMEUGA1UECgw+
-SVpFTlBFIFMuQS4gLSBDSUYgQTAxMzM3MjYwLVJNZXJjLlZpdG9yaWEtR2FzdGVpeiBUMTA1NSBG
-NjIgUzgxQzBBBgNVBAkMOkF2ZGEgZGVsIE1lZGl0ZXJyYW5lbyBFdG9yYmlkZWEgMTQgLSAwMTAx
-MCBWaXRvcmlhLUdhc3RlaXowDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0O
-BBYEFB0cZQ6o8iV7tJHP5LGx5r1VdGwFMA0GCSqGSIb3DQEBCwUAA4ICAQB4pgwWSp9MiDrAyw6l
-Fn2fuUhfGI8NYjb2zRlrrKvV9pF9rnHzP7MOeIWblaQnIUdCSnxIOvVFfLMMjlF4rJUT3sb9fbga
-kEyrkgPH7UIBzg/YsfqikuFgba56awmqxinuaElnMIAkejEWOVt+8Rwu3WwJrfIxwYJOubv5vr8q
-hT/AQKM6WfxZSzwoJNu0FXWuDYi6LnPAvViH5ULy617uHjAimcs30cQhbIHsvm0m5hzkQiCeR7Cs
-g1lwLDXWrzY0tM07+DKo7+N4ifuNRSzanLh+QBxh5z6ikixL8s36mLYp//Pye6kfLqCTVyvehQP5
-aTfLnnhqBbTFMXiJ7HqnheG5ezzevh55hM6fcA5ZwjUukCox2eRFekGkLhObNA5me0mrZJfQRsN5
-nXJQY6aYWwa9SG3YOYNw6DXwBdGqvOPbyALqfP2C2sJbUjWumDqtujWTI6cfSN01RpiyEGjkpTHC
-ClguGYEQyVB1/OpaFs4R1+7vUIgtYf8/QnMFlEPVjjxOAToZpR9GTnfQXeWBIiGH/pR9hNiTrdZo
-Q0iy2+tzJOeRf1SktoA+naM8THLCV8Sg1Mw4J87VBp6iSNnpn86CcDaTmjvfliHjWbcM2pE38P1Z
-WrOZyGlsQyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw==
------END CERTIFICATE-----
-
-Chambers of Commerce Root - 2008
-================================
------BEGIN CERTIFICATE-----
-MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYDVQQGEwJFVTFD
-MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv
-bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu
-QS4xKTAnBgNVBAMTIENoYW1iZXJzIG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEy
-Mjk1MFoXDTM4MDczMTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNl
-ZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQF
-EwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJl
-cnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC
-AQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW928sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKA
-XuFixrYp4YFs8r/lfTJqVKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorj
-h40G072QDuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR5gN/
-ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfLZEFHcpOrUMPrCXZk
-NNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05aSd+pZgvMPMZ4fKecHePOjlO+Bd5g
-D2vlGts/4+EhySnB8esHnFIbAURRPHsl18TlUlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331
-lubKgdaX8ZSD6e2wsWsSaR6s+12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ
-0wlf2eOKNcx5Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj
-ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAxhduub+84Mxh2
-EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNVHQ4EFgQU+SSsD7K1+HnA+mCI
-G8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1+HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJ
-BgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNh
-bWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENh
-bWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDiC
-CQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUH
-AgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAJASryI1
-wqM58C7e6bXpeHxIvj99RZJe6dqxGfwWPJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH
-3qLPaYRgM+gQDROpI9CF5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbU
-RWpGqOt1glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaHFoI6
-M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2pSB7+R5KBWIBpih1
-YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MDxvbxrN8y8NmBGuScvfaAFPDRLLmF
-9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QGtjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcK
-zBIKinmwPQN/aUv0NCB9szTqjktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvG
-nrDQWzilm1DefhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg
-OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZd0jQ
------END CERTIFICATE-----
-
-Global Chambersign Root - 2008
-==============================
------BEGIN CERTIFICATE-----
-MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYDVQQGEwJFVTFD
-MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv
-bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu
-QS4xJzAlBgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMx
-NDBaFw0zODA3MzExMjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUg
-Y3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJ
-QTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD
-aGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMDf
-VtPkOpt2RbQT2//BthmLN0EYlVJH6xedKYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXf
-XjaOcNFccUMd2drvXNL7G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0
-ZJJ0YPP2zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4ddPB
-/gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyGHoiMvvKRhI9lNNgA
-TH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2Id3UwD2ln58fQ1DJu7xsepeY7s2M
-H/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3VyJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfe
-Ox2YItaswTXbo6Al/3K1dh3ebeksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSF
-HTynyQbehP9r6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh
-wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsogzCtLkykPAgMB
-AAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQWBBS5CcqcHtvTbDprru1U8VuT
-BjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDprru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UE
-BhMCRVUxQzBBBgNVBAcTOk1hZHJpZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJm
-aXJtYS5jb20vYWRkcmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJm
-aXJtYSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiCCQDJzdPp
-1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEWHGh0
-dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAICIf3DekijZBZRG
-/5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZUohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6
-ReAJ3spED8IXDneRRXozX1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/s
-dZ7LoR/xfxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVza2Mg
-9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yydYhz2rXzdpjEetrHH
-foUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMdSqlapskD7+3056huirRXhOukP9Du
-qqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9OAP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETr
-P3iZ8ntxPjzxmKfFGBI/5rsoM0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVq
-c5iJWzouE4gev8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z
-09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B
------END CERTIFICATE-----
-
-Go Daddy Root Certificate Authority - G2
-========================================
------BEGIN CERTIFICATE-----
-MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
-B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoTEUdvRGFkZHkuY29tLCBJbmMu
-MTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5
-MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6
-b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8G
-A1UEAxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKDE6bFIEMBO4Tx5oVJnyfq
-9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD
-+qK+ihVqf94Lw7YZFAXK6sOoBJQ7RnwyDfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutd
-fMh8+7ArU6SSYmlRJQVhGkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMl
-NAJWJwGRtDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEAAaNC
-MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFDqahQcQZyi27/a9
-BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmXWWcDYfF+OwYxdS2hII5PZYe096ac
-vNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r
-5N9ss4UXnT3ZJE95kTXWXwTrgIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYV
-N8Gb5DKj7Tjo2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO
-LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI4uJEvlz36hz1
------END CERTIFICATE-----
-
-Starfield Root Certificate Authority - G2
-=========================================
------BEGIN CERTIFICATE-----
-MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
-B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s
-b2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVsZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0
-eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAw
-DgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQg
-VGVjaG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZpY2F0ZSBB
-dXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL3twQP89o/8ArFv
-W59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMgnLRJdzIpVv257IzdIvpy3Cdhl+72WoTs
-bhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNk
-N3mSwOxGXn/hbVNMYq/NHwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7Nf
-ZTD4p7dNdloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0HZbU
-JtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
-AQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0GCSqGSIb3DQEBCwUAA4IBAQARWfol
-TwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjUsHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx
-4mcujJUDJi5DnUox9g61DLu34jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUw
-F5okxBDgBPfg8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K
-pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1mMpYjn0q7pBZ
-c2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0
------END CERTIFICATE-----
-
-Starfield Services Root Certificate Authority - G2
-==================================================
------BEGIN CERTIFICATE-----
-MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
-B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s
-b2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVsZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRl
-IEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNV
-BAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxT
-dGFyZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2VydmljZXMg
-Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
-AQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20pOsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2
-h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm28xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4Pa
-hHQUw2eeBGg6345AWh1KTs9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLP
-LJGmpufehRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk6mFB
-rMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAwDwYDVR0TAQH/BAUw
-AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+qAdcwKziIorhtSpzyEZGDMA0GCSqG
-SIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMIbw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPP
-E95Dz+I0swSdHynVv/heyNXBve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTy
-xQGjhdByPq1zqwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd
-iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn0q23KXB56jza
-YyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCNsSi6
------END CERTIFICATE-----
-
-AffirmTrust Commercial
-======================
------BEGIN CERTIFICATE-----
-MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UEBhMCVVMxFDAS
-BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMB4XDTEw
-MDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly
-bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEF
-AAOCAQ8AMIIBCgKCAQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6Eqdb
-DuKPHx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yrba0F8PrV
-C8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPALMeIrJmqbTFeurCA+ukV6
-BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1yHp52UKqK39c/s4mT6NmgTWvRLpUHhww
-MmWd5jyTXlBOeuM61G7MGvv50jeuJCqrVwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNV
-HQ4EFgQUnZPGU4teyq8/nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
-AQYwDQYJKoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYGXUPG
-hi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNjvbz4YYCanrHOQnDi
-qX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivtZ8SOyUOyXGsViQK8YvxO8rUzqrJv
-0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9gN53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0kh
-sUlHRUe072o0EclNmsxZt9YCnlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8=
------END CERTIFICATE-----
-
-AffirmTrust Networking
-======================
------BEGIN CERTIFICATE-----
-MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UEBhMCVVMxFDAS
-BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMB4XDTEw
-MDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly
-bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEF
-AAOCAQ8AMIIBCgKCAQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SE
-Hi3yYJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbuakCNrmreI
-dIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRLQESxG9fhwoXA3hA/Pe24
-/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gb
-h+0t+nvujArjqWaJGctB+d1ENmHP4ndGyH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNV
-HQ4EFgQUBx/S55zawm6iQLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
-AQYwDQYJKoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfOtDIu
-UFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzuQY0x2+c06lkh1QF6
-12S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZLgo/bNjR9eUJtGxUAArgFU2HdW23
-WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4uolu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9
-/ZFvgrG+CJPbFEfxojfHRZ48x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s=
------END CERTIFICATE-----
-
-AffirmTrust Premium
-===================
------BEGIN CERTIFICATE-----
-MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UEBhMCVVMxFDAS
-BgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMB4XDTEwMDEy
-OTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRy
-dXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A
-MIICCgKCAgEAxBLfqV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtn
-BKAQJG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ+jjeRFcV
-5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrSs8PhaJyJ+HoAVt70VZVs
-+7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmd
-GPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d770O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5R
-p9EixAqnOEhss/n/fauGV+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NI
-S+LI+H+SqHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S5u04
-6uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4IaC1nEWTJ3s7xgaVY5
-/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TXOwF0lkLgAOIua+rF7nKsu7/+6qqo
-+Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYEFJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB
-/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByv
-MiPIs0laUZx2KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg
-Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B8OWycvpEgjNC
-6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQMKSOyARiqcTtNd56l+0OOF6S
-L5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK
-+4w1IX2COPKpVJEZNZOUbWo6xbLQu4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmV
-BtWVyuEklut89pMFu+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFg
-IxpHYoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8GKa1qF60
-g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaORtGdFNrHF+QFlozEJLUb
-zxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6eKeC2uAloGRwYQw==
------END CERTIFICATE-----
-
-AffirmTrust Premium ECC
-=======================
------BEGIN CERTIFICATE-----
-MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMCVVMxFDASBgNV
-BAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQcmVtaXVtIEVDQzAeFw0xMDAx
-MjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJBgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1U
-cnVzdDEgMB4GA1UEAwwXQWZmaXJtVHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQA
-IgNiAAQNMF4bFZ0D0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQ
-N8O9ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0GA1UdDgQW
-BBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAK
-BggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/VsaobgxCd05DhT1wV/GzTjxi+zygk8N53X
-57hG8f2h4nECMEJZh0PUUd+60wkyWs6Iflc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKM
-eQ==
------END CERTIFICATE-----
-
-Certum Trusted Network CA
-=========================
------BEGIN CERTIFICATE-----
-MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBMMSIwIAYDVQQK
-ExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlv
-biBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIy
-MTIwNzM3WhcNMjkxMjMxMTIwNzM3WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBU
-ZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
-MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC
-AQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rHUV+rpDKmYYe2bg+G0jAC
-l/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LMTXPb865Px1bVWqeWifrzq2jUI4ZZJ88J
-J7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVUBBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4
-fOQtf/WsX+sWn7Et0brMkUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0
-cvW0QM8xAcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNVHRMB
-Af8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYw
-DQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15ysHhE49wcrwn9I0j6vSrEuVUEtRCj
-jSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfLI9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1
-mS1FhIrlQgnXdAIv94nYmem8J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5aj
-Zt3hrvJBW8qYVoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI
-03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw=
------END CERTIFICATE-----
-
-Certinomis - Autorité Racine
-=============================
------BEGIN CERTIFICATE-----
-MIIFnDCCA4SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJGUjETMBEGA1UEChMK
-Q2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxJjAkBgNVBAMMHUNlcnRpbm9taXMg
-LSBBdXRvcml0w6kgUmFjaW5lMB4XDTA4MDkxNzA4Mjg1OVoXDTI4MDkxNzA4Mjg1OVowYzELMAkG
-A1UEBhMCRlIxEzARBgNVBAoTCkNlcnRpbm9taXMxFzAVBgNVBAsTDjAwMDIgNDMzOTk4OTAzMSYw
-JAYDVQQDDB1DZXJ0aW5vbWlzIC0gQXV0b3JpdMOpIFJhY2luZTCCAiIwDQYJKoZIhvcNAQEBBQAD
-ggIPADCCAgoCggIBAJ2Fn4bT46/HsmtuM+Cet0I0VZ35gb5j2CN2DpdUzZlMGvE5x4jYF1AMnmHa
-wE5V3udauHpOd4cN5bjr+p5eex7Ezyh0x5P1FMYiKAT5kcOrJ3NqDi5N8y4oH3DfVS9O7cdxbwly
-Lu3VMpfQ8Vh30WC8Tl7bmoT2R2FFK/ZQpn9qcSdIhDWerP5pqZ56XjUl+rSnSTV3lqc2W+HN3yNw
-2F1MpQiD8aYkOBOo7C+ooWfHpi2GR+6K/OybDnT0K0kCe5B1jPyZOQE51kqJ5Z52qz6WKDgmi92N
-jMD2AR5vpTESOH2VwnHu7XSu5DaiQ3XV8QCb4uTXzEIDS3h65X27uK4uIJPT5GHfceF2Z5c/tt9q
-c1pkIuVC28+BA5PY9OMQ4HL2AHCs8MF6DwV/zzRpRbWT5BnbUhYjBYkOjUjkJW+zeL9i9Qf6lSTC
-lrLooyPCXQP8w9PlfMl1I9f09bze5N/NgL+RiH2nE7Q5uiy6vdFrzPOlKO1Enn1So2+WLhl+HPNb
-xxaOu2B9d2ZHVIIAEWBsMsGoOBvrbpgT1u449fCfDu/+MYHB0iSVL1N6aaLwD4ZFjliCK0wi1F6g
-530mJ0jfJUaNSih8hp75mxpZuWW/Bd22Ql095gBIgl4g9xGC3srYn+Y3RyYe63j3YcNBZFgCQfna
-4NH4+ej9Uji29YnfAgMBAAGjWzBZMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G
-A1UdDgQWBBQNjLZh2kS40RR9w759XkjwzspqsDAXBgNVHSAEEDAOMAwGCiqBegFWAgIAAQEwDQYJ
-KoZIhvcNAQEFBQADggIBACQ+YAZ+He86PtvqrxyaLAEL9MW12Ukx9F1BjYkMTv9sov3/4gbIOZ/x
-WqndIlgVqIrTseYyCYIDbNc/CMf4uboAbbnW/FIyXaR/pDGUu7ZMOH8oMDX/nyNTt7buFHAAQCva
-R6s0fl6nVjBhK4tDrP22iCj1a7Y+YEq6QpA0Z43q619FVDsXrIvkxmUP7tCMXWY5zjKn2BCXwH40
-nJ+U8/aGH88bc62UeYdocMMzpXDn2NU4lG9jeeu/Cg4I58UvD0KgKxRA/yHgBcUn4YQRE7rWhh1B
-CxMjidPJC+iKunqjo3M3NYB9Ergzd0A4wPpeMNLytqOx1qKVl4GbUu1pTP+A5FPbVFsDbVRfsbjv
-JL1vnxHDx2TCDyhihWZeGnuyt++uNckZM6i4J9szVb9o4XVIRFb7zdNIu0eJOqxp9YDG5ERQL1TE
-qkPFMTFYvZbF6nVsmnWxTfj3l/+WFvKXTej28xH5On2KOG4Ey+HTRRWqpdEdnV1j6CTmNhTih60b
-WfVEm/vXd3wfAXBioSAaosUaKPQhA+4u2cGA6rnZgtZbdsLLO7XSAPCjDuGtbkD326C00EauFddE
-wk01+dIL8hf2rGbVJLJP0RyZwG71fet0BLj5TXcJ17TPBzAJ8bgAVtkXFhYKK4bfjwEZGuW7gmP/
-vgt2Fl43N+bYdJeimUV5
------END CERTIFICATE-----
-
-Root CA Generalitat Valenciana
-==============================
------BEGIN CERTIFICATE-----
-MIIGizCCBXOgAwIBAgIEO0XlaDANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJFUzEfMB0GA1UE
-ChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290
-IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwHhcNMDEwNzA2MTYyMjQ3WhcNMjEwNzAxMTUyMjQ3
-WjBoMQswCQYDVQQGEwJFUzEfMB0GA1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UE
-CxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwggEiMA0G
-CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGKqtXETcvIorKA3Qdyu0togu8M1JAJke+WmmmO3I2
-F0zo37i7L3bhQEZ0ZQKQUgi0/6iMweDHiVYQOTPvaLRfX9ptI6GJXiKjSgbwJ/BXufjpTjJ3Cj9B
-ZPPrZe52/lSqfR0grvPXdMIKX/UIKFIIzFVd0g/bmoGlu6GzwZTNVOAydTGRGmKy3nXiz0+J2ZGQ
-D0EbtFpKd71ng+CT516nDOeB0/RSrFOyA8dEJvt55cs0YFAQexvba9dHq198aMpunUEDEO5rmXte
-JajCq+TA81yc477OMUxkHl6AovWDfgzWyoxVjr7gvkkHD6MkQXpYHYTqWBLI4bft75PelAgxAgMB
-AAGjggM7MIIDNzAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAGGFmh0dHA6Ly9vY3NwLnBraS5n
-dmEuZXMwEgYDVR0TAQH/BAgwBgEB/wIBAjCCAjQGA1UdIASCAiswggInMIICIwYKKwYBBAG/VQIB
-ADCCAhMwggHoBggrBgEFBQcCAjCCAdoeggHWAEEAdQB0AG8AcgBpAGQAYQBkACAAZABlACAAQwBl
-AHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAFIAYQDtAHoAIABkAGUAIABsAGEAIABHAGUAbgBlAHIA
-YQBsAGkAdABhAHQAIABWAGEAbABlAG4AYwBpAGEAbgBhAC4ADQAKAEwAYQAgAEQAZQBjAGwAYQBy
-AGEAYwBpAPMAbgAgAGQAZQAgAFAAcgDhAGMAdABpAGMAYQBzACAAZABlACAAQwBlAHIAdABpAGYA
-aQBjAGEAYwBpAPMAbgAgAHEAdQBlACAAcgBpAGcAZQAgAGUAbAAgAGYAdQBuAGMAaQBvAG4AYQBt
-AGkAZQBuAHQAbwAgAGQAZQAgAGwAYQAgAHAAcgBlAHMAZQBuAHQAZQAgAEEAdQB0AG8AcgBpAGQA
-YQBkACAAZABlACAAQwBlAHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAHMAZQAgAGUAbgBjAHUAZQBu
-AHQAcgBhACAAZQBuACAAbABhACAAZABpAHIAZQBjAGMAaQDzAG4AIAB3AGUAYgAgAGgAdAB0AHAA
-OgAvAC8AdwB3AHcALgBwAGsAaQAuAGcAdgBhAC4AZQBzAC8AYwBwAHMwJQYIKwYBBQUHAgEWGWh0
-dHA6Ly93d3cucGtpLmd2YS5lcy9jcHMwHQYDVR0OBBYEFHs100DSHHgZZu90ECjcPk+yeAT8MIGV
-BgNVHSMEgY0wgYqAFHs100DSHHgZZu90ECjcPk+yeAT8oWykajBoMQswCQYDVQQGEwJFUzEfMB0G
-A1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5S
-b290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmGCBDtF5WgwDQYJKoZIhvcNAQEFBQADggEBACRh
-TvW1yEICKrNcda3FbcrnlD+laJWIwVTAEGmiEi8YPyVQqHxK6sYJ2fR1xkDar1CdPaUWu20xxsdz
-Ckj+IHLtb8zog2EWRpABlUt9jppSCS/2bxzkoXHPjCpaF3ODR00PNvsETUlR4hTJZGH71BTg9J63
-NI8KJr2XXPR5OkowGcytT6CYirQxlyric21+eLj4iIlPsSKRZEv1UN4D2+XFducTZnV+ZfsBn5OH
-iJ35Rld8TWCvmHMTI6QgkYH60GFmuH3Rr9ZvHmw96RH9qfmCIoaZM3Fa6hlXPZHNqcCjbgcTpsnt
-+GijnsNacgmHKNHEc8RzGF9QdRYxn7fofMM=
------END CERTIFICATE-----
-
-A-Trust-nQual-03
-================
------BEGIN CERTIFICATE-----
-MIIDzzCCAregAwIBAgIDAWweMA0GCSqGSIb3DQEBBQUAMIGNMQswCQYDVQQGEwJBVDFIMEYGA1UE
-Cgw/QS1UcnVzdCBHZXMuIGYuIFNpY2hlcmhlaXRzc3lzdGVtZSBpbSBlbGVrdHIuIERhdGVudmVy
-a2VociBHbWJIMRkwFwYDVQQLDBBBLVRydXN0LW5RdWFsLTAzMRkwFwYDVQQDDBBBLVRydXN0LW5R
-dWFsLTAzMB4XDTA1MDgxNzIyMDAwMFoXDTE1MDgxNzIyMDAwMFowgY0xCzAJBgNVBAYTAkFUMUgw
-RgYDVQQKDD9BLVRydXN0IEdlcy4gZi4gU2ljaGVyaGVpdHNzeXN0ZW1lIGltIGVsZWt0ci4gRGF0
-ZW52ZXJrZWhyIEdtYkgxGTAXBgNVBAsMEEEtVHJ1c3QtblF1YWwtMDMxGTAXBgNVBAMMEEEtVHJ1
-c3QtblF1YWwtMDMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtPWFuA/OQO8BBC4SA
-zewqo51ru27CQoT3URThoKgtUaNR8t4j8DRE/5TrzAUjlUC5B3ilJfYKvUWG6Nm9wASOhURh73+n
-yfrBJcyFLGM/BWBzSQXgYHiVEEvc+RFZznF/QJuKqiTfC0Li21a8StKlDJu3Qz7dg9MmEALP6iPE
-SU7l0+m0iKsMrmKS1GWH2WrX9IWf5DMiJaXlyDO6w8dB3F/GaswADm0yqLaHNgBid5seHzTLkDx4
-iHQF63n1k3Flyp3HaxgtPVxO59X4PzF9j4fsCiIvI+n+u33J4PTs63zEsMMtYrWacdaxaujs2e3V
-cuy+VwHOBVWf3tFgiBCzAgMBAAGjNjA0MA8GA1UdEwEB/wQFMAMBAf8wEQYDVR0OBAoECERqlWdV
-eRFPMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAVdRU0VlIXLOThaq/Yy/kgM40
-ozRiPvbY7meIMQQDbwvUB/tOdQ/TLtPAF8fGKOwGDREkDg6lXb+MshOWcdzUzg4NCmgybLlBMRmr
-sQd7TZjTXLDR8KdCoLXEjq/+8T/0709GAHbrAvv5ndJAlseIOrifEXnzgGWovR/TeIGgUUw3tKZd
-JXDRZslo+S4RFGjxVJgIrCaSD96JntT6s3kr0qN51OyLrIdTaEJMUVF0HhsnLuP1Hyl0Te2v9+GS
-mYHovjrHF1D2t8b8m7CKa9aIA5GPBnc6hQLdmNVDeD/GMBWsm2vLV7eJUYs66MmEDNuxUCAKGkq6
-ahq97BvIxYSazQ==
------END CERTIFICATE-----
-
-TWCA Root Certification Authority
-=================================
------BEGIN CERTIFICATE-----
-MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJ
-VEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlmaWNh
-dGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMzWhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQG
-EwJUVzESMBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NB
-IFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
-AoIBAQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFEAcK0HMMx
-QhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HHK3XLfJ+utdGdIzdjp9xC
-oi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeXRfwZVzsrb+RH9JlF/h3x+JejiB03HFyP
-4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/zrX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1r
-y+UPizgN7gr8/g+YnzAx3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIB
-BjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkqhkiG
-9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeCMErJk/9q56YAf4lC
-mtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdlsXebQ79NqZp4VKIV66IIArB6nCWlW
-QtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62Dlhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVY
-T0bf+215WfKEIlKuD8z7fDvnaspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocny
-Yh0igzyXxfkZYiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw==
------END CERTIFICATE-----
-
-Security Communication RootCA2
-==============================
------BEGIN CERTIFICATE-----
-MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDElMCMGA1UEChMc
-U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMeU2VjdXJpdHkgQ29tbXVuaWNh
-dGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoXDTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMC
-SlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3Vy
-aXR5IENvbW11bmljYXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
-ANAVOVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGrzbl+dp++
-+T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVMVAX3NuRFg3sUZdbcDE3R
-3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQhNBqyjoGADdH5H5XTz+L62e4iKrFvlNV
-spHEfbmwhRkGeC7bYRr6hfVKkaHnFtWOojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1K
-EOtOghY6rCcMU/Gt1SSwawNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8
-QIH4D5csOPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEB
-CwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpFcoJxDjrSzG+ntKEj
-u/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXcokgfGT+Ok+vx+hfuzU7jBBJV1uXk
-3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6q
-tnRGEmyR7jTV7JqR50S+kDFy1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29
-mvVXIwAHIRc/SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03
------END CERTIFICATE-----
-
-EC-ACC
-======
------BEGIN CERTIFICATE-----
-MIIFVjCCBD6gAwIBAgIQ7is969Qh3hSoYqwE893EATANBgkqhkiG9w0BAQUFADCB8zELMAkGA1UE
-BhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2VydGlmaWNhY2lvIChOSUYgUS0w
-ODAxMTc2LUkpMSgwJgYDVQQLEx9TZXJ2ZWlzIFB1YmxpY3MgZGUgQ2VydGlmaWNhY2lvMTUwMwYD
-VQQLEyxWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAoYykwMzE1MDMGA1UE
-CxMsSmVyYXJxdWlhIEVudGl0YXRzIGRlIENlcnRpZmljYWNpbyBDYXRhbGFuZXMxDzANBgNVBAMT
-BkVDLUFDQzAeFw0wMzAxMDcyMzAwMDBaFw0zMTAxMDcyMjU5NTlaMIHzMQswCQYDVQQGEwJFUzE7
-MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8gKE5JRiBRLTA4MDExNzYt
-SSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBDZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZl
-Z2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQubmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJh
-cnF1aWEgRW50aXRhdHMgZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUND
-MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsyLHT+KXQpWIR4NA9h0X84NzJB5R85iK
-w5K4/0CQBXCHYMkAqbWUZRkiFRfCQ2xmRJoNBD45b6VLeqpjt4pEndljkYRm4CgPukLjbo73FCeT
-ae6RDqNfDrHrZqJyTxIThmV6PttPB/SnCWDaOkKZx7J/sxaVHMf5NLWUhdWZXqBIoH7nF2W4onW4
-HvPlQn2v7fOKSGRdghST2MDk/7NQcvJ29rNdQlB50JQ+awwAvthrDk4q7D7SzIKiGGUzE3eeml0a
-E9jD2z3Il3rucO2n5nzbcc8tlGLfbdb1OL4/pYUKGbio2Al1QnDE6u/LDsg0qBIimAy4E5S2S+zw
-0JDnJwIDAQABo4HjMIHgMB0GA1UdEQQWMBSBEmVjX2FjY0BjYXRjZXJ0Lm5ldDAPBgNVHRMBAf8E
-BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUoMOLRKo3pUW/l4Ba0fF4opvpXY0wfwYD
-VR0gBHgwdjB0BgsrBgEEAfV4AQMBCjBlMCwGCCsGAQUFBwIBFiBodHRwczovL3d3dy5jYXRjZXJ0
-Lm5ldC92ZXJhcnJlbDA1BggrBgEFBQcCAjApGidWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5l
-dC92ZXJhcnJlbCAwDQYJKoZIhvcNAQEFBQADggEBAKBIW4IB9k1IuDlVNZyAelOZ1Vr/sXE7zDkJ
-lF7W2u++AVtd0x7Y/X1PzaBB4DSTv8vihpw3kpBWHNzrKQXlxJ7HNd+KDM3FIUPpqojlNcAZQmNa
-Al6kSBg6hW/cnbw/nZzBh7h6YQjpdwt/cKt63dmXLGQehb+8dJahw3oS7AwaboMMPOhyRp/7SNVe
-l+axofjk70YllJyJ22k4vuxcDlbHZVHlUIiIv0LVKz3l+bqeLrPK9HOSAgu+TGbrIP65y7WZf+a2
-E/rKS03Z7lNGBjvGTq2TWoF+bCpLagVFjPIhpDGQh2xlnJ2lYJU6Un/10asIbvPuW/mIPX64b24D
-5EI=
------END CERTIFICATE-----
-
-Hellenic Academic and Research Institutions RootCA 2011
-=======================================================
------BEGIN CERTIFICATE-----
-MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1IxRDBCBgNVBAoT
-O0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9y
-aXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z
-IFJvb3RDQSAyMDExMB4XDTExMTIwNjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYT
-AkdSMUQwQgYDVQQKEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z
-IENlcnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNo
-IEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
-AKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPzdYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI
-1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJfel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa
-71HFK9+WXesyHgLacEnsbgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u
-8yBRQlqD75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSPFEDH
-3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNVHRMBAf8EBTADAQH/
-MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp5dgTBCPuQSUwRwYDVR0eBEAwPqA8
-MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQub3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQu
-b3JnMA0GCSqGSIb3DQEBBQUAA4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVt
-XdMiKahsog2p6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8
-TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7dIsXRSZMFpGD
-/md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8AcysNnq/onN694/BtZqhFLKPM58N
-7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXIl7WdmplNsDz4SgCbZN2fOUvRJ9e4
------END CERTIFICATE-----
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/lib/requests/certs.py b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/lib/requests/certs.py
deleted file mode 100644
index bc00826..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/lib/requests/certs.py
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-
-"""
-certs.py
-~~~~~~~~
-
-This module returns the preferred default CA certificate bundle.
-
-If you are packaging Requests, e.g., for a Linux distribution or a managed
-environment, you can change the definition of where() to return a separately
-packaged CA bundle.
-"""
-
-import os.path
-
-
-def where():
- """Return the preferred certificate bundle."""
- # vendored bundle inside Requests
- return os.path.join(os.path.dirname(__file__), 'cacert.pem')
-
-if __name__ == '__main__':
- print(where())
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/lib/requests/compat.py b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/lib/requests/compat.py
deleted file mode 100644
index bcf94b0..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/lib/requests/compat.py
+++ /dev/null
@@ -1,113 +0,0 @@
-# -*- coding: utf-8 -*-
-
-"""
-pythoncompat
-"""
-
-from .packages import charade as chardet
-
-import sys
-
-# -------
-# Pythons
-# -------
-
-# Syntax sugar.
-_ver = sys.version_info
-
-#: Python 2.x?
-is_py2 = (_ver[0] == 2)
-
-#: Python 3.x?
-is_py3 = (_ver[0] == 3)
-
-#: Python 3.0.x
-is_py30 = (is_py3 and _ver[1] == 0)
-
-#: Python 3.1.x
-is_py31 = (is_py3 and _ver[1] == 1)
-
-#: Python 3.2.x
-is_py32 = (is_py3 and _ver[1] == 2)
-
-#: Python 3.3.x
-is_py33 = (is_py3 and _ver[1] == 3)
-
-#: Python 3.4.x
-is_py34 = (is_py3 and _ver[1] == 4)
-
-#: Python 2.7.x
-is_py27 = (is_py2 and _ver[1] == 7)
-
-#: Python 2.6.x
-is_py26 = (is_py2 and _ver[1] == 6)
-
-#: Python 2.5.x
-is_py25 = (is_py2 and _ver[1] == 5)
-
-#: Python 2.4.x
-is_py24 = (is_py2 and _ver[1] == 4) # I'm assuming this is not by choice.
-
-
-# ---------
-# Platforms
-# ---------
-
-
-# Syntax sugar.
-_ver = sys.version.lower()
-
-is_pypy = ('pypy' in _ver)
-is_jython = ('jython' in _ver)
-is_ironpython = ('iron' in _ver)
-
-# Assume CPython, if nothing else.
-is_cpython = not any((is_pypy, is_jython, is_ironpython))
-
-# Windows-based system.
-is_windows = 'win32' in str(sys.platform).lower()
-
-# Standard Linux 2+ system.
-is_linux = ('linux' in str(sys.platform).lower())
-is_osx = ('darwin' in str(sys.platform).lower())
-is_hpux = ('hpux' in str(sys.platform).lower()) # Complete guess.
-is_solaris = ('solar==' in str(sys.platform).lower()) # Complete guess.
-
-try:
- import simplejson as json
-except ImportError:
- import json
-
-# ---------
-# Specifics
-# ---------
-
-if is_py2:
- from urllib import quote, unquote, quote_plus, unquote_plus, urlencode
- from urlparse import urlparse, urlunparse, urljoin, urlsplit, urldefrag
- from urllib2 import parse_http_list
- import cookielib
- from Cookie import Morsel
- from StringIO import StringIO
- from .packages.urllib3.packages.ordered_dict import OrderedDict
-
- builtin_str = str
- bytes = str
- str = unicode
- basestring = basestring
- numeric_types = (int, long, float)
-
-
-elif is_py3:
- from urllib.parse import urlparse, urlunparse, urljoin, urlsplit, urlencode, quote, unquote, quote_plus, unquote_plus, urldefrag
- from urllib.request import parse_http_list
- from http import cookiejar as cookielib
- from http.cookies import Morsel
- from io import StringIO
- from collections import OrderedDict
-
- builtin_str = str
- str = str
- bytes = bytes
- basestring = (str, bytes)
- numeric_types = (int, float)
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/lib/requests/cookies.py b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/lib/requests/cookies.py
deleted file mode 100644
index d759d0a..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/lib/requests/cookies.py
+++ /dev/null
@@ -1,389 +0,0 @@
-# -*- coding: utf-8 -*-
-
-"""
-Compatibility code to be able to use `cookielib.CookieJar` with requests.
-
-requests.utils imports from here, so be careful with imports.
-"""
-
-import collections
-from .compat import cookielib, urlparse, Morsel
-
-try:
- import threading
- # grr, pyflakes: this fixes "redefinition of unused 'threading'"
- threading
-except ImportError:
- import dummy_threading as threading
-
-
-class MockRequest(object):
- """Wraps a `requests.Request` to mimic a `urllib2.Request`.
-
- The code in `cookielib.CookieJar` expects this interface in order to correctly
- manage cookie policies, i.e., determine whether a cookie can be set, given the
- domains of the request and the cookie.
-
- The original request object is read-only. The client is responsible for collecting
- the new headers via `get_new_headers()` and interpreting them appropriately. You
- probably want `get_cookie_header`, defined below.
- """
-
- def __init__(self, request):
- self._r = request
- self._new_headers = {}
- self.type = urlparse(self._r.url).scheme
-
- def get_type(self):
- return self.type
-
- def get_host(self):
- return urlparse(self._r.url).netloc
-
- def get_origin_req_host(self):
- return self.get_host()
-
- def get_full_url(self):
- return self._r.url
-
- def is_unverifiable(self):
- return True
-
- def has_header(self, name):
- return name in self._r.headers or name in self._new_headers
-
- def get_header(self, name, default=None):
- return self._r.headers.get(name, self._new_headers.get(name, default))
-
- def add_header(self, key, val):
- """cookielib has no legitimate use for this method; add it back if you find one."""
- raise NotImplementedError("Cookie headers should be added with add_unredirected_header()")
-
- def add_unredirected_header(self, name, value):
- self._new_headers[name] = value
-
- def get_new_headers(self):
- return self._new_headers
-
- @property
- def unverifiable(self):
- return self.is_unverifiable()
-
- @property
- def origin_req_host(self):
- return self.get_origin_req_host()
-
-
-class MockResponse(object):
- """Wraps a `httplib.HTTPMessage` to mimic a `urllib.addinfourl`.
-
- ...what? Basically, expose the parsed HTTP headers from the server response
- the way `cookielib` expects to see them.
- """
-
- def __init__(self, headers):
- """Make a MockResponse for `cookielib` to read.
-
- :param headers: a httplib.HTTPMessage or analogous carrying the headers
- """
- self._headers = headers
-
- def info(self):
- return self._headers
-
- def getheaders(self, name):
- self._headers.getheaders(name)
-
-
-def extract_cookies_to_jar(jar, request, response):
- """Extract the cookies from the response into a CookieJar.
-
- :param jar: cookielib.CookieJar (not necessarily a RequestsCookieJar)
- :param request: our own requests.Request object
- :param response: urllib3.HTTPResponse object
- """
- # the _original_response field is the wrapped httplib.HTTPResponse object,
- req = MockRequest(request)
- # pull out the HTTPMessage with the headers and put it in the mock:
- res = MockResponse(response._original_response.msg)
- jar.extract_cookies(res, req)
-
-
-def get_cookie_header(jar, request):
- """Produce an appropriate Cookie header string to be sent with `request`, or None."""
- r = MockRequest(request)
- jar.add_cookie_header(r)
- return r.get_new_headers().get('Cookie')
-
-
-def remove_cookie_by_name(cookiejar, name, domain=None, path=None):
- """Unsets a cookie by name, by default over all domains and paths.
-
- Wraps CookieJar.clear(), is O(n).
- """
- clearables = []
- for cookie in cookiejar:
- if cookie.name == name:
- if domain is None or domain == cookie.domain:
- if path is None or path == cookie.path:
- clearables.append((cookie.domain, cookie.path, cookie.name))
-
- for domain, path, name in clearables:
- cookiejar.clear(domain, path, name)
-
-
-class CookieConflictError(RuntimeError):
- """There are two cookies that meet the criteria specified in the cookie jar.
- Use .get and .set and include domain and path args in order to be more specific."""
-
-
-class RequestsCookieJar(cookielib.CookieJar, collections.MutableMapping):
- """Compatibility class; is a cookielib.CookieJar, but exposes a dict interface.
-
- This is the CookieJar we create by default for requests and sessions that
- don't specify one, since some clients may expect response.cookies and
- session.cookies to support dict operations.
-
- Don't use the dict interface internally; it's just for compatibility with
- with external client code. All `requests` code should work out of the box
- with externally provided instances of CookieJar, e.g., LWPCookieJar and
- FileCookieJar.
-
- Caution: dictionary operations that are normally O(1) may be O(n).
-
- Unlike a regular CookieJar, this class is pickleable.
- """
-
- def get(self, name, default=None, domain=None, path=None):
- """Dict-like get() that also supports optional domain and path args in
- order to resolve naming collisions from using one cookie jar over
- multiple domains. Caution: operation is O(n), not O(1)."""
- try:
- return self._find_no_duplicates(name, domain, path)
- except KeyError:
- return default
-
- def set(self, name, value, **kwargs):
- """Dict-like set() that also supports optional domain and path args in
- order to resolve naming collisions from using one cookie jar over
- multiple domains."""
- # support client code that unsets cookies by assignment of a None value:
- if value is None:
- remove_cookie_by_name(self, name, domain=kwargs.get('domain'), path=kwargs.get('path'))
- return
-
- if isinstance(value, Morsel):
- c = morsel_to_cookie(value)
- else:
- c = create_cookie(name, value, **kwargs)
- self.set_cookie(c)
- return c
-
- def keys(self):
- """Dict-like keys() that returns a list of names of cookies from the jar.
- See values() and items()."""
- keys = []
- for cookie in iter(self):
- keys.append(cookie.name)
- return keys
-
- def values(self):
- """Dict-like values() that returns a list of values of cookies from the jar.
- See keys() and items()."""
- values = []
- for cookie in iter(self):
- values.append(cookie.value)
- return values
-
- def items(self):
- """Dict-like items() that returns a list of name-value tuples from the jar.
- See keys() and values(). Allows client-code to call "dict(RequestsCookieJar)
- and get a vanilla python dict of key value pairs."""
- items = []
- for cookie in iter(self):
- items.append((cookie.name, cookie.value))
- return items
-
- def list_domains(self):
- """Utility method to list all the domains in the jar."""
- domains = []
- for cookie in iter(self):
- if cookie.domain not in domains:
- domains.append(cookie.domain)
- return domains
-
- def list_paths(self):
- """Utility method to list all the paths in the jar."""
- paths = []
- for cookie in iter(self):
- if cookie.path not in paths:
- paths.append(cookie.path)
- return paths
-
- def multiple_domains(self):
- """Returns True if there are multiple domains in the jar.
- Returns False otherwise."""
- domains = []
- for cookie in iter(self):
- if cookie.domain is not None and cookie.domain in domains:
- return True
- domains.append(cookie.domain)
- return False # there is only one domain in jar
-
- def get_dict(self, domain=None, path=None):
- """Takes as an argument an optional domain and path and returns a plain old
- Python dict of name-value pairs of cookies that meet the requirements."""
- dictionary = {}
- for cookie in iter(self):
- if (domain is None or cookie.domain == domain) and (path is None
- or cookie.path == path):
- dictionary[cookie.name] = cookie.value
- return dictionary
-
- def __getitem__(self, name):
- """Dict-like __getitem__() for compatibility with client code. Throws exception
- if there are more than one cookie with name. In that case, use the more
- explicit get() method instead. Caution: operation is O(n), not O(1)."""
-
- return self._find_no_duplicates(name)
-
- def __setitem__(self, name, value):
- """Dict-like __setitem__ for compatibility with client code. Throws exception
- if there is already a cookie of that name in the jar. In that case, use the more
- explicit set() method instead."""
-
- self.set(name, value)
-
- def __delitem__(self, name):
- """Deletes a cookie given a name. Wraps cookielib.CookieJar's remove_cookie_by_name()."""
- remove_cookie_by_name(self, name)
-
- def update(self, other):
- """Updates this jar with cookies from another CookieJar or dict-like"""
- if isinstance(other, cookielib.CookieJar):
- for cookie in other:
- self.set_cookie(cookie)
- else:
- super(RequestsCookieJar, self).update(other)
-
- def _find(self, name, domain=None, path=None):
- """Requests uses this method internally to get cookie values. Takes as args name
- and optional domain and path. Returns a cookie.value. If there are conflicting cookies,
- _find arbitrarily chooses one. See _find_no_duplicates if you want an exception thrown
- if there are conflicting cookies."""
- for cookie in iter(self):
- if cookie.name == name:
- if domain is None or cookie.domain == domain:
- if path is None or cookie.path == path:
- return cookie.value
-
- raise KeyError('name=%r, domain=%r, path=%r' % (name, domain, path))
-
- def _find_no_duplicates(self, name, domain=None, path=None):
- """__get_item__ and get call _find_no_duplicates -- never used in Requests internally.
- Takes as args name and optional domain and path. Returns a cookie.value.
- Throws KeyError if cookie is not found and CookieConflictError if there are
- multiple cookies that match name and optionally domain and path."""
- toReturn = None
- for cookie in iter(self):
- if cookie.name == name:
- if domain is None or cookie.domain == domain:
- if path is None or cookie.path == path:
- if toReturn is not None: # if there are multiple cookies that meet passed in criteria
- raise CookieConflictError('There are multiple cookies with name, %r' % (name))
- toReturn = cookie.value # we will eventually return this as long as no cookie conflict
-
- if toReturn:
- return toReturn
- raise KeyError('name=%r, domain=%r, path=%r' % (name, domain, path))
-
- def __getstate__(self):
- """Unlike a normal CookieJar, this class is pickleable."""
- state = self.__dict__.copy()
- # remove the unpickleable RLock object
- state.pop('_cookies_lock')
- return state
-
- def __setstate__(self, state):
- """Unlike a normal CookieJar, this class is pickleable."""
- self.__dict__.update(state)
- if '_cookies_lock' not in self.__dict__:
- self._cookies_lock = threading.RLock()
-
- def copy(self):
- """Return a copy of this RequestsCookieJar."""
- new_cj = RequestsCookieJar()
- new_cj.update(self)
- return new_cj
-
-
-def create_cookie(name, value, **kwargs):
- """Make a cookie from underspecified parameters.
-
- By default, the pair of `name` and `value` will be set for the domain ''
- and sent on every request (this is sometimes called a "supercookie").
- """
- result = dict(
- version=0,
- name=name,
- value=value,
- port=None,
- domain='',
- path='/',
- secure=False,
- expires=None,
- discard=True,
- comment=None,
- comment_url=None,
- rest={'HttpOnly': None},
- rfc2109=False,)
-
- badargs = set(kwargs) - set(result)
- if badargs:
- err = 'create_cookie() got unexpected keyword arguments: %s'
- raise TypeError(err % list(badargs))
-
- result.update(kwargs)
- result['port_specified'] = bool(result['port'])
- result['domain_specified'] = bool(result['domain'])
- result['domain_initial_dot'] = result['domain'].startswith('.')
- result['path_specified'] = bool(result['path'])
-
- return cookielib.Cookie(**result)
-
-
-def morsel_to_cookie(morsel):
- """Convert a Morsel object into a Cookie containing the one k/v pair."""
- c = create_cookie(
- name=morsel.key,
- value=morsel.value,
- version=morsel['version'] or 0,
- port=None,
- port_specified=False,
- domain=morsel['domain'],
- domain_specified=bool(morsel['domain']),
- domain_initial_dot=morsel['domain'].startswith('.'),
- path=morsel['path'],
- path_specified=bool(morsel['path']),
- secure=bool(morsel['secure']),
- expires=morsel['max-age'] or morsel['expires'],
- discard=False,
- comment=morsel['comment'],
- comment_url=bool(morsel['comment']),
- rest={'HttpOnly': morsel['httponly']},
- rfc2109=False,)
- return c
-
-
-def cookiejar_from_dict(cookie_dict, cookiejar=None):
- """Returns a CookieJar from a key/value dictionary.
-
- :param cookie_dict: Dict of key/values to insert into CookieJar.
- """
- if cookiejar is None:
- cookiejar = RequestsCookieJar()
-
- if cookie_dict is not None:
- for name in cookie_dict:
- cookiejar.set_cookie(create_cookie(name, cookie_dict[name]))
- return cookiejar
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/lib/requests/exceptions.py b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/lib/requests/exceptions.py
deleted file mode 100644
index c0588f6..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/lib/requests/exceptions.py
+++ /dev/null
@@ -1,55 +0,0 @@
-# -*- coding: utf-8 -*-
-
-"""
-requests.exceptions
-~~~~~~~~~~~~~~~~~~~
-
-This module contains the set of Requests' exceptions.
-
-"""
-
-
-class RequestException(RuntimeError):
- """There was an ambiguous exception that occurred while handling your
- request."""
-
-
-class HTTPError(RequestException):
- """An HTTP error occurred."""
-
- def __init__(self, *args, **kwargs):
- """ Initializes HTTPError with optional `response` object. """
- self.response = kwargs.pop('response', None)
- super(HTTPError, self).__init__(*args, **kwargs)
-
-
-class ConnectionError(RequestException):
- """A Connection error occurred."""
-
-
-class SSLError(ConnectionError):
- """An SSL error occurred."""
-
-
-class Timeout(RequestException):
- """The request timed out."""
-
-
-class URLRequired(RequestException):
- """A valid URL is required to make a request."""
-
-
-class TooManyRedirects(RequestException):
- """Too many redirects."""
-
-
-class MissingSchema(RequestException, ValueError):
- """The URL schema (e.g. http or https) is missing."""
-
-
-class InvalidSchema(RequestException, ValueError):
- """See defaults.py for valid schemas."""
-
-
-class InvalidURL(RequestException, ValueError):
- """ The URL provided was somehow invalid. """
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/lib/requests/hooks.py b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/lib/requests/hooks.py
deleted file mode 100644
index 5dfaf6b..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/lib/requests/hooks.py
+++ /dev/null
@@ -1,45 +0,0 @@
-# -*- coding: utf-8 -*-
-
-"""
-requests.hooks
-~~~~~~~~~~~~~~
-
-This module provides the capabilities for the Requests hooks system.
-
-Available hooks:
-
-``response``:
- The response generated from a Request.
-
-"""
-
-
-HOOKS = ['response']
-
-
-def default_hooks():
- hooks = {}
- for event in HOOKS:
- hooks[event] = []
- return hooks
-
-# TODO: response is the only one
-
-
-def dispatch_hook(key, hooks, hook_data, **kwargs):
- """Dispatches a hook dictionary on a given piece of data."""
-
- hooks = hooks or dict()
-
- if key in hooks:
- hooks = hooks.get(key)
-
- if hasattr(hooks, '__call__'):
- hooks = [hooks]
-
- for hook in hooks:
- _hook_data = hook(hook_data, **kwargs)
- if _hook_data is not None:
- hook_data = _hook_data
-
- return hook_data
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/lib/requests/models.py b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/lib/requests/models.py
deleted file mode 100644
index 1ce2b8e..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/lib/requests/models.py
+++ /dev/null
@@ -1,689 +0,0 @@
-# -*- coding: utf-8 -*-
-
-"""
-requests.models
-~~~~~~~~~~~~~~~
-
-This module contains the primary objects that power Requests.
-"""
-
-import collections
-import logging
-import datetime
-
-try:
- from io import BytesIO
-except ImportError:
- pass # linux version of sublime 2 python is missing _fileio
-from .hooks import default_hooks
-from .structures import CaseInsensitiveDict
-
-from .auth import HTTPBasicAuth
-from .cookies import cookiejar_from_dict, get_cookie_header
-from .packages.urllib3.filepost import encode_multipart_formdata
-from .packages.urllib3.util import parse_url
-from .exceptions import HTTPError, RequestException, MissingSchema, InvalidURL
-from .utils import (
- guess_filename, get_auth_from_url, requote_uri,
- stream_decode_response_unicode, to_key_val_list, parse_header_links,
- iter_slices, guess_json_utf, super_len)
-from .compat import (
- cookielib, urlparse, urlunparse, urlsplit, urlencode, str, bytes, StringIO,
- is_py2, chardet, json, builtin_str, basestring)
-
-CONTENT_CHUNK_SIZE = 10 * 1024
-ITER_CHUNK_SIZE = 512
-
-log = logging.getLogger(__name__)
-
-
-class RequestEncodingMixin(object):
- @property
- def path_url(self):
- """Build the path URL to use."""
-
- url = []
-
- p = urlsplit(self.url)
-
- path = p.path
- if not path:
- path = '/'
-
- url.append(path)
-
- query = p.query
- if query:
- url.append('?')
- url.append(query)
-
- return ''.join(url)
-
- @staticmethod
- def _encode_params(data):
- """Encode parameters in a piece of data.
-
- Will successfully encode parameters when passed as a dict or a list of
- 2-tuples. Order is retained if data is a list of 2-tuples but arbitrary
- if parameters are supplied as a dict.
- """
-
- if isinstance(data, (str, bytes)):
- return data
- elif hasattr(data, 'read'):
- return data
- elif hasattr(data, '__iter__'):
- result = []
- for k, vs in to_key_val_list(data):
- if isinstance(vs, basestring) or not hasattr(vs, '__iter__'):
- vs = [vs]
- for v in vs:
- if v is not None:
- result.append(
- (k.encode('utf-8') if isinstance(k, str) else k,
- v.encode('utf-8') if isinstance(v, str) else v))
- return urlencode(result, doseq=True)
- else:
- return data
-
- @staticmethod
- def _encode_files(files, data):
- """Build the body for a multipart/form-data request.
-
- Will successfully encode files when passed as a dict or a list of
- 2-tuples. Order is retained if data is a list of 2-tuples but abritrary
- if parameters are supplied as a dict.
-
- """
- if (not files) or isinstance(data, str):
- return None
-
- new_fields = []
- fields = to_key_val_list(data or {})
- files = to_key_val_list(files or {})
-
- for field, val in fields:
- if isinstance(val, basestring) or not hasattr(val, '__iter__'):
- val = [val]
- for v in val:
- if v is not None:
- new_fields.append(
- (field.decode('utf-8') if isinstance(field, bytes) else field,
- v.encode('utf-8') if isinstance(v, str) else v))
-
- for (k, v) in files:
- # support for explicit filename
- ft = None
- if isinstance(v, (tuple, list)):
- if len(v) == 2:
- fn, fp = v
- else:
- fn, fp, ft = v
- else:
- fn = guess_filename(v) or k
- fp = v
- if isinstance(fp, str):
- fp = StringIO(fp)
- if isinstance(fp, bytes):
- fp = BytesIO(fp)
-
- if ft:
- new_v = (fn, fp.read(), ft)
- else:
- new_v = (fn, fp.read())
- new_fields.append((k, new_v))
-
- body, content_type = encode_multipart_formdata(new_fields)
-
- return body, content_type
-
-
-class RequestHooksMixin(object):
- def register_hook(self, event, hook):
- """Properly register a hook."""
-
- if isinstance(hook, collections.Callable):
- self.hooks[event].append(hook)
- elif hasattr(hook, '__iter__'):
- self.hooks[event].extend(h for h in hook if isinstance(h, collections.Callable))
-
- def deregister_hook(self, event, hook):
- """Deregister a previously registered hook.
- Returns True if the hook existed, False if not.
- """
-
- try:
- self.hooks[event].remove(hook)
- return True
- except ValueError:
- return False
-
-
-class Request(RequestHooksMixin):
- """A user-created :class:`Request ` object.
-
- Used to prepare a :class:`PreparedRequest `, which is sent to the server.
-
- :param method: HTTP method to use.
- :param url: URL to send.
- :param headers: dictionary of headers to send.
- :param files: dictionary of {filename: fileobject} files to multipart upload.
- :param data: the body to attach the request. If a dictionary is provided, form-encoding will take place.
- :param params: dictionary of URL parameters to append to the URL.
- :param auth: Auth handler or (user, pass) tuple.
- :param cookies: dictionary or CookieJar of cookies to attach to this request.
- :param hooks: dictionary of callback hooks, for internal usage.
-
- Usage::
-
- >>> import requests
- >>> req = requests.Request('GET', 'http://httpbin.org/get')
- >>> req.prepare()
-
-
- """
- def __init__(self,
- method=None,
- url=None,
- headers=None,
- files=None,
- data=dict(),
- params=dict(),
- auth=None,
- cookies=None,
- hooks=None):
-
- # Default empty dicts for dict params.
- data = [] if data is None else data
- files = [] if files is None else files
- headers = {} if headers is None else headers
- params = {} if params is None else params
- hooks = {} if hooks is None else hooks
-
- self.hooks = default_hooks()
- for (k, v) in list(hooks.items()):
- self.register_hook(event=k, hook=v)
-
- self.method = method
- self.url = url
- self.headers = headers
- self.files = files
- self.data = data
- self.params = params
- self.auth = auth
- self.cookies = cookies
- self.hooks = hooks
-
- def __repr__(self):
- return '' % (self.method)
-
- def prepare(self):
- """Constructs a :class:`PreparedRequest ` for transmission and returns it."""
- p = PreparedRequest()
-
- p.prepare_method(self.method)
- p.prepare_url(self.url, self.params)
- p.prepare_headers(self.headers)
- p.prepare_cookies(self.cookies)
- p.prepare_body(self.data, self.files)
- p.prepare_auth(self.auth, self.url)
- # Note that prepare_auth must be last to enable authentication schemes
- # such as OAuth to work on a fully prepared request.
-
- # This MUST go after prepare_auth. Authenticators could add a hook
- p.prepare_hooks(self.hooks)
-
- return p
-
-
-class PreparedRequest(RequestEncodingMixin, RequestHooksMixin):
- """The fully mutable :class:`PreparedRequest ` object,
- containing the exact bytes that will be sent to the server.
-
- Generated from either a :class:`Request ` object or manually.
-
- Usage::
-
- >>> import requests
- >>> req = requests.Request('GET', 'http://httpbin.org/get')
- >>> r = req.prepare()
-
-
- >>> s = requests.Session()
- >>> s.send(r)
-
-
- """
-
- def __init__(self):
- #: HTTP verb to send to the server.
- self.method = None
- #: HTTP URL to send the request to.
- self.url = None
- #: dictionary of HTTP headers.
- self.headers = None
- #: request body to send to the server.
- self.body = None
- #: dictionary of callback hooks, for internal usage.
- self.hooks = default_hooks()
-
- def __repr__(self):
- return '' % (self.method)
-
- def prepare_method(self, method):
- """Prepares the given HTTP method."""
- self.method = method
- if self.method is not None:
- self.method = self.method.upper()
-
- def prepare_url(self, url, params):
- """Prepares the given HTTP URL."""
- #: Accept objects that have string representations.
- try:
- url = unicode(url)
- except NameError:
- # We're on Python 3.
- url = str(url)
- except UnicodeDecodeError:
- pass
-
- # Support for unicode domain names and paths.
- scheme, auth, host, port, path, query, fragment = parse_url(url)
-
- if not scheme:
- raise MissingSchema("Invalid URL %r: No schema supplied" % url)
-
- if not host:
- raise InvalidURL("Invalid URL %r: No host supplied" % url)
-
- # Only want to apply IDNA to the hostname
- try:
- host = host.encode('idna').decode('utf-8')
- except UnicodeError:
- raise InvalidURL('URL has an invalid label.')
-
- # Carefully reconstruct the network location
- netloc = auth or ''
- if netloc:
- netloc += '@'
- netloc += host
- if port:
- netloc += ':' + str(port)
-
- # Bare domains aren't valid URLs.
- if not path:
- path = '/'
-
- if is_py2:
- if isinstance(scheme, str):
- scheme = scheme.encode('utf-8')
- if isinstance(netloc, str):
- netloc = netloc.encode('utf-8')
- if isinstance(path, str):
- path = path.encode('utf-8')
- if isinstance(query, str):
- query = query.encode('utf-8')
- if isinstance(fragment, str):
- fragment = fragment.encode('utf-8')
-
- enc_params = self._encode_params(params)
- if enc_params:
- if query:
- query = '%s&%s' % (query, enc_params)
- else:
- query = enc_params
-
- url = requote_uri(urlunparse([scheme, netloc, path, None, query, fragment]))
- self.url = url
-
- def prepare_headers(self, headers):
- """Prepares the given HTTP headers."""
-
- if headers:
- headers = dict((name.encode('ascii'), value) for name, value in headers.items())
- self.headers = CaseInsensitiveDict(headers)
- else:
- self.headers = CaseInsensitiveDict()
-
- def prepare_body(self, data, files):
- """Prepares the given HTTP body data."""
-
- # Check if file, fo, generator, iterator.
- # If not, run through normal process.
-
- # Nottin' on you.
- body = None
- content_type = None
- length = None
- is_stream = False
-
- is_stream = all([
- hasattr(data, '__iter__'),
- not isinstance(data, basestring),
- not isinstance(data, list),
- not isinstance(data, dict)
- ])
-
- try:
- length = super_len(data)
- except (TypeError, AttributeError):
- length = False
-
- if is_stream:
- body = data
-
- if files:
- raise NotImplementedError('Streamed bodies and files are mutually exclusive.')
-
- if length:
- self.headers['Content-Length'] = str(length)
- else:
- self.headers['Transfer-Encoding'] = 'chunked'
- # Check if file, fo, generator, iterator.
- # If not, run through normal process.
-
- else:
- # Multi-part file uploads.
- if files:
- (body, content_type) = self._encode_files(files, data)
- else:
- if data:
- body = self._encode_params(data)
- if isinstance(data, str) or isinstance(data, builtin_str) or hasattr(data, 'read'):
- content_type = None
- else:
- content_type = 'application/x-www-form-urlencoded'
-
- self.prepare_content_length(body)
-
- # Add content-type if it wasn't explicitly provided.
- if (content_type) and (not 'content-type' in self.headers):
- self.headers['Content-Type'] = content_type
-
- self.body = body
-
- def prepare_content_length(self, body):
- if hasattr(body, 'seek') and hasattr(body, 'tell'):
- body.seek(0, 2)
- self.headers['Content-Length'] = str(body.tell())
- body.seek(0, 0)
- elif body is not None:
- l = super_len(body)
- if l:
- self.headers['Content-Length'] = str(l)
- elif self.method not in ('GET', 'HEAD'):
- self.headers['Content-Length'] = '0'
-
- def prepare_auth(self, auth, url=''):
- """Prepares the given HTTP auth data."""
-
- # If no Auth is explicitly provided, extract it from the URL first.
- if auth is None:
- url_auth = get_auth_from_url(self.url)
- auth = url_auth if any(url_auth) else None
-
- if auth:
- if isinstance(auth, tuple) and len(auth) == 2:
- # special-case basic HTTP auth
- auth = HTTPBasicAuth(*auth)
-
- # Allow auth to make its changes.
- r = auth(self)
-
- # Update self to reflect the auth changes.
- self.__dict__.update(r.__dict__)
-
- # Recompute Content-Length
- self.prepare_content_length(self.body)
-
- def prepare_cookies(self, cookies):
- """Prepares the given HTTP cookie data."""
-
- if isinstance(cookies, cookielib.CookieJar):
- cookies = cookies
- else:
- cookies = cookiejar_from_dict(cookies)
-
- if 'cookie' not in self.headers:
- cookie_header = get_cookie_header(cookies, self)
- if cookie_header is not None:
- self.headers['Cookie'] = cookie_header
-
- def prepare_hooks(self, hooks):
- """Prepares the given hooks."""
- for event in hooks:
- self.register_hook(event, hooks[event])
-
-
-class Response(object):
- """The :class:`Response ` object, which contains a
- server's response to an HTTP request.
- """
-
- def __init__(self):
- super(Response, self).__init__()
-
- self._content = False
- self._content_consumed = False
-
- #: Integer Code of responded HTTP Status.
- self.status_code = None
-
- #: Case-insensitive Dictionary of Response Headers.
- #: For example, ``headers['content-encoding']`` will return the
- #: value of a ``'Content-Encoding'`` response header.
- self.headers = CaseInsensitiveDict()
-
- #: File-like object representation of response (for advanced usage).
- #: Requires that ``stream=True` on the request.
- # This requirement does not apply for use internally to Requests.
- self.raw = None
-
- #: Final URL location of Response.
- self.url = None
-
- #: Encoding to decode with when accessing r.text.
- self.encoding = None
-
- #: A list of :class:`Response ` objects from
- #: the history of the Request. Any redirect responses will end
- #: up here. The list is sorted from the oldest to the most recent request.
- self.history = []
-
- self.reason = None
-
- #: A CookieJar of Cookies the server sent back.
- self.cookies = cookiejar_from_dict({})
-
- #: The amount of time elapsed between sending the request
- #: and the arrival of the response (as a timedelta)
- self.elapsed = datetime.timedelta(0)
-
- def __repr__(self):
- return '' % (self.status_code)
-
- def __bool__(self):
- """Returns true if :attr:`status_code` is 'OK'."""
- return self.ok
-
- def __nonzero__(self):
- """Returns true if :attr:`status_code` is 'OK'."""
- return self.ok
-
- def __iter__(self):
- """Allows you to use a response as an iterator."""
- return self.iter_content(128)
-
- @property
- def ok(self):
- try:
- self.raise_for_status()
- except RequestException:
- return False
- return True
-
- @property
- def apparent_encoding(self):
- """The apparent encoding, provided by the lovely Charade library
- (Thanks, Ian!)."""
- return chardet.detect(self.content)['encoding']
-
- def iter_content(self, chunk_size=1, decode_unicode=False):
- """Iterates over the response data. When stream=True is set on the
- request, this avoids reading the content at once into memory for
- large responses. The chunk size is the number of bytes it should
- read into memory. This is not necessarily the length of each item
- returned as decoding can take place.
- """
- if self._content_consumed:
- # simulate reading small chunks of the content
- return iter_slices(self._content, chunk_size)
-
- def generate():
- while 1:
- chunk = self.raw.read(chunk_size, decode_content=True)
- if not chunk:
- break
- yield chunk
- self._content_consumed = True
-
- gen = generate()
-
- if decode_unicode:
- gen = stream_decode_response_unicode(gen, self)
-
- return gen
-
- def iter_lines(self, chunk_size=ITER_CHUNK_SIZE, decode_unicode=None):
- """Iterates over the response data, one line at a time. When
- stream=True is set on the request, this avoids reading the
- content at once into memory for large responses.
- """
-
- pending = None
-
- for chunk in self.iter_content(chunk_size=chunk_size,
- decode_unicode=decode_unicode):
-
- if pending is not None:
- chunk = pending + chunk
- lines = chunk.splitlines()
-
- if lines and lines[-1] and chunk and lines[-1][-1] == chunk[-1]:
- pending = lines.pop()
- else:
- pending = None
-
- for line in lines:
- yield line
-
- if pending is not None:
- yield pending
-
- @property
- def content(self):
- """Content of the response, in bytes."""
-
- if self._content is False:
- # Read the contents.
- try:
- if self._content_consumed:
- raise RuntimeError(
- 'The content for this response was already consumed')
-
- if self.status_code == 0:
- self._content = None
- else:
- self._content = bytes().join(self.iter_content(CONTENT_CHUNK_SIZE)) or bytes()
-
- except AttributeError:
- self._content = None
-
- self._content_consumed = True
- # don't need to release the connection; that's been handled by urllib3
- # since we exhausted the data.
- return self._content
-
- @property
- def text(self):
- """Content of the response, in unicode.
-
- if Response.encoding is None and chardet module is available, encoding
- will be guessed.
- """
-
- # Try charset from content-type
- content = None
- encoding = self.encoding
-
- if not self.content:
- return str('')
-
- # Fallback to auto-detected encoding.
- if self.encoding is None:
- encoding = self.apparent_encoding
-
- # Decode unicode from given encoding.
- try:
- content = str(self.content, encoding, errors='replace')
- except (LookupError, TypeError):
- # A LookupError is raised if the encoding was not found which could
- # indicate a misspelling or similar mistake.
- #
- # A TypeError can be raised if encoding is None
- #
- # So we try blindly encoding.
- content = str(self.content, errors='replace')
-
- return content
-
- def json(self, **kwargs):
- """Returns the json-encoded content of a response, if any.
-
- :param \*\*kwargs: Optional arguments that ``json.loads`` takes.
- """
-
- if not self.encoding and len(self.content) > 3:
- # No encoding set. JSON RFC 4627 section 3 states we should expect
- # UTF-8, -16 or -32. Detect which one to use; If the detection or
- # decoding fails, fall back to `self.text` (using chardet to make
- # a best guess).
- encoding = guess_json_utf(self.content)
- if encoding is not None:
- return json.loads(self.content.decode(encoding), **kwargs)
- return json.loads(self.text or self.content, **kwargs)
-
- @property
- def links(self):
- """Returns the parsed header links of the response, if any."""
-
- header = self.headers.get('link')
-
- # l = MultiDict()
- l = {}
-
- if header:
- links = parse_header_links(header)
-
- for link in links:
- key = link.get('rel') or link.get('url')
- l[key] = link
-
- return l
-
- def raise_for_status(self):
- """Raises stored :class:`HTTPError`, if one occurred."""
-
- http_error_msg = ''
-
- if 400 <= self.status_code < 500:
- http_error_msg = '%s Client Error: %s' % (self.status_code, self.reason)
-
- elif 500 <= self.status_code < 600:
- http_error_msg = '%s Server Error: %s' % (self.status_code, self.reason)
-
- if http_error_msg:
- raise HTTPError(http_error_msg, response=self)
-
- def close(self):
- return self.raw.release_conn()
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/lib/requests/sessions.py b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/lib/requests/sessions.py
deleted file mode 100644
index f4aeeee..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/lib/requests/sessions.py
+++ /dev/null
@@ -1,501 +0,0 @@
-# -*- coding: utf-8 -*-
-
-"""
-requests.session
-~~~~~~~~~~~~~~~~
-
-This module provides a Session object to manage and persist settings across
-requests (cookies, auth, proxies).
-
-"""
-import os
-from collections import Mapping
-from datetime import datetime
-
-from .compat import cookielib, OrderedDict, urljoin, urlparse
-from .cookies import cookiejar_from_dict, extract_cookies_to_jar, RequestsCookieJar
-from .models import Request, PreparedRequest
-from .hooks import default_hooks, dispatch_hook
-from .utils import to_key_val_list, default_headers
-from .exceptions import TooManyRedirects, InvalidSchema
-from .structures import CaseInsensitiveDict
-
-from .adapters import HTTPAdapter
-
-from .utils import requote_uri, get_environ_proxies, get_netrc_auth
-
-from .status_codes import codes
-REDIRECT_STATI = (
- codes.moved, # 301
- codes.found, # 302
- codes.other, # 303
- codes.temporary_moved, # 307
-)
-DEFAULT_REDIRECT_LIMIT = 30
-
-
-def merge_setting(request_setting, session_setting, dict_class=OrderedDict):
- """
- Determines appropriate setting for a given request, taking into account the
- explicit setting on that request, and the setting in the session. If a
- setting is a dictionary, they will be merged together using `dict_class`
- """
-
- if session_setting is None:
- return request_setting
-
- if request_setting is None:
- return session_setting
-
- # Bypass if not a dictionary (e.g. verify)
- if not (
- isinstance(session_setting, Mapping) and
- isinstance(request_setting, Mapping)
- ):
- return request_setting
-
- merged_setting = dict_class(to_key_val_list(session_setting))
- merged_setting.update(to_key_val_list(request_setting))
-
- # Remove keys that are set to None.
- for (k, v) in request_setting.items():
- if v is None:
- del merged_setting[k]
-
- return merged_setting
-
-
-class SessionRedirectMixin(object):
- def resolve_redirects(self, resp, req, stream=False, timeout=None,
- verify=True, cert=None, proxies=None):
- """Receives a Response. Returns a generator of Responses."""
-
- i = 0
- prepared_request = PreparedRequest()
- prepared_request.body = req.body
- prepared_request.headers = req.headers.copy()
- prepared_request.hooks = req.hooks
- prepared_request.method = req.method
- prepared_request.url = req.url
-
- # ((resp.status_code is codes.see_other))
- while (('location' in resp.headers and resp.status_code in REDIRECT_STATI)):
-
- resp.content # Consume socket so it can be released
-
- if i >= self.max_redirects:
- raise TooManyRedirects('Exceeded %s redirects.' % self.max_redirects)
-
- # Release the connection back into the pool.
- resp.close()
-
- url = resp.headers['location']
- method = prepared_request.method
-
- # Handle redirection without scheme (see: RFC 1808 Section 4)
- if url.startswith('//'):
- parsed_rurl = urlparse(resp.url)
- url = '%s:%s' % (parsed_rurl.scheme, url)
-
- # Facilitate non-RFC2616-compliant 'location' headers
- # (e.g. '/path/to/resource' instead of 'http://domain.tld/path/to/resource')
- # Compliant with RFC3986, we percent encode the url.
- if not urlparse(url).netloc:
- url = urljoin(resp.url, requote_uri(url))
- else:
- url = requote_uri(url)
-
- prepared_request.url = url
-
- # http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.4
- if (resp.status_code == codes.see_other and
- prepared_request.method != 'HEAD'):
- method = 'GET'
-
- # Do what the browsers do, despite standards...
- if (resp.status_code in (codes.moved, codes.found) and
- prepared_request.method not in ('GET', 'HEAD')):
- method = 'GET'
-
- prepared_request.method = method
-
- # https://github.com/kennethreitz/requests/issues/1084
- if resp.status_code not in (codes.temporary, codes.resume):
- if 'Content-Length' in prepared_request.headers:
- del prepared_request.headers['Content-Length']
-
- prepared_request.body = None
-
- headers = prepared_request.headers
- try:
- del headers['Cookie']
- except KeyError:
- pass
-
- prepared_request.prepare_cookies(self.cookies)
-
- resp = self.send(
- prepared_request,
- stream=stream,
- timeout=timeout,
- verify=verify,
- cert=cert,
- proxies=proxies,
- allow_redirects=False,
- )
-
- extract_cookies_to_jar(self.cookies, prepared_request, resp.raw)
-
- i += 1
- yield resp
-
-
-class Session(SessionRedirectMixin):
- """A Requests session.
-
- Provides cookie persistience, connection-pooling, and configuration.
-
- Basic Usage::
-
- >>> import requests
- >>> s = requests.Session()
- >>> s.get('http://httpbin.org/get')
- 200
- """
-
- __attrs__ = [
- 'headers', 'cookies', 'auth', 'timeout', 'proxies', 'hooks',
- 'params', 'verify', 'cert', 'prefetch', 'adapters', 'stream',
- 'trust_env', 'max_redirects']
-
- def __init__(self):
-
- #: A case-insensitive dictionary of headers to be sent on each
- #: :class:`Request ` sent from this
- #: :class:`Session `.
- self.headers = default_headers()
-
- #: Default Authentication tuple or object to attach to
- #: :class:`Request `.
- self.auth = None
-
- #: Dictionary mapping protocol to the URL of the proxy (e.g.
- #: {'http': 'foo.bar:3128'}) to be used on each
- #: :class:`Request `.
- self.proxies = {}
-
- #: Event-handling hooks.
- self.hooks = default_hooks()
-
- #: Dictionary of querystring data to attach to each
- #: :class:`Request `. The dictionary values may be lists for
- #: representing multivalued query parameters.
- self.params = {}
-
- #: Stream response content default.
- self.stream = False
-
- #: SSL Verification default.
- self.verify = True
-
- #: SSL certificate default.
- self.cert = None
-
- #: Maximum number of redirects allowed. If the request exceeds this
- #: limit, a :class:`TooManyRedirects` exception is raised.
- self.max_redirects = DEFAULT_REDIRECT_LIMIT
-
- #: Should we trust the environment?
- self.trust_env = True
-
- # Set up a CookieJar to be used by default
- self.cookies = cookiejar_from_dict({})
-
- # Default connection adapters.
- self.adapters = OrderedDict()
- self.mount('https://', HTTPAdapter())
- self.mount('http://', HTTPAdapter())
-
- def __enter__(self):
- return self
-
- def __exit__(self, *args):
- self.close()
-
- def request(self, method, url,
- params=None,
- data=None,
- headers=None,
- cookies=None,
- files=None,
- auth=None,
- timeout=None,
- allow_redirects=True,
- proxies=None,
- hooks=None,
- stream=None,
- verify=None,
- cert=None):
- """Constructs a :class:`Request `, prepares it and sends it.
- Returns :class:`Response ` object.
-
- :param method: method for the new :class:`Request` object.
- :param url: URL for the new :class:`Request` object.
- :param params: (optional) Dictionary or bytes to be sent in the query
- string for the :class:`Request`.
- :param data: (optional) Dictionary or bytes to send in the body of the
- :class:`Request`.
- :param headers: (optional) Dictionary of HTTP Headers to send with the
- :class:`Request`.
- :param cookies: (optional) Dict or CookieJar object to send with the
- :class:`Request`.
- :param files: (optional) Dictionary of 'filename': file-like-objects
- for multipart encoding upload.
- :param auth: (optional) Auth tuple or callable to enable
- Basic/Digest/Custom HTTP Auth.
- :param timeout: (optional) Float describing the timeout of the
- request.
- :param allow_redirects: (optional) Boolean. Set to True by default.
- :param proxies: (optional) Dictionary mapping protocol to the URL of
- the proxy.
- :param stream: (optional) whether to immediately download the response
- content. Defaults to ``False``.
- :param verify: (optional) if ``True``, the SSL cert will be verified.
- A CA_BUNDLE path can also be provided.
- :param cert: (optional) if String, path to ssl client cert file (.pem).
- If Tuple, ('cert', 'key') pair.
- """
-
- cookies = cookies or {}
- proxies = proxies or {}
-
- # Bootstrap CookieJar.
- if not isinstance(cookies, cookielib.CookieJar):
- cookies = cookiejar_from_dict(cookies)
-
- # Merge with session cookies
- merged_cookies = RequestsCookieJar()
- merged_cookies.update(self.cookies)
- merged_cookies.update(cookies)
- cookies = merged_cookies
-
- # Gather clues from the surrounding environment.
- if self.trust_env:
- # Set environment's proxies.
- env_proxies = get_environ_proxies(url) or {}
- for (k, v) in env_proxies.items():
- proxies.setdefault(k, v)
-
- # Set environment's basic authentication.
- if not auth:
- auth = get_netrc_auth(url)
-
- # Look for configuration.
- if not verify and verify is not False:
- verify = os.environ.get('REQUESTS_CA_BUNDLE')
-
- # Curl compatibility.
- if not verify and verify is not False:
- verify = os.environ.get('CURL_CA_BUNDLE')
-
- # Merge all the kwargs.
- params = merge_setting(params, self.params)
- headers = merge_setting(headers, self.headers, dict_class=CaseInsensitiveDict)
- auth = merge_setting(auth, self.auth)
- proxies = merge_setting(proxies, self.proxies)
- hooks = merge_setting(hooks, self.hooks)
- stream = merge_setting(stream, self.stream)
- verify = merge_setting(verify, self.verify)
- cert = merge_setting(cert, self.cert)
-
- # Create the Request.
- req = Request()
- req.method = method.upper()
- req.url = url
- req.headers = headers
- req.files = files
- req.data = data
- req.params = params
- req.auth = auth
- req.cookies = cookies
- req.hooks = hooks
-
- # Prepare the Request.
- prep = req.prepare()
-
- # Send the request.
- send_kwargs = {
- 'stream': stream,
- 'timeout': timeout,
- 'verify': verify,
- 'cert': cert,
- 'proxies': proxies,
- 'allow_redirects': allow_redirects,
- }
- resp = self.send(prep, **send_kwargs)
-
- return resp
-
- def get(self, url, **kwargs):
- """Sends a GET request. Returns :class:`Response` object.
-
- :param url: URL for the new :class:`Request` object.
- :param \*\*kwargs: Optional arguments that ``request`` takes.
- """
-
- kwargs.setdefault('allow_redirects', True)
- return self.request('GET', url, **kwargs)
-
- def options(self, url, **kwargs):
- """Sends a OPTIONS request. Returns :class:`Response` object.
-
- :param url: URL for the new :class:`Request` object.
- :param \*\*kwargs: Optional arguments that ``request`` takes.
- """
-
- kwargs.setdefault('allow_redirects', True)
- return self.request('OPTIONS', url, **kwargs)
-
- def head(self, url, **kwargs):
- """Sends a HEAD request. Returns :class:`Response` object.
-
- :param url: URL for the new :class:`Request` object.
- :param \*\*kwargs: Optional arguments that ``request`` takes.
- """
-
- kwargs.setdefault('allow_redirects', False)
- return self.request('HEAD', url, **kwargs)
-
- def post(self, url, data=None, **kwargs):
- """Sends a POST request. Returns :class:`Response` object.
-
- :param url: URL for the new :class:`Request` object.
- :param data: (optional) Dictionary, bytes, or file-like object to send in the body of the :class:`Request`.
- :param \*\*kwargs: Optional arguments that ``request`` takes.
- """
-
- return self.request('POST', url, data=data, **kwargs)
-
- def put(self, url, data=None, **kwargs):
- """Sends a PUT request. Returns :class:`Response` object.
-
- :param url: URL for the new :class:`Request` object.
- :param data: (optional) Dictionary, bytes, or file-like object to send in the body of the :class:`Request`.
- :param \*\*kwargs: Optional arguments that ``request`` takes.
- """
-
- return self.request('PUT', url, data=data, **kwargs)
-
- def patch(self, url, data=None, **kwargs):
- """Sends a PATCH request. Returns :class:`Response` object.
-
- :param url: URL for the new :class:`Request` object.
- :param data: (optional) Dictionary, bytes, or file-like object to send in the body of the :class:`Request`.
- :param \*\*kwargs: Optional arguments that ``request`` takes.
- """
-
- return self.request('PATCH', url, data=data, **kwargs)
-
- def delete(self, url, **kwargs):
- """Sends a DELETE request. Returns :class:`Response` object.
-
- :param url: URL for the new :class:`Request` object.
- :param \*\*kwargs: Optional arguments that ``request`` takes.
- """
-
- return self.request('DELETE', url, **kwargs)
-
- def send(self, request, **kwargs):
- """Send a given PreparedRequest."""
- # Set defaults that the hooks can utilize to ensure they always have
- # the correct parameters to reproduce the previous request.
- kwargs.setdefault('stream', self.stream)
- kwargs.setdefault('verify', self.verify)
- kwargs.setdefault('cert', self.cert)
- kwargs.setdefault('proxies', self.proxies)
-
- # It's possible that users might accidentally send a Request object.
- # Guard against that specific failure case.
- if getattr(request, 'prepare', None):
- raise ValueError('You can only send PreparedRequests.')
-
- # Set up variables needed for resolve_redirects and dispatching of
- # hooks
- allow_redirects = kwargs.pop('allow_redirects', True)
- stream = kwargs.get('stream')
- timeout = kwargs.get('timeout')
- verify = kwargs.get('verify')
- cert = kwargs.get('cert')
- proxies = kwargs.get('proxies')
- hooks = request.hooks
-
- # Get the appropriate adapter to use
- adapter = self.get_adapter(url=request.url)
-
- # Start time (approximately) of the request
- start = datetime.utcnow()
- # Send the request
- r = adapter.send(request, **kwargs)
- # Total elapsed time of the request (approximately)
- r.elapsed = datetime.utcnow() - start
-
- # Response manipulation hooks
- r = dispatch_hook('response', hooks, r, **kwargs)
-
- # Persist cookies
- extract_cookies_to_jar(self.cookies, request, r.raw)
-
- # Redirect resolving generator.
- gen = self.resolve_redirects(r, request, stream=stream,
- timeout=timeout, verify=verify, cert=cert,
- proxies=proxies)
-
- # Resolve redirects if allowed.
- history = [resp for resp in gen] if allow_redirects else []
-
- # Shuffle things around if there's history.
- if history:
- # Insert the first (original) request at the start
- history.insert(0, r)
- # Get the last request made
- r = history.pop()
- r.history = tuple(history)
-
- return r
-
- def get_adapter(self, url):
- """Returns the appropriate connnection adapter for the given URL."""
- for (prefix, adapter) in self.adapters.items():
-
- if url.startswith(prefix):
- return adapter
-
- # Nothing matches :-/
- raise InvalidSchema("No connection adapters were found for '%s'" % url)
-
- def close(self):
- """Closes all adapters and as such the session"""
- for _, v in self.adapters.items():
- v.close()
-
- def mount(self, prefix, adapter):
- """Registers a connection adapter to a prefix.
-
- Adapters are sorted in descending order by key length."""
- self.adapters[prefix] = adapter
- keys_to_move = [k for k in self.adapters if len(k) < len(prefix)]
- for key in keys_to_move:
- self.adapters[key] = self.adapters.pop(key)
-
- def __getstate__(self):
- return dict((attr, getattr(self, attr, None)) for attr in self.__attrs__)
-
- def __setstate__(self, state):
- for attr, value in state.items():
- setattr(self, attr, value)
-
-
-def session():
- """Returns a :class:`Session` for context-management."""
-
- return Session()
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/lib/requests/status_codes.py b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/lib/requests/status_codes.py
deleted file mode 100644
index de38486..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/lib/requests/status_codes.py
+++ /dev/null
@@ -1,87 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from .structures import LookupDict
-
-_codes = {
-
- # Informational.
- 100: ('continue',),
- 101: ('switching_protocols',),
- 102: ('processing',),
- 103: ('checkpoint',),
- 122: ('uri_too_long', 'request_uri_too_long'),
- 200: ('ok', 'okay', 'all_ok', 'all_okay', 'all_good', '\\o/', '✓'),
- 201: ('created',),
- 202: ('accepted',),
- 203: ('non_authoritative_info', 'non_authoritative_information'),
- 204: ('no_content',),
- 205: ('reset_content', 'reset'),
- 206: ('partial_content', 'partial'),
- 207: ('multi_status', 'multiple_status', 'multi_stati', 'multiple_stati'),
- 208: ('im_used',),
-
- # Redirection.
- 300: ('multiple_choices',),
- 301: ('moved_permanently', 'moved', '\\o-'),
- 302: ('found',),
- 303: ('see_other', 'other'),
- 304: ('not_modified',),
- 305: ('use_proxy',),
- 306: ('switch_proxy',),
- 307: ('temporary_redirect', 'temporary_moved', 'temporary'),
- 308: ('resume_incomplete', 'resume'),
-
- # Client Error.
- 400: ('bad_request', 'bad'),
- 401: ('unauthorized',),
- 402: ('payment_required', 'payment'),
- 403: ('forbidden',),
- 404: ('not_found', '-o-'),
- 405: ('method_not_allowed', 'not_allowed'),
- 406: ('not_acceptable',),
- 407: ('proxy_authentication_required', 'proxy_auth', 'proxy_authentication'),
- 408: ('request_timeout', 'timeout'),
- 409: ('conflict',),
- 410: ('gone',),
- 411: ('length_required',),
- 412: ('precondition_failed', 'precondition'),
- 413: ('request_entity_too_large',),
- 414: ('request_uri_too_large',),
- 415: ('unsupported_media_type', 'unsupported_media', 'media_type'),
- 416: ('requested_range_not_satisfiable', 'requested_range', 'range_not_satisfiable'),
- 417: ('expectation_failed',),
- 418: ('im_a_teapot', 'teapot', 'i_am_a_teapot'),
- 422: ('unprocessable_entity', 'unprocessable'),
- 423: ('locked',),
- 424: ('failed_dependency', 'dependency'),
- 425: ('unordered_collection', 'unordered'),
- 426: ('upgrade_required', 'upgrade'),
- 428: ('precondition_required', 'precondition'),
- 429: ('too_many_requests', 'too_many'),
- 431: ('header_fields_too_large', 'fields_too_large'),
- 444: ('no_response', 'none'),
- 449: ('retry_with', 'retry'),
- 450: ('blocked_by_windows_parental_controls', 'parental_controls'),
- 451: ('unavailable_for_legal_reasons', 'legal_reasons'),
- 499: ('client_closed_request',),
-
- # Server Error.
- 500: ('internal_server_error', 'server_error', '/o\\', '✗'),
- 501: ('not_implemented',),
- 502: ('bad_gateway',),
- 503: ('service_unavailable', 'unavailable'),
- 504: ('gateway_timeout',),
- 505: ('http_version_not_supported', 'http_version'),
- 506: ('variant_also_negotiates',),
- 507: ('insufficient_storage',),
- 509: ('bandwidth_limit_exceeded', 'bandwidth'),
- 510: ('not_extended',),
-}
-
-codes = LookupDict(name='status_codes')
-
-for (code, titles) in list(_codes.items()):
- for title in titles:
- setattr(codes, title, code)
- if not title.startswith('\\'):
- setattr(codes, title.upper(), code)
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/lib/requests/structures.py b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/lib/requests/structures.py
deleted file mode 100644
index 8d02ea6..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/lib/requests/structures.py
+++ /dev/null
@@ -1,128 +0,0 @@
-# -*- coding: utf-8 -*-
-
-"""
-requests.structures
-~~~~~~~~~~~~~~~~~~~
-
-Data structures that power Requests.
-
-"""
-
-import os
-import collections
-from itertools import islice
-
-
-class IteratorProxy(object):
- """docstring for IteratorProxy"""
- def __init__(self, i):
- self.i = i
- # self.i = chain.from_iterable(i)
-
- def __iter__(self):
- return self.i
-
- def __len__(self):
- if hasattr(self.i, '__len__'):
- return len(self.i)
- if hasattr(self.i, 'len'):
- return self.i.len
- if hasattr(self.i, 'fileno'):
- return os.fstat(self.i.fileno()).st_size
-
- def read(self, n):
- return "".join(islice(self.i, None, n))
-
-
-class CaseInsensitiveDict(collections.MutableMapping):
- """
- A case-insensitive ``dict``-like object.
-
- Implements all methods and operations of
- ``collections.MutableMapping`` as well as dict's ``copy``. Also
- provides ``lower_items``.
-
- All keys are expected to be strings. The structure remembers the
- case of the last key to be set, and ``iter(instance)``,
- ``keys()``, ``items()``, ``iterkeys()``, and ``iteritems()``
- will contain case-sensitive keys. However, querying and contains
- testing is case insensitive:
-
- cid = CaseInsensitiveDict()
- cid['Accept'] = 'application/json'
- cid['aCCEPT'] == 'application/json' # True
- list(cid) == ['Accept'] # True
-
- For example, ``headers['content-encoding']`` will return the
- value of a ``'Content-Encoding'`` response header, regardless
- of how the header name was originally stored.
-
- If the constructor, ``.update``, or equality comparison
- operations are given keys that have equal ``.lower()``s, the
- behavior is undefined.
-
- """
- def __init__(self, data=None, **kwargs):
- self._store = dict()
- if data is None:
- data = {}
- self.update(data, **kwargs)
-
- def __setitem__(self, key, value):
- # Use the lowercased key for lookups, but store the actual
- # key alongside the value.
- self._store[key.lower()] = (key, value)
-
- def __getitem__(self, key):
- return self._store[key.lower()][1]
-
- def __delitem__(self, key):
- del self._store[key.lower()]
-
- def __iter__(self):
- return (casedkey for casedkey, mappedvalue in self._store.values())
-
- def __len__(self):
- return len(self._store)
-
- def lower_items(self):
- """Like iteritems(), but with all lowercase keys."""
- return (
- (lowerkey, keyval[1])
- for (lowerkey, keyval)
- in self._store.items()
- )
-
- def __eq__(self, other):
- if isinstance(other, collections.Mapping):
- other = CaseInsensitiveDict(other)
- else:
- return NotImplemented
- # Compare insensitively
- return dict(self.lower_items()) == dict(other.lower_items())
-
- # Copy is required
- def copy(self):
- return CaseInsensitiveDict(self._store.values())
-
- def __repr__(self):
- return '%s(%r)' % (self.__class__.__name__, dict(self.items()))
-
-
-class LookupDict(dict):
- """Dictionary lookup object."""
-
- def __init__(self, name=None):
- self.name = name
- super(LookupDict, self).__init__()
-
- def __repr__(self):
- return '' % (self.name)
-
- def __getitem__(self, key):
- # We allow fall-through here, so values default to None
-
- return self.__dict__.get(key, None)
-
- def get(self, key, default=None):
- return self.__dict__.get(key, default)
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/lib/requests/utils.py b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/lib/requests/utils.py
deleted file mode 100644
index b21bf8f..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/lib/requests/utils.py
+++ /dev/null
@@ -1,550 +0,0 @@
-# -*- coding: utf-8 -*-
-
-"""
-requests.utils
-~~~~~~~~~~~~~~
-
-This module provides utility functions that are used within Requests
-that are also useful for external consumption.
-
-"""
-
-import cgi
-import codecs
-import collections
-import os
-import platform
-import re
-import sys
-from netrc import netrc, NetrcParseError
-
-from . import __version__
-from . import certs
-from .compat import parse_http_list as _parse_list_header
-from .compat import quote, urlparse, bytes, str, OrderedDict, urlunparse
-from .cookies import RequestsCookieJar, cookiejar_from_dict
-from .structures import CaseInsensitiveDict
-
-_hush_pyflakes = (RequestsCookieJar,)
-
-NETRC_FILES = ('.netrc', '_netrc')
-
-DEFAULT_CA_BUNDLE_PATH = certs.where()
-
-
-def dict_to_sequence(d):
- """Returns an internal sequence dictionary update."""
-
- if hasattr(d, 'items'):
- d = d.items()
-
- return d
-
-
-def super_len(o):
- if hasattr(o, '__len__'):
- return len(o)
- if hasattr(o, 'len'):
- return o.len
- if hasattr(o, 'fileno'):
- return os.fstat(o.fileno()).st_size
-
-
-def get_netrc_auth(url):
- """Returns the Requests tuple auth for a given url from netrc."""
-
- try:
- locations = (os.path.expanduser('~/{0}'.format(f)) for f in NETRC_FILES)
- netrc_path = None
-
- for loc in locations:
- if os.path.exists(loc) and not netrc_path:
- netrc_path = loc
-
- # Abort early if there isn't one.
- if netrc_path is None:
- return netrc_path
-
- ri = urlparse(url)
-
- # Strip port numbers from netloc
- host = ri.netloc.split(':')[0]
-
- try:
- _netrc = netrc(netrc_path).authenticators(host)
- if _netrc:
- # Return with login / password
- login_i = (0 if _netrc[0] else 1)
- return (_netrc[login_i], _netrc[2])
- except (NetrcParseError, IOError):
- # If there was a parsing error or a permissions issue reading the file,
- # we'll just skip netrc auth
- pass
-
- # AppEngine hackiness.
- except (ImportError, AttributeError):
- pass
-
-
-def guess_filename(obj):
- """Tries to guess the filename of the given object."""
- name = getattr(obj, 'name', None)
- if name and name[0] != '<' and name[-1] != '>':
- return os.path.basename(name)
-
-
-def from_key_val_list(value):
- """Take an object and test to see if it can be represented as a
- dictionary. Unless it can not be represented as such, return an
- OrderedDict, e.g.,
-
- ::
-
- >>> from_key_val_list([('key', 'val')])
- OrderedDict([('key', 'val')])
- >>> from_key_val_list('string')
- ValueError: need more than 1 value to unpack
- >>> from_key_val_list({'key': 'val'})
- OrderedDict([('key', 'val')])
- """
- if value is None:
- return None
-
- if isinstance(value, (str, bytes, bool, int)):
- raise ValueError('cannot encode objects that are not 2-tuples')
-
- return OrderedDict(value)
-
-
-def to_key_val_list(value):
- """Take an object and test to see if it can be represented as a
- dictionary. If it can be, return a list of tuples, e.g.,
-
- ::
-
- >>> to_key_val_list([('key', 'val')])
- [('key', 'val')]
- >>> to_key_val_list({'key': 'val'})
- [('key', 'val')]
- >>> to_key_val_list('string')
- ValueError: cannot encode objects that are not 2-tuples.
- """
- if value is None:
- return None
-
- if isinstance(value, (str, bytes, bool, int)):
- raise ValueError('cannot encode objects that are not 2-tuples')
-
- if isinstance(value, collections.Mapping):
- value = value.items()
-
- return list(value)
-
-
-# From mitsuhiko/werkzeug (used with permission).
-def parse_list_header(value):
- """Parse lists as described by RFC 2068 Section 2.
-
- In particular, parse comma-separated lists where the elements of
- the list may include quoted-strings. A quoted-string could
- contain a comma. A non-quoted string could have quotes in the
- middle. Quotes are removed automatically after parsing.
-
- It basically works like :func:`parse_set_header` just that items
- may appear multiple times and case sensitivity is preserved.
-
- The return value is a standard :class:`list`:
-
- >>> parse_list_header('token, "quoted value"')
- ['token', 'quoted value']
-
- To create a header from the :class:`list` again, use the
- :func:`dump_header` function.
-
- :param value: a string with a list header.
- :return: :class:`list`
- """
- result = []
- for item in _parse_list_header(value):
- if item[:1] == item[-1:] == '"':
- item = unquote_header_value(item[1:-1])
- result.append(item)
- return result
-
-
-# From mitsuhiko/werkzeug (used with permission).
-def parse_dict_header(value):
- """Parse lists of key, value pairs as described by RFC 2068 Section 2 and
- convert them into a python dict:
-
- >>> d = parse_dict_header('foo="is a fish", bar="as well"')
- >>> type(d) is dict
- True
- >>> sorted(d.items())
- [('bar', 'as well'), ('foo', 'is a fish')]
-
- If there is no value for a key it will be `None`:
-
- >>> parse_dict_header('key_without_value')
- {'key_without_value': None}
-
- To create a header from the :class:`dict` again, use the
- :func:`dump_header` function.
-
- :param value: a string with a dict header.
- :return: :class:`dict`
- """
- result = {}
- for item in _parse_list_header(value):
- if '=' not in item:
- result[item] = None
- continue
- name, value = item.split('=', 1)
- if value[:1] == value[-1:] == '"':
- value = unquote_header_value(value[1:-1])
- result[name] = value
- return result
-
-
-# From mitsuhiko/werkzeug (used with permission).
-def unquote_header_value(value, is_filename=False):
- r"""Unquotes a header value. (Reversal of :func:`quote_header_value`).
- This does not use the real unquoting but what browsers are actually
- using for quoting.
-
- :param value: the header value to unquote.
- """
- if value and value[0] == value[-1] == '"':
- # this is not the real unquoting, but fixing this so that the
- # RFC is met will result in bugs with internet explorer and
- # probably some other browsers as well. IE for example is
- # uploading files with "C:\foo\bar.txt" as filename
- value = value[1:-1]
-
- # if this is a filename and the starting characters look like
- # a UNC path, then just return the value without quotes. Using the
- # replace sequence below on a UNC path has the effect of turning
- # the leading double slash into a single slash and then
- # _fix_ie_filename() doesn't work correctly. See #458.
- if not is_filename or value[:2] != '\\\\':
- return value.replace('\\\\', '\\').replace('\\"', '"')
- return value
-
-
-def dict_from_cookiejar(cj):
- """Returns a key/value dictionary from a CookieJar.
-
- :param cj: CookieJar object to extract cookies from.
- """
-
- cookie_dict = {}
-
- for cookie in cj:
- cookie_dict[cookie.name] = cookie.value
-
- return cookie_dict
-
-
-def add_dict_to_cookiejar(cj, cookie_dict):
- """Returns a CookieJar from a key/value dictionary.
-
- :param cj: CookieJar to insert cookies into.
- :param cookie_dict: Dict of key/values to insert into CookieJar.
- """
-
- cj2 = cookiejar_from_dict(cookie_dict)
- cj.update(cj2)
- return cj
-
-
-def get_encodings_from_content(content):
- """Returns encodings from given content string.
-
- :param content: bytestring to extract encodings from.
- """
-
- charset_re = re.compile(r']', flags=re.I)
-
- return charset_re.findall(content)
-
-
-def get_encoding_from_headers(headers):
- """Returns encodings from given HTTP Header Dict.
-
- :param headers: dictionary to extract encoding from.
- """
-
- content_type = headers.get('content-type')
-
- if not content_type:
- return None
-
- content_type, params = cgi.parse_header(content_type)
-
- if 'charset' in params:
- return params['charset'].strip("'\"")
-
- if 'text' in content_type:
- return 'ISO-8859-1'
-
-
-def stream_decode_response_unicode(iterator, r):
- """Stream decodes a iterator."""
-
- if r.encoding is None:
- for item in iterator:
- yield item
- return
-
- decoder = codecs.getincrementaldecoder(r.encoding)(errors='replace')
- for chunk in iterator:
- rv = decoder.decode(chunk)
- if rv:
- yield rv
- rv = decoder.decode('', final=True)
- if rv:
- yield rv
-
-
-def iter_slices(string, slice_length):
- """Iterate over slices of a string."""
- pos = 0
- while pos < len(string):
- yield string[pos:pos + slice_length]
- pos += slice_length
-
-
-def get_unicode_from_response(r):
- """Returns the requested content back in unicode.
-
- :param r: Response object to get unicode content from.
-
- Tried:
-
- 1. charset from content-type
-
- 2. every encodings from `` ``
-
- 3. fall back and replace all unicode characters
-
- """
-
- tried_encodings = []
-
- # Try charset from content-type
- encoding = get_encoding_from_headers(r.headers)
-
- if encoding:
- try:
- return str(r.content, encoding)
- except UnicodeError:
- tried_encodings.append(encoding)
-
- # Fall back:
- try:
- return str(r.content, encoding, errors='replace')
- except TypeError:
- return r.content
-
-
-# The unreserved URI characters (RFC 3986)
-UNRESERVED_SET = frozenset(
- "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
- + "0123456789-._~")
-
-
-def unquote_unreserved(uri):
- """Un-escape any percent-escape sequences in a URI that are unreserved
- characters. This leaves all reserved, illegal and non-ASCII bytes encoded.
- """
- parts = uri.split('%')
- for i in range(1, len(parts)):
- h = parts[i][0:2]
- if len(h) == 2 and h.isalnum():
- c = chr(int(h, 16))
- if c in UNRESERVED_SET:
- parts[i] = c + parts[i][2:]
- else:
- parts[i] = '%' + parts[i]
- else:
- parts[i] = '%' + parts[i]
- return ''.join(parts)
-
-
-def requote_uri(uri):
- """Re-quote the given URI.
-
- This function passes the given URI through an unquote/quote cycle to
- ensure that it is fully and consistently quoted.
- """
- # Unquote only the unreserved characters
- # Then quote only illegal characters (do not quote reserved, unreserved,
- # or '%')
- return quote(unquote_unreserved(uri), safe="!#$%&'()*+,/:;=?@[]~")
-
-
-def get_environ_proxies(url):
- """Return a dict of environment proxies."""
-
- proxy_keys = [
- 'all',
- 'http',
- 'https',
- 'ftp',
- 'socks'
- ]
-
- get_proxy = lambda k: os.environ.get(k) or os.environ.get(k.upper())
-
- # First check whether no_proxy is defined. If it is, check that the URL
- # we're getting isn't in the no_proxy list.
- no_proxy = get_proxy('no_proxy')
-
- if no_proxy:
- # We need to check whether we match here. We need to see if we match
- # the end of the netloc, both with and without the port.
- no_proxy = no_proxy.split(',')
- netloc = urlparse(url).netloc
-
- for host in no_proxy:
- if netloc.endswith(host) or netloc.split(':')[0].endswith(host):
- # The URL does match something in no_proxy, so we don't want
- # to apply the proxies on this URL.
- return {}
-
- # If we get here, we either didn't have no_proxy set or we're not going
- # anywhere that no_proxy applies to.
- proxies = [(key, get_proxy(key + '_proxy')) for key in proxy_keys]
- return dict([(key, val) for (key, val) in proxies if val])
-
-
-def default_user_agent():
- """Return a string representing the default user agent."""
- _implementation = platform.python_implementation()
-
- if _implementation == 'CPython':
- _implementation_version = platform.python_version()
- elif _implementation == 'PyPy':
- _implementation_version = '%s.%s.%s' % (sys.pypy_version_info.major,
- sys.pypy_version_info.minor,
- sys.pypy_version_info.micro)
- if sys.pypy_version_info.releaselevel != 'final':
- _implementation_version = ''.join([_implementation_version, sys.pypy_version_info.releaselevel])
- elif _implementation == 'Jython':
- _implementation_version = platform.python_version() # Complete Guess
- elif _implementation == 'IronPython':
- _implementation_version = platform.python_version() # Complete Guess
- else:
- _implementation_version = 'Unknown'
-
- try:
- p_system = platform.system()
- p_release = platform.release()
- except IOError:
- p_system = 'Unknown'
- p_release = 'Unknown'
-
- return " ".join(['python-requests/%s' % __version__,
- '%s/%s' % (_implementation, _implementation_version),
- '%s/%s' % (p_system, p_release)])
-
-
-def default_headers():
- return CaseInsensitiveDict({
- 'User-Agent': default_user_agent(),
- 'Accept-Encoding': ', '.join(('gzip', 'deflate', 'compress')),
- 'Accept': '*/*'
- })
-
-
-def parse_header_links(value):
- """Return a dict of parsed link headers proxies.
-
- i.e. Link: ; rel=front; type="image/jpeg",; rel=back;type="image/jpeg"
-
- """
-
- links = []
-
- replace_chars = " '\""
-
- for val in value.split(","):
- try:
- url, params = val.split(";", 1)
- except ValueError:
- url, params = val, ''
-
- link = {}
-
- link["url"] = url.strip("<> '\"")
-
- for param in params.split(";"):
- try:
- key, value = param.split("=")
- except ValueError:
- break
-
- link[key.strip(replace_chars)] = value.strip(replace_chars)
-
- links.append(link)
-
- return links
-
-
-# Null bytes; no need to recreate these on each call to guess_json_utf
-_null = '\x00'.encode('ascii') # encoding to ASCII for Python 3
-_null2 = _null * 2
-_null3 = _null * 3
-
-
-def guess_json_utf(data):
- # JSON always starts with two ASCII characters, so detection is as
- # easy as counting the nulls and from their location and count
- # determine the encoding. Also detect a BOM, if present.
- sample = data[:4]
- if sample in (codecs.BOM_UTF32_LE, codecs.BOM32_BE):
- return 'utf-32' # BOM included
- if sample[:3] == codecs.BOM_UTF8:
- return 'utf-8-sig' # BOM included, MS style (discouraged)
- if sample[:2] in (codecs.BOM_UTF16_LE, codecs.BOM_UTF16_BE):
- return 'utf-16' # BOM included
- nullcount = sample.count(_null)
- if nullcount == 0:
- return 'utf-8'
- if nullcount == 2:
- if sample[::2] == _null2: # 1st and 3rd are null
- return 'utf-16-be'
- if sample[1::2] == _null2: # 2nd and 4th are null
- return 'utf-16-le'
- # Did not detect 2 valid UTF-16 ascii-range characters
- if nullcount == 3:
- if sample[:3] == _null3:
- return 'utf-32-be'
- if sample[1:] == _null3:
- return 'utf-32-le'
- # Did not detect a valid UTF-32 ascii-range character
- return None
-
-
-def prepend_scheme_if_needed(url, new_scheme):
- '''Given a URL that may or may not have a scheme, prepend the given scheme.
- Does not replace a present scheme with the one provided as an argument.'''
- scheme, netloc, path, params, query, fragment = urlparse(url, new_scheme)
-
- # urlparse is a finicky beast, and sometimes decides that there isn't a
- # netloc present. Assume that it's being over-cautious, and switch netloc
- # and path if urlparse decided there was no netloc.
- if not netloc:
- netloc, path = path, netloc
-
- return urlunparse((scheme, netloc, path, params, query, fragment))
-
-
-def get_auth_from_url(url):
- """Given a url with authentication components, extract them into a tuple of
- username,password."""
- if url:
- parsed = urlparse(url)
- return (parsed.username, parsed.password)
- else:
- return ('', '')
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/package-metadata.json b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/package-metadata.json
deleted file mode 100644
index 23398d6..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/package-metadata.json
+++ /dev/null
@@ -1 +0,0 @@
-{"url": "https://github.com/bgreenlee/sublime-github", "version": "2013.09.15.04.25.57", "description": "Sublime Text 2/3 plugin that provides a number of useful commands for GitHub."}
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/sublime_github.py b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/sublime_github.py
deleted file mode 100644
index 585a388..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/sublime_github.py
+++ /dev/null
@@ -1,473 +0,0 @@
-import os
-import sys
-import os.path
-sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
-import re
-import sublime
-import sublime_plugin
-import webbrowser
-import plistlib
-from github import GitHubApi
-import logging as logger
-try:
- import xml.parsers.expat as expat
-except ImportError:
- expat = None
-
-try:
- sys.path.append(os.path.join(sublime.packages_path(), 'Git'))
- import git
- sys.path.remove(os.path.join(sublime.packages_path(), 'Git'))
-except ImportError:
- git = None
-
-
-logger.basicConfig(format='[sublime-github] %(levelname)s: %(message)s')
-
-
-class BaseGitHubCommand(sublime_plugin.TextCommand):
- """
- Base class for all GitHub commands. Handles getting an auth token.
- """
- MSG_USERNAME = "GitHub username:"
- MSG_PASSWORD = "GitHub password:"
- MSG_ONE_TIME_PASSWORD = "One-time passowrd (for 2FA):"
- MSG_TOKEN_SUCCESS = "Your access token has been saved. We'll now resume your command."
- ERR_NO_USER_TOKEN = "Your GitHub Gist access token needs to be configured.\n\n"\
- "Click OK and then enter your GitHub username and password below (neither will "\
- "be stored; they are only used to generate an access token)."
- ERR_UNAUTHORIZED = "Your Github username or password appears to be incorrect. "\
- "Please try again."
- ERR_UNAUTHORIZED_TOKEN = "Your Github token appears to be incorrect. Please re-enter your "\
- "username and password to generate a new token."
-
- def run(self, edit):
- self.settings = sublime.load_settings("GitHub.sublime-settings")
- self.github_user = None
- self.github_password = None
- self.github_one_time_password = None
- self.accounts = self.settings.get("accounts")
- self.active_account = self.settings.get("active_account")
- if not self.active_account:
- self.active_account = list(self.accounts.keys())[0]
- self.github_token = self.accounts[self.active_account]["github_token"]
- if not self.github_token:
- self.github_token = self.settings.get("github_token")
- if self.github_token:
- # migrate to new structure
- self.settings.set("accounts", {"GitHub": {"base_uri": "https://api.github.com", "github_token": self.github_token}})
- self.settings.set("active_account", "GitHub")
- self.active_account = self.settings.get("active_account")
- self.settings.erase("github_token")
- sublime.save_settings("GitHub.sublime-settings")
- self.base_uri = self.accounts[self.active_account]["base_uri"]
- self.debug = self.settings.get('debug')
-
- self.proxies = {'https': self.accounts[self.active_account].get("https_proxy", None)}
- self.force_curl = self.accounts[self.active_account].get("force_curl", False)
- self.gistapi = GitHubApi(self.base_uri, self.github_token, debug=self.debug,
- proxies=self.proxies, force_curl=self.force_curl)
-
- def get_token(self):
- sublime.error_message(self.ERR_NO_USER_TOKEN)
- self.get_username()
-
- def get_username(self):
- self.view.window().show_input_panel(self.MSG_USERNAME, self.github_user or "", self.on_done_username, None, None)
-
- def get_password(self):
- self.view.window().show_input_panel(self.MSG_PASSWORD, "", self.on_done_password, None, None)
-
- def get_one_time_password(self):
- self.view.window().show_input_panel(self.MSG_ONE_TIME_PASSWORD, "", self.on_done_one_time_password, None, None)
-
- def on_done_username(self, value):
- "Callback for the username show_input_panel."
- self.github_user = value
- # need to do this or the input panel doesn't show
- sublime.set_timeout(self.get_password, 50)
-
- def on_done_one_time_password(self, value):
- "Callback for the one-time password show_input_panel"
- self.github_one_time_password = value
- self.on_done_password(self.github_password)
-
- def on_done_password(self, value):
- "Callback for the password show_input_panel"
- self.github_password = value
- try:
- api = GitHubApi(self.base_uri, debug=self.debug)
- self.github_token = api.get_token(self.github_user,
- self.github_password,
- self.github_one_time_password)
- self.github_password = self.github_one_time_password = None # don't keep these around
- self.accounts[self.active_account]["github_token"] = self.github_token
- self.settings.set("accounts", self.accounts)
- sublime.save_settings("GitHub.sublime-settings")
- self.gistapi = GitHubApi(self.base_uri, self.github_token, debug=self.debug)
- try:
- if self.callback:
- sublime.error_message(self.MSG_TOKEN_SUCCESS)
- callback = self.callback
- self.callback = None
- sublime.set_timeout(callback, 50)
- except AttributeError:
- pass
- except GitHubApi.OTPNeededException:
- sublime.set_timeout(self.get_one_time_password, 50)
- except GitHubApi.UnauthorizedException:
- sublime.error_message(self.ERR_UNAUTHORIZED)
- sublime.set_timeout(self.get_username, 50)
- except GitHubApi.UnknownException as e:
- sublime.error_message(e.message)
-
-
-class InsertTextCommand(sublime_plugin.TextCommand):
- """
- Internal command to insert text into a view.
- """
- def run(self, edit, **args):
- self.view.insert(edit, 0, args['text'])
-
-
-class OpenGistCommand(BaseGitHubCommand):
- """
- Open a gist.
- Defaults to all gists and copying it to the clipboard
- """
- MSG_SUCCESS = "Contents of '%s' copied to the clipboard."
- starred = False
- open_in_editor = False
- syntax_file_map = None
- copy_gist_id = False
-
- def run(self, edit):
- super(OpenGistCommand, self).run(edit)
- if self.github_token:
- self.get_gists()
- else:
- self.callback = self.get_gists
- self.get_token()
-
- def get_gists(self):
- try:
- self.gists = self.gistapi.list_gists(starred=self.starred)
- format = self.settings.get("gist_list_format")
- packed_gists = []
- for idx, gist in enumerate(self.gists):
- attribs = {"index": idx + 1,
- "filename": list(gist["files"].keys())[0],
- "description": gist["description"] or ''}
- if isinstance(format, list):
- item = [(format_str % attribs) for format_str in format]
- else:
- item = format % attribs
- packed_gists.append(item)
-
- args = [packed_gists, self.on_done]
- if self.settings.get("gist_list_monospace"):
- args.append(sublime.MONOSPACE_FONT)
- self.view.window().show_quick_panel(*args)
- except GitHubApi.UnauthorizedException:
- sublime.error_message(self.ERR_UNAUTHORIZED_TOKEN)
- sublime.set_timeout(self.get_username, 50)
- except GitHubApi.UnknownException as e:
- sublime.error_message(e.message)
-
- def on_done(self, idx):
- if idx == -1:
- return
- gist = self.gists[idx]
- filename = list(gist["files"].keys())[0]
- filedata = gist["files"][filename]
- content = self.gistapi.get(filedata["raw_url"])
- if self.open_in_editor:
- new_view = self.view.window().new_file()
- if expat: # not present in Linux
- # set syntax file
- if not self.syntax_file_map:
- self.syntax_file_map = self._generate_syntax_file_map()
- try:
- extension = os.path.splitext(filename)[1][1:].lower()
- syntax_file = self.syntax_file_map[extension]
- new_view.set_syntax_file(syntax_file)
- except KeyError:
- logger.warn("no mapping for '%s'" % extension)
- pass
- # insert the gist
- new_view.run_command("insert_text", {'text': content})
- new_view.set_name(filename)
- new_view.settings().set('gist', gist)
- elif self.copy_gist_id:
- sublime.set_clipboard(gist["html_url"])
- else:
- sublime.set_clipboard(content)
- sublime.status_message(self.MSG_SUCCESS % filename)
-
- @staticmethod
- def _generate_syntax_file_map():
- """
- Generate a map of all file types to their syntax files.
- """
- syntax_file_map = {}
- packages_path = sublime.packages_path()
- packages = [f for f in os.listdir(packages_path) if os.path.isdir(os.path.join(packages_path, f))]
- for package in packages:
- package_dir = os.path.join(packages_path, package)
- syntax_files = [os.path.join(package_dir, f) for f in os.listdir(package_dir) if f.endswith(".tmLanguage")]
- for syntax_file in syntax_files:
- try:
- plist = plistlib.readPlist(syntax_file)
- if plist:
- for file_type in plist['fileTypes']:
- syntax_file_map[file_type.lower()] = syntax_file
- except expat.ExpatError: # can't parse
- logger.warn("could not parse '%s'" % syntax_file)
- except KeyError: # no file types
- pass
-
- return syntax_file_map
-
-
-class OpenStarredGistCommand(OpenGistCommand):
- """
- Browse starred gists
- """
- starred = True
-
-
-class OpenGistInEditorCommand(OpenGistCommand):
- """
- Open a gist in a new editor.
- """
- open_in_editor = True
-
-
-class OpenGistUrlCommand(OpenGistCommand):
- """
- Open a gist url in a new editor.
- """
- copy_gist_id = True
-
-
-class OpenStarredGistInEditorCommand(OpenGistCommand):
- """
- Open a starred gist in a new editor.
- """
- starred = True
- open_in_editor = True
-
-
-class OpenGistInBrowserCommand(OpenGistCommand):
- """
- Open a gist in a browser
- """
- def on_done(self, idx):
- if idx == -1:
- return
- gist = self.gists[idx]
- webbrowser.open(gist["html_url"])
-
-
-class OpenStarredGistInBrowserCommand(OpenGistInBrowserCommand):
- """
- Open a gist in a browser
- """
- starred = True
-
-
-class GistFromSelectionCommand(BaseGitHubCommand):
- """
- Base class for creating a Github Gist from the current selection.
- """
- MSG_DESCRIPTION = "Gist description:"
- MSG_FILENAME = "Gist filename:"
- MSG_SUCCESS = "Gist created and url copied to the clipboard."
-
- def run(self, edit):
- self.description = None
- self.filename = None
- super(GistFromSelectionCommand, self).run(edit)
- if self.github_token:
- self.get_description()
- else:
- self.callback = self.get_description
- self.get_token()
-
- def get_description(self):
- self.view.window().show_input_panel(self.MSG_DESCRIPTION, "", self.on_done_description, None, None)
-
- def get_filename(self):
- # use the current filename as the default
- current_filename = self.view.file_name() or "snippet.txt"
- filename = os.path.basename(current_filename)
- self.view.window().show_input_panel(self.MSG_FILENAME, filename, self.on_done_filename, None, None)
-
- def on_done_description(self, value):
- "Callback for description show_input_panel."
- self.description = value
- # need to do this or the input panel doesn't show
- sublime.set_timeout(self.get_filename, 50)
-
- def on_done_filename(self, value):
- self.filename = value
- # get selected text, or the whole file if nothing selected
- if all([region.empty() for region in self.view.sel()]):
- text = self.view.substr(sublime.Region(0, self.view.size()))
- else:
- text = "\n".join([self.view.substr(region) for region in self.view.sel()])
-
- try:
- gist = self.gistapi.create_gist(description=self.description,
- filename=self.filename,
- content=text,
- public=self.public)
- self.view.settings().set('gist', gist)
- sublime.set_clipboard(gist["html_url"])
- sublime.status_message(self.MSG_SUCCESS)
- except GitHubApi.UnauthorizedException:
- # clear out the bad token so we can reset it
- self.settings.set("github_token", "")
- sublime.save_settings("GitHub.sublime-settings")
- sublime.error_message(self.ERR_UNAUTHORIZED_TOKEN)
- sublime.set_timeout(self.get_username, 50)
- except GitHubApi.UnknownException as e:
- sublime.error_message(e.message)
- except GitHubApi.ConnectionException as e:
- sublime.error_message(e.message)
-
-class PrivateGistFromSelectionCommand(GistFromSelectionCommand):
- """
- Command to create a private Github gist from the current selection.
- """
- public = False
-
-
-class PublicGistFromSelectionCommand(GistFromSelectionCommand):
- """
- Command to create a public Github gist from the current selection.
- """
- public = True
-
-
-class UpdateGistCommand(BaseGitHubCommand):
- MSG_SUCCESS = "Gist updated and url copied to the clipboard."
-
- def run(self, edit):
- super(UpdateGistCommand, self).run(edit)
- self.gist = self.view.settings().get('gist')
- if not self.gist:
- sublime.error_message("Can't update: this doesn't appear to be a valid gist.")
- return
- if self.github_token:
- self.update()
- else:
- self.callback = self.update
- self.get_token()
-
- def update(self):
- text = self.view.substr(sublime.Region(0, self.view.size()))
- try:
- updated_gist = self.gistapi.update_gist(self.gist, text)
- sublime.set_clipboard(updated_gist["html_url"])
- sublime.status_message(self.MSG_SUCCESS)
- except GitHubApi.UnauthorizedException:
- # clear out the bad token so we can reset it
- self.settings.set("github_token", "")
- sublime.save_settings("GitHub.sublime-settings")
- sublime.error_message(self.ERR_UNAUTHORIZED_TOKEN)
- sublime.set_timeout(self.get_username, 50)
- except GitHubApi.UnknownException as e:
- sublime.error_message(e.message)
-
-
-class SwitchAccountsCommand(BaseGitHubCommand):
- def run(self, edit):
- super(SwitchAccountsCommand, self).run(edit)
- accounts = list(self.accounts.keys())
- self.view.window().show_quick_panel(accounts, self.account_selected)
-
- def account_selected(self, index):
- if index == -1:
- return # canceled
- else:
- self.active_account = list(self.accounts.keys())[index]
- self.settings.set("active_account", self.active_account)
- sublime.save_settings("GitHub.sublime-settings")
- self.base_uri = self.accounts[self.active_account]["base_uri"]
- self.github_token = self.accounts[self.active_account]["github_token"]
-
-if git:
- class RemoteUrlCommand(git.GitTextCommand):
- url_type = 'blob'
-
- def run(self, edit):
- self.run_command("git ls-remote --get-url".split(), self.done_remote)
-
- def done_remote(self, result):
- remote_loc = result.split()[0]
- repo_url = re.sub('^git(@|://)', 'http://', remote_loc)
- # Replace the "tld:" with "tld/"
- # https://github.com/bgreenlee/sublime-github/pull/49#commitcomment-3688312
- repo_url = re.sub(r'^(https?://[^/:]+):', r'\1/', repo_url)
- repo_url = re.sub('\.git$', '', repo_url)
- self.repo_url = repo_url
- self.run_command("git rev-parse --abbrev-ref HEAD".split(), self.done_rev_parse)
-
- def done_rev_parse(self, result):
- # get current branch
- current_branch = result.strip()
- # get file path within repo
- repo_name = self.repo_url.split("/").pop()
- relative_path = self.view.file_name().split(repo_name, 1).pop()
- line_nums = ""
- if self.allows_line_highlights:
- # if any lines are selected, the first of those
- non_empty_regions = [region for region in self.view.sel() if not region.empty()]
- if non_empty_regions:
- selection = non_empty_regions[0]
- (start_row, _) = self.view.rowcol(selection.begin())
- (end_row, _) = self.view.rowcol(selection.end())
- line_nums = "#L%s" % (start_row + 1)
- if end_row > start_row:
- line_nums += "-L%s" % (end_row + 1)
-
- self.url = "%s/%s/%s%s%s" % (self.repo_url, self.url_type, current_branch, relative_path, line_nums)
- self.on_done()
-else:
- class RemoteUrlCommand(sublime_plugin.TextCommand):
- def run(self, edit):
- sublime.error_message("I couldn't find the Git plugin. Please install it, restart Sublime Text, and try again.")
-
-
-class OpenRemoteUrlCommand(RemoteUrlCommand):
- allows_line_highlights = True
-
- def run(self, edit):
- super(OpenRemoteUrlCommand, self).run(edit)
-
- def on_done(self):
- webbrowser.open(self.url)
-
-
-class CopyRemoteUrlCommand(RemoteUrlCommand):
- def run(self, edit):
- super(CopyRemoteUrlCommand, self).run(edit)
-
- def on_done(self):
- sublime.set_clipboard(self.url)
- sublime.status_message("Remote URL copied to clipboard")
-
-
-class BlameCommand(OpenRemoteUrlCommand):
- url_type = 'blame'
-
-
-class HistoryCommand(OpenRemoteUrlCommand):
- url_type = 'commits'
- allows_line_highlights = False
-
-
-class EditCommand(OpenRemoteUrlCommand):
- url_type = 'edit'
- allows_line_highlights = False
diff --git a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/sublime_requests.py b/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/sublime_requests.py
deleted file mode 100644
index 330ec23..0000000
--- a/EthanBrown.SublimeText2.GitPackages/tools/PackageCache/sublime-github/sublime_requests.py
+++ /dev/null
@@ -1,145 +0,0 @@
-import sys
-import os.path
-sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
-sys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(__file__)), "lib"))
-import re
-import requests
-from requests.status_codes import codes
-try:
- import http.client as httplib
-except ImportError:
- import httplib
-import commandline
-import sublime
-try:
- from io import StringIO
-except ImportError:
- from StringIO import StringIO # Linux version blows up when importing io.StringIO
-import logging
-
-logging.basicConfig(format='%(asctime)s %(message)s')
-logger = logging.getLogger()
-
-
-class CurlSession(object):
- ERR_UNKNOWN_CODE = "Curl failed with an unrecognized code"
- CURL_ERRORS = {
- 2: "Curl failed initialization.",
- 5: "Curl could not resolve the proxy specified.",
- 6: "Curl could not resolve the remote host.\n\nPlease verify that your Internet"
- " connection works properly."
- }
-
- class FakeSocket(StringIO):
- def makefile(self, *args, **kw):
- return self
-
- def __init__(self, verify=None):
- self.verify = verify
-
- def _parse_http(self, text):
- # if the response text starts with a 302, skip to the next non-302 header
- if re.match(r'^HTTP/.*?\s302 Found', text):
- m = re.search(r'(HTTP/\d+\.\d+\s(?!302 Found).*$)', text, re.S)
- if not m:
- raise Exception("Unrecognized response: %s" % text)
- else:
- text = m.group(1)
-
- # if the response text starts with a "200 Connection established" but continues with a 201,
- # skip the 200 header. This happens when using a proxy.
- #
- # e.g. HTTP/1.1 200 Connection established
- # Via: 1.1 proxy
- # Connection: Keep-Alive
- # Proxy-Connection: Keep-Alive
- #
- # HTTP/1.1 201 Created
- # Server: GitHub.com
- # ...
- # Status: 201 Created
- # ...
- if re.match(r'^HTTP/.*?\s200 Connection established', text):
- m = re.search(r'(HTTP/\d+\.\d+\s(?!200 Connection established).*$)', text, re.S)
- if not m:
- raise Exception("Unrecognized response: %s" % text)
- else:
- text = m.group(1)
-
- # remove Transfer-Encoding: chunked header, as it causes reading the response to fail
- # first do a quick check for it, so we can avoid doing the expensive negative-lookbehind
- # regex if we don't need it
- if "Transfer-Encoding: chunked" in text:
- # we do the negative-lookbehind to make sure we only strip the Transfer-Encoding
- # string in the header
- text = re.sub(r'(?
-
-
- EthanBrown.SublimeText2.UtilPackages
- Sublime Text 2 - Utility / Theme Tooling Packages
- 0.2.2
- Various
- Ethan Brown
- A number of packages helpful for increased editor productivity, including Soda theme, a number of file manipulation and/or searching type commands.
- Includes a number of very useful packages for Sublime Text 2.
-
- Included
- ===========================================================================
-
- - AdvancedNewFile
- https://github.com/skuroda/Sublime-AdvancedNewFile
-
- - ConsoleExec
- https://github.com/joeyespo/sublimetext-console-exec
-
- - EncodingHelper
- https://github.com/SublimeText/EncodingHelper
-
- - KeymapManager
- https://github.com/welefen/KeymapManager
-
- - MoveTab
- https://github.com/SublimeText/MoveTab
-
- - Navigation History
- https://github.com/timjrobinson/SublimeNavigationHistory
-
- - Open Recent Files
- https://github.com/spadgos/sublime-OpenRecentFiles
-
- - OpenSearchResult
- https://github.com/abrookins/OpenSearchResult
-
- - RecentActiveFiles
- https://github.com/jugyo/SublimeRecentActiveFiles
-
- - Search Anywhere
- https://github.com/ericmartel/Sublime-Text-2-Search-Anywhere-Plugin
-
- - SideBarEnhancements
- https://github.com/titoBouzout/SideBarEnhancements/
-
- - Sublime Files
- https://github.com/al63/SublimeFiles
-
- - Theme - Soda
- https://github.com/buymeasoda/soda-theme
-
- Disables
- ===========================================================================
- - Caret History
- - GotoRecent
- - MultiTaskBuild
- - Open Related
- - QuickFileMove
- - SublimeREPL
-
- Customized Key Bindings
- ===========================================================================
- https://github.com/Iristyle/SublimeKeyMap.Util
-
- Additional Package Preferences
- ===========================================================================
- SublimeFiles - Set terminal location, try ConEmu, Console2, Powershell, Cmd
-
- Additional User Preferences
- ===========================================================================
- Rules for
- - closing empty window
- - highlight modified tabs
- - Soda theme
-
- http://github.com/Iristyle/ChocolateyPackages/
- SublimeText package editor
-
- false
- https://raw.github.com/Iristyle/ChocolateyPackages/master/SublimeText2.app/Sublime_Text.png
- * Use a local package cache to prevent first-time package restore / load errors
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/Package Control.sublime-settings b/EthanBrown.SublimeText2.UtilPackages/tools/Package Control.sublime-settings
deleted file mode 100644
index b6990e1..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/Package Control.sublime-settings
+++ /dev/null
@@ -1,28 +0,0 @@
-{
- "installed_packages":
- [
- "AdvancedNewFile",
- "ConsoleExec",
- "EncodingHelper",
- "KeymapManager",
- "MoveTab",
- "Navigation History",
- "Open Recent Files",
- "OpenSearchResult",
- "Package Control",
- "RecentActiveFiles",
- "Search Anywhere",
- "SideBarEnhancements",
- "Sublime Files",
- "Theme - Soda",
- "ZZZ.EthanBrown.SublimeKeyMap.Util"
- ],
- "package_name_map": {
- "SublimeKeyMap.Util": "ZZZ.EthanBrown.SublimeKeyMap.Util"
- },
- "repositories":
- [
- "https://github.com/abrookins/OpenSearchResult",
- "https://github.com/Iristyle/SublimeKeyMap.Util"
- ]
-}
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/AdvancedNewFile/.gitignore b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/AdvancedNewFile/.gitignore
deleted file mode 100644
index 0205d62..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/AdvancedNewFile/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-*.pyc
-.DS_Store
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/AdvancedNewFile/AdvancedNewFile.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/AdvancedNewFile/AdvancedNewFile.py
deleted file mode 100644
index 6632e99..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/AdvancedNewFile/AdvancedNewFile.py
+++ /dev/null
@@ -1,604 +0,0 @@
-import os
-import sublime
-import sublime_plugin
-import re
-import logging
-import errno
-
-SETTINGS = [
- "alias",
- "default_initial",
- "use_cursor_text",
- "show_files",
- "show_path",
- "default_root",
- "default_path",
- "default_folder_index",
- "os_specific_alias",
- "ignore_case",
- "alias_root",
- "alias_path",
- "alias_folder_index",
- "debug",
- "auto_refresh_sidebar",
- "completion_type",
- "complete_single_entry",
- "use_folder_name",
- "relative_from_current",
- "default_extension"
-]
-VIEW_NAME = "AdvancedNewFileCreation"
-WIN_ROOT_REGEX = r"[a-zA-Z]:(/|\\)"
-NIX_ROOT_REGEX = r"^/"
-HOME_REGEX = r"^~"
-PLATFORM = sublime.platform().lower()
-IS_ST3 = int(sublime.version()) > 3000
-
-# Set up logger
-logging.basicConfig(format='[AdvancedNewFile] %(levelname)s %(message)s')
-logger = logging.getLogger()
-
-
-class AdvancedNewFileCommand(sublime_plugin.WindowCommand):
- def run(self, is_python=False, initial_path=None):
- PLATFORM = sublime.platform().lower()
- self.root = None
- self.alias_root = None
- self.top_level_split_char = ":"
- self.is_python = is_python
- self.view = self.window.active_view()
-
- # Settings will be based on the view
- self.settings = get_settings(self.view)
- self.aliases = self.get_aliases()
- self.show_path = self.settings.get("show_path")
- self.default_folder_index = self.settings.get("default_folder_index")
- self.alias_folder_index = self.settings.get("alias_folder_index")
- default_root = self.get_default_root(self.settings.get("default_root"))
- if default_root == "path":
- self.root = os.path.expanduser(self.settings.get("default_path"))
- default_root = ""
- self.root, path = self.split_path(default_root)
-
- # Search for initial string
- if initial_path is not None:
- path = initial_path
- else:
- path = self.settings.get("default_initial", "")
- if self.settings.get("use_cursor_text", False):
- tmp = self.get_cursor_path()
- if tmp != "":
- path = tmp
-
- alias_root = self.get_default_root(self.settings.get("alias_root"), True)
- if alias_root == "path":
- self.alias_root = os.path.expanduser(self.settings.get("alias_path"))
- alias_root = ""
- self.alias_root, tmp = self.split_path(alias_root, True)
-
- debug = self.settings.get("debug") or False
- if debug:
- logger.setLevel(logging.DEBUG)
- else:
- logger.setLevel(logging.ERROR)
- # Get user input
- self.show_filename_input(path)
-
- def get_aliases(self):
- aliases = self.settings.get("alias")
- all_os_aliases = self.settings.get("os_specific_alias")
- for key in all_os_aliases:
- if PLATFORM in all_os_aliases.get(key):
- aliases[key] = all_os_aliases.get(key).get(PLATFORM)
-
- return aliases
-
- def get_default_root(self, string, is_alias=False):
- root = ""
-
- if string == "home":
- root = "~/"
- elif string == "current":
- root = self.top_level_split_char
- elif string == "project_folder":
- if is_alias:
- folder_index = self.alias_folder_index
- else:
- folder_index = self.default_folder_index
- if len(self.window.folders()) <= folder_index:
- if is_alias:
- self.alias_folder_index = 0
- else:
- self.default_folder_index = 0
- elif string == "top_folder":
- if is_alias:
- self.alias_folder_index = 0
- else:
- self.default_folder_index = 0
- elif string == "path":
- root = "path"
- else:
- logger.error("Invalid specifier for \"default_root\"")
- return root
-
- def split_path(self, path="", is_alias=False):
- HOME_REGEX = r"^~[/\\]"
- root = None
- try:
- # Parse windows root
- if PLATFORM == "windows":
- if re.match(WIN_ROOT_REGEX, path):
- root = path[0:3]
- path = path[3:]
-
- # Parse if alias
- if self.top_level_split_char in path and root == None:
- parts = path.rsplit(self.top_level_split_char, 1)
- root, path = self.translate_alias(parts[0])
- path_list = []
- if path != "":
- path_list.append(path)
- if parts[1] != "":
- path_list.append(parts[1])
- path = self.top_level_split_char.join(path_list)
- elif re.match(r"^/", path):
- path_offset = 1
- if PLATFORM == "windows":
- match = re.match(r"^/([a-zA-Z])/", path)
- if match:
- root = "%s:\\" % match.group(1)
- path_offset = 3
- else:
- root, _ = os.path.splitdrive(self.view.file_name())
- root += "\\"
- else:
- root = "/"
- path = path[path_offset:]
- # Parse if tilde used
- elif re.match(HOME_REGEX, path) and root == None:
- root = os.path.expanduser("~")
- path = path[2:]
- elif re.match(r"^\.{1,2}[/\\]", path) and self.settings.get("relative_from_current", False):
- path_index = 2
- root = os.path.dirname(self.view.file_name())
- if re.match(r"^\.{2}[/\\]", path):
- root = os.path.dirname(root)
- path_index = 3
- path = path[path_index:]
-
- # Default
- if root == None:
- if is_alias:
- root = self.alias_root
- folder_index = self.alias_folder_index
- else:
- root = self.root
- folder_index = self.default_folder_index
- root = root or self.window.folders()[folder_index]
- except IndexError:
- root = os.path.expanduser("~")
-
-
- return root, path
-
- def translate_alias(self, path):
- root = None
- split_path = None
- if path == "" and self.view is not None:
- filename = self.view.file_name()
- if filename is not None:
- root = os.path.dirname(filename)
- else:
- split_path = path.split(self.top_level_split_char)
- join_index = len(split_path) - 1
- target = path
- root_found = False
- while join_index >= 0 and not root_found:
- # Folder aliases
- for name, folder in get_project_folder_data(self.settings.get("use_folder_name")):
- if name == target:
- root = folder
- root_found = True
- break
- # Aliases from settings.
- for alias in self.aliases.keys():
- if alias == target:
- alias_path = self.aliases.get(alias)
- if re.search(HOME_REGEX, alias_path) is None:
- if PLATFORM == "windows":
- if re.search(WIN_ROOT_REGEX, alias_path) is None:
- root = os.path.join(self.alias_root, alias_path)
- break
- else:
- if re.search(NIX_ROOT_REGEX, alias_path) is None:
- root = os.path.join(self.alias_root, alias_path)
- break
- root = os.path.expanduser(alias_path)
- root_found = True
- break
- remove = re.escape(split_path[join_index])
- target = re.sub(r":%s$" % remove, "", target)
- join_index -= 1
-
- if root is None:
- return None, path
- elif split_path is None:
- return os.path.abspath(root), ""
- else:
- # Add to index so we re
- join_index += 2
- return os.path.abspath(root), self.top_level_split_char.join(split_path[join_index:])
-
- def show_filename_input(self, initial=''):
- caption = 'Enter a path for a new file'
- if self.is_python:
- caption = '%s (creates __init__.py in new dirs)' % caption
- self.input_panel_view = self.window.show_input_panel(
- caption, initial,
- self.entered_filename, self.update_filename_input, self.clear
- )
-
- self.input_panel_view.set_name(VIEW_NAME)
- self.input_panel_view.settings().set("auto_complete_commit_on_tab", False)
- self.input_panel_view.settings().set("tab_completion", False)
- self.input_panel_view.settings().set("translate_tabs_to_spaces", False)
- self.input_panel_view.settings().set("anf_panel", True)
-
- def update_filename_input(self, path_in):
- if self.settings.get("completion_type") == "windows":
- if "prev_text" in dir(self) and self.prev_text != path_in:
- if self.view is not None:
- self.view.erase_status("AdvancedNewFile2")
- if path_in.endswith("\t"):
- path_in = path_in.replace("\t", "")
- if self.settings.get("completion_type") == "windows":
- path_in = self.windows_completion(path_in)
- elif self.settings.get("completion_type") == "nix":
- path_in = self.nix_completion(path_in)
-
- base, path = self.split_path(path_in)
-
- creation_path = self.generate_creation_path(base, path, True)
- if self.show_path:
- if self.view != None:
- self.view.set_status("AdvancedNewFile", "Creating file at %s " % \
- creation_path)
- else:
- sublime.status_message("Creating file at %s" % creation_path)
- logger.debug("Creation path is '%s'" % creation_path)
-
- def generate_completion_list(self, path_in, each_list=False):
- alias_list = []
- dir_list = []
- file_list = []
- self.suggestion_entries = []
- if self.top_level_split_char in path_in or re.match(r"^~[/\\]", path_in):
- pass
- else:
- directory, filename = os.path.split(path_in)
- if len(directory) == 0:
- alias_list += self.generate_alias_auto_complete(filename)
- alias_list += self.generate_project_auto_complete(filename)
- base, path = self.split_path(path_in)
- full_path = self.generate_creation_path(base, path)
-
- directory, filename = os.path.split(full_path)
-
- if os.path.isdir(directory):
- for d in os.listdir(directory):
- full_path = os.path.join(directory, d)
- if os.path.isdir(full_path):
- is_file = False
- elif self.settings.get("show_files"):
- is_file = True
- else:
- continue
-
- if self.compare_entries(d, filename):
- if is_file:
- file_list.append(d)
- else:
- dir_list.append(d)
-
- completion_list = alias_list + dir_list + file_list
-
- return sorted(completion_list), alias_list, dir_list, file_list
-
- def windows_completion(self, path_in):
- pattern = r"(.*[/\\:])(.*)"
- match = re.match(pattern, path_in)
- if "prev_text" in dir(self) and self.prev_text == path_in:
- self.offset = (self.offset + 1) % len(self.completion_list)
- else:
- # Generate new completion list
- self.completion_list, self.alias_list, self.dir_list, self.file_list = self.generate_completion_list(path_in)
- self.offset = 0
-
- if len(self.completion_list) == 0:
- if match:
- self.completion_list = [match.group(2)]
- else:
- self.completion_list = [path_in]
- match = re.match(pattern, path_in)
- if match :
- completion = self.completion_list[self.offset]
- if self.settings.get("complete_single_entry"):
- if len(self.completion_list) == 1:
- if completion in self.alias_list:
- completion += ":"
- elif completion in self.dir_list:
- completion += "/"
- new_content = re.sub(pattern, r"\1" , path_in)
- new_content += completion
- first_token = False
- else:
- completion = self.completion_list[self.offset]
- if self.settings.get("complete_single_entry"):
- if len(self.completion_list) == 1:
- if completion in self.alias_list:
- completion += ":"
- elif completion in self.dir_list:
- completion += "/"
- new_content = completion
- first_token = True
-
- if len(self.completion_list) > 1:
- if first_token:
- if self.view is not None:
- if self.completion_list[self.offset] in self.alias_list:
- self.view.set_status("AdvancedNewFile2", "Alias Completion")
- elif self.completion_list[self.offset] in self.dir_list:
- self.view.set_status("AdvancedNewFile2", "Directory Completion")
- self.prev_text = new_content
- else:
- self.prev_text = None
- self.input_panel_view.run_command("anf_replace", {"content": new_content})
- return new_content
-
- def nix_completion(self, path_in):
- pattern = r"(.*[/\\:])(.*)"
-
- completion_list, alias_list, dir_list, file_list = self.generate_completion_list(path_in)
- new_content = path_in
- if len(completion_list) > 0:
- common = os.path.commonprefix(completion_list)
- match = re.match(pattern, path_in)
- if match :
- new_content = re.sub(pattern, r"\1", path_in)
- new_content += common
- else:
- new_content = common
- if len(completion_list) > 1:
- dir_list = map(lambda s: s + "/", dir_list)
- alias_list = map(lambda s: s + ":", alias_list)
- status_message_list = sorted(list(dir_list) + list(alias_list) + file_list)
- sublime.status_message(", ".join(status_message_list))
- else:
- if completion_list[0] in alias_list:
- new_content += ":"
- elif completion_list[0] in dir_list:
- new_content += "/"
- self.input_panel_view.run_command("anf_replace", {"content": new_content})
- return new_content
-
- def generate_project_auto_complete(self, base):
- folder_data = get_project_folder_data(self.settings.get("use_folder_name"))
- if len(folder_data) > 1:
- folders = [x[0] for x in folder_data]
- return self.generate_auto_complete(base, folders)
- return []
-
- def generate_alias_auto_complete(self, base):
- return self.generate_auto_complete(base, self.aliases)
-
- def generate_auto_complete(self, base, iterable_var):
- sugg = []
- for entry in iterable_var:
- if entry in self.suggestion_entries:
- continue
- self.suggestion_entries.append(entry)
- compare_entry = entry
- compare_base = base
- if self.settings.get("ignore_case"):
- compare_entry = compare_entry.lower()
- compare_base = compare_base.lower()
-
- if self.compare_entries(compare_entry, compare_base):
- sugg.append(entry)
-
- return sugg
-
- def compare_entries(self, compare_entry, compare_base):
- if self.settings.get("ignore_case"):
- compare_entry = compare_entry.lower()
- compare_base = compare_base.lower()
-
- return compare_entry.startswith(compare_base)
-
-
- def generate_creation_path(self, base, path, append_extension=False):
- if PLATFORM == "windows":
- if not re.match(WIN_ROOT_REGEX, base):
- return base + self.top_level_split_char + path
- else:
- if not re.match(NIX_ROOT_REGEX, base):
- return base + self.top_level_split_char + path
-
- tokens = re.split(r"[/\\]", base) + re.split(r"[/\\]", path)
- if tokens[0] == "":
- tokens[0] = "/"
- if PLATFORM == "windows":
- tokens[0] = base[0:3]
-
- full_path = os.path.abspath(os.path.join(*tokens))
- if re.search(r"[/\\]$", path) or len(path) == 0:
- full_path += os.path.sep
- elif re.search(r"\.", tokens[-1]):
- if re.search(r"\.$", tokens[-1]):
- full_path += "."
- elif append_extension:
- filename = os.path.basename(full_path)
- if not os.path.exists(full_path):
- full_path += self.settings.get("default_extension", "")
- return full_path
-
- def entered_filename(self, filename):
- # Check if valid root specified for windows.
- if PLATFORM == "windows":
- if re.match(WIN_ROOT_REGEX, filename):
- root = filename[0:3]
- if not os.path.isdir(root):
- sublime.error_message(root + " is not a valid root.")
- self.clear()
- return
-
- base, path = self.split_path(filename)
- file_path = self.generate_creation_path(base, path, True)
- # Check for invalid alias specified.
- if self.top_level_split_char in filename and \
- not (PLATFORM == "windows" and re.match(WIN_ROOT_REGEX, base)) and \
- not (PLATFORM != "windows" and re.match(NIX_ROOT_REGEX, base)):
- if base == "":
- error_message = "Current file cannot be resolved."
- else:
- error_message = "'" + base + "' is an invalid alias."
- sublime.error_message(error_message)
- else:
- attempt_open = True
- logger.debug("Creating file at %s", file_path)
- if not os.path.exists(file_path):
- try:
- self.create(file_path)
- except OSError as e:
- attempt_open = False
- sublime.error_message("Cannot create '" + file_path + "'. See console for details")
- logger.error("Exception: %s '%s'" % (e.strerror, e.filename))
- if attempt_open:
- if os.path.isdir(file_path):
- if not re.search(r"(/|\\)$", file_path):
- sublime.error_message("Cannot open view for '" + file_path + "'. It is a directory. ")
- else:
- self.window.open_file(file_path)
- self.clear()
- self.refresh_sidebar()
-
- def refresh_sidebar(self):
- if self.settings.get("auto_refresh_sidebar"):
- try:
- self.window.run_command("refresh_folder_list")
- except:
- pass
-
- def clear(self):
- if self.view != None:
- self.view.erase_status("AdvancedNewFile")
- self.view.erase_status("AdvancedNewFile2")
-
- def create(self, filename):
- base, filename = os.path.split(filename)
- self.create_folder(base)
- if filename != "":
- open(os.path.join(base, filename), "a").close()
-
- def create_folder(self, path):
- init_list = []
- if self.is_python:
- temp_path = path
- while not os.path.exists(temp_path):
- init_list.append(temp_path)
- temp_path = os.path.dirname(temp_path)
- try:
- if not os.path.exists(path):
- os.makedirs(path)
- except OSError as ex:
- if ex.errno != errno.EEXIST:
- raise
-
- for entry in init_list:
- open(os.path.join(entry, '__init__.py'), 'a').close()
-
- def get_cursor_path(self):
- if self.view == None:
- return ""
-
- view = self.view
- path = ""
- for region in view.sel():
- syntax = view.scope_name(region.begin())
- if region.begin() != region.end():
- path = view.substr(region)
- break
- if re.match(".*string.quoted.double", syntax) or re.match(".*string.quoted.single", syntax):
- path = view.substr(view.extract_scope(region.begin()))
- path = re.sub('^"|\'', '', re.sub('"|\'$', '', path.strip()))
- break
-
- return path
-
-
-class AnfReplaceCommand(sublime_plugin.TextCommand):
- def run(self, edit, content):
- self.view.replace(edit, sublime.Region(0, self.view.size()), content)
-
-
-class AdvancedNewFileAtCommand(sublime_plugin.WindowCommand):
- def run(self, dirs):
- if len(dirs) != 1:
- return
- path = dirs[0]
- self.window.run_command("advanced_new_file", {"initial_path": path + os.sep})
-
-
- def is_visible(self, dirs):
- settings = sublime.load_settings("AdvancedNewFile.sublime-settings")
- return settings.get("show_sidebar_menu", False) and len(dirs) == 1
-
-
-def get_settings(view):
- settings = sublime.load_settings("AdvancedNewFile.sublime-settings")
- project_settings = {}
- local_settings = {}
- if view != None:
- project_settings = view.settings().get('AdvancedNewFile', {})
-
- for setting in SETTINGS:
- local_settings[setting] = settings.get(setting)
-
- for key in project_settings:
- if key in SETTINGS:
- if key == "alias":
- local_settings[key] = dict(local_settings[key].items() + project_settings.get(key).items())
- else:
- local_settings[key] = project_settings[key]
- else:
- logger.error("AdvancedNewFile[Warning]: Invalid key '%s' in project settings.", key)
-
- return local_settings
-
-def get_project_folder_data(use_folder_name):
- folders = []
- folder_entries = []
- window = sublime.active_window()
- project_folders = window.folders()
-
- if IS_ST3:
- project_data = window.project_data()
-
- if project_data is not None:
- if use_folder_name:
- for folder in project_data.get("folders", []):
- folder_entries.append({})
- else:
- folder_entries = project_data.get("folders", [])
- else:
- for folder in project_folders:
- folder_entries.append({})
- for index in range(len(folder_entries)):
- folder_path = project_folders[index]
- folder_entry = folder_entries[index]
- if "name" in folder_entry:
- folders.append((folder_entry["name"], folder_path))
- else:
- folders.append((os.path.basename(folder_path), folder_path))
-
- return folders
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/AdvancedNewFile/AdvancedNewFile.sublime-settings b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/AdvancedNewFile/AdvancedNewFile.sublime-settings
deleted file mode 100644
index af15f63..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/AdvancedNewFile/AdvancedNewFile.sublime-settings
+++ /dev/null
@@ -1,104 +0,0 @@
-{
- // This setting contains a dictionary of aliases. The keys represent the
- // alias names, the values represent the paths.
- // NOTE: These should be absolute paths. Also, these paths should
- // match your systems convention. For example, Windows machines should
- // have paths similar to "C:\\Users\\username\\Desktop". *nix systems should
- // have paths similar to "/home/username/desktop".
- "alias": {},
-
- // This is a secondary field for aliases. These aliases will be platform specific.
- // The key for the entry will still represent the name to be used for the alias.
- // Rather than being just a string path, the value will be a nested dictionary.
- // The dictionary may have one of three keys, "windows", "linux", or "osx".
- // The path used for this alias will be based on the operating system being used.
- "os_specific_alias": {},
-
- // A default initial value to fill the create new file input path with.
- "default_initial": "",
-
- // A boolean defining if cursor text should be used. Text bound by single or
- // double quotes or within a region will be used. If multiple cursors
- // are used, the earliest selection containing a region or existing
- // within quotes will be used.
- // NOTE: A value read from cursor will override the default
- // initial string setting.
- "use_cursor_text": false,
-
- // A boolean value specifying if regular files should be included in the auto
- // complete options.
- "show_files": false,
-
- // A boolean specifying if the file path being created should be displayed in
- // the status bar.
- "show_path": true,
-
- // This value specifies the default directory when using AdvancedNewFile.
- // Note it must be one of these values:
- // project_folder - Default will be the folder index specified by the "default_folder_index" setting.
- // current - Default will be the directory of the current view.
- // home - Default will be the home folder (~/)
- // path - Default will be defined by the setting "default_path"
- // If the current view or top folder cannot be resolved, the home directory
- // will be used.
- "default_root": "project_folder",
-
- // A string specifying the default root to use. For this to be utilized,
- // "default_root" must be set to "path"
- "default_path": "~",
-
- // An integer value representing a folder index to be used when "folder" is specified
- // for "default_root". If an index outside of the range of existing folders is used,
- // it will default to 0 (the top level folder).
- "default_folder_index": 0,
-
-
- // This value specifies the root that will be used when resolving relative paths
- // defined in aliases. For more information about valid values, see "default_root".
- // Note that if "default_path" or "default_folder_index" is used,
- // "alias_path" and "alias_folder_index" must be used for the respective entries.
- "alias_root": "current",
-
- // A string specifying the path to use for the alias root. For this to be
- // utilized, "alias_root" must be set to "path"
- "alias_path": "~",
-
- // An integer value representing the folder index to use when "folder" is specified
- // for "alias_root". If an index outside of the range of the existing folders is used,
- // it will default to 0.
- "alias_folder_index": 0,
-
- // A boolean specifying if case should be ignored when building
- // auto complete list.
- "ignore_case": false,
-
- // A boolean specifying if folders should automatically refresh and update the sidebar.
- // In some builds, the sidebar does not refresh when contents of project folder are updated.
- // This setting is required to refresh the sidebar in these circumstances.
- // false by default
- "auto_refresh_sidebar": false,
-
- // A boolean specifying if an AdvancedNewFile option should be shown in the
- // sidebar context menu.
- "show_sidebar_menu": false,
-
- // A string specifying the type of auto completion to use. Valid values are
- // "windows" or "nix"
- "completion_type": "windows",
-
- // A boolean setting specifying if a separator should be inserted when
- // there is only one completion and completion type is "windows"
- "complete_single_entry": true,
-
- // A boolean setting specifying if the folder name should be used
- // or the name specified in the project. This setting only applies to ST3.
- "use_folder_name": false,
-
- // Boolean setting specifying if relative paths should be based on the
- // current working directory.
- "relative_from_current": true,
-
- // String containing the default file extension. Note the extension is only applied
- // if the specified path does not contain a dot (.) character.
- "default_extension": ""
-}
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/AdvancedNewFile/CHANGELOG.md b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/AdvancedNewFile/CHANGELOG.md
deleted file mode 100644
index 1eefb08..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/AdvancedNewFile/CHANGELOG.md
+++ /dev/null
@@ -1,78 +0,0 @@
-# Changelog for AdvancedNewFile
-- 9 September 2013
- - Bug fix for folder creation.
- - Bug fix for permission issue.
- - Add default extension setting.
-
-- 2 September 2013
- - Add setting to begin all relative paths from current working directory if available.
-
-- 14 August 2013
- - Prompt completion type for first token when using Windows completion.
- - Fix bug with path autocompletion.
- - Fix bug for tab completion with no view.
-
-- 27 July 2013
- - Rewrite autocomplete functionality.
- - Bug Fixes
- - Snippets no longer appear when entering completions.
-
-- 22 April 2013
- - Add option to refresh sidebar after creating a file.
- - Add side bar context menu.
- - Bug Fixes
- - Multiple autocomplete issues.
- - Creation of __init__.py files.
- - Filling text with cursor values.
-
-- 2 February 2013
- - Update to be compatible with Sublime Text 3.
-
-- 14 January 2013
- - Add `alias_root` setting, used with aliases with relative paths.
- - Add setting to allow user to specify which folder from the project should be used.
- - Bug fixes
- - Do not require relative alias paths to begin with `./`
- - Prevent duplicate entries from appearing in auto complete list.
-
-- 17 December 2012
- - Allow selected text to fill entry window.
- - Basic work for continued autocompletion (Only applies if there is a single completion option)
- - Bug fixes
- - Properly display completions when using "ctrl+space" to manually display auto complete options.
- - Prevent error pop up from occuring when explicitly creating a directory structure.
- - Fix bug where using cursor text causes an error.
- - Prevent spaces from being inserted when tab is without a possible completion.
-
-- 26 November 2012
- - Add setting to display path for file to be created in status bar.
- - Add setting to set default base path (home, current, top_folder, path).
- - Add setting to ignore case for auto completion.
- - Add support for relative paths in alias.
- - Add OS Specific Aliases to settings.
- - Display an error when attempting to use an invalid alias.
- - Display an error when attempting to open a directory in a view.
- - Display an error if path creation fails.
- - Bug Fixes
- - Auto complete bug for files with spaces in their name
- - Status bar update causing errors when no view is present.
- - Specifying absolute paths for Windows produced unexpected behavior.
-
-- 30 October 2012
- - Initial work for tab autocompletion
- - Files created when path entered
- - Add setting to fill with a default value.
- - Setting to prefill entry box with text in quotes.
- - Add setting to display non directory files
- - Add user defined aliases.
- - Bug fixes.
- - Prevent buffer from being opened when a directory is specified.
-
-- 20 April 2012
- - Add ability to specify top level folders
- - Bug fixes
- - Fix Windows keybindings
- - Fix save issue on Windows
-
-- 29 October 2011
- - Initial release of AdvancedNewFile plugin
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/AdvancedNewFile/Default (Linux).sublime-keymap b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/AdvancedNewFile/Default (Linux).sublime-keymap
deleted file mode 100644
index 3d9daa9..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/AdvancedNewFile/Default (Linux).sublime-keymap
+++ /dev/null
@@ -1,12 +0,0 @@
-[
- { "keys": ["super+alt+n"], "command": "advanced_new_file"},
- { "keys": ["shift+super+alt+n"], "command": "advanced_new_file", "args": {"is_python": true}},
- {
- "keys": ["tab"],
- "command": "insert",
- "args": {"characters": "\t"},
- "context": [{
- "key": "setting.anf_panel"
- }]
- }
-]
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/AdvancedNewFile/Default (OSX).sublime-keymap b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/AdvancedNewFile/Default (OSX).sublime-keymap
deleted file mode 100644
index 3d9daa9..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/AdvancedNewFile/Default (OSX).sublime-keymap
+++ /dev/null
@@ -1,12 +0,0 @@
-[
- { "keys": ["super+alt+n"], "command": "advanced_new_file"},
- { "keys": ["shift+super+alt+n"], "command": "advanced_new_file", "args": {"is_python": true}},
- {
- "keys": ["tab"],
- "command": "insert",
- "args": {"characters": "\t"},
- "context": [{
- "key": "setting.anf_panel"
- }]
- }
-]
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/AdvancedNewFile/Default (Windows).sublime-keymap b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/AdvancedNewFile/Default (Windows).sublime-keymap
deleted file mode 100644
index fe13333..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/AdvancedNewFile/Default (Windows).sublime-keymap
+++ /dev/null
@@ -1,12 +0,0 @@
-[
- { "keys": ["ctrl+alt+n"], "command": "advanced_new_file"},
- { "keys": ["shift+ctrl+alt+n"], "command": "advanced_new_file", "args": {"is_python": true}},
- {
- "keys": ["tab"],
- "command": "insert",
- "args": {"characters": "\t"},
- "context": [{
- "key": "setting.anf_panel"
- }]
- }
-]
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/AdvancedNewFile/LICENSE.txt b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/AdvancedNewFile/LICENSE.txt
deleted file mode 100644
index 90b631c..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/AdvancedNewFile/LICENSE.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2013 AdvancedNewFile authors
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
-associated documentation files (the "Software"), to deal in the Software without restriction,
-including without limitation the rights to use, copy, modify, merge, publish, distribute,
-sublicense, and/or sell copies of the Software, and to permit persons to whom the Software
-is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or
-substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
-BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-sOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/AdvancedNewFile/Main.sublime-menu b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/AdvancedNewFile/Main.sublime-menu
deleted file mode 100644
index 1c773f6..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/AdvancedNewFile/Main.sublime-menu
+++ /dev/null
@@ -1,90 +0,0 @@
-[
- {
- "caption": "Preferences",
- "mnemonic": "n",
- "id": "preferences",
- "children":
- [
- {
- "caption": "Package Settings",
- "mnemonic": "P",
- "id": "package-settings",
- "children":
- [
- {
- "caption": "AdvancedNewFile",
- "children":
- [
- {
- "command": "open_file",
- "args": {"file": "${packages}/AdvancedNewFile/README.md"},
- "caption": "README"
- },
- { "caption": "-" },
- {
- "command": "open_file",
- "args": {"file": "${packages}/AdvancedNewFile/AdvancedNewFile.sublime-settings"},
- "caption": "Settings – Default"
- },
- {
- "command": "open_file",
- "args": {"file": "${packages}/User/AdvancedNewFile.sublime-settings"},
- "caption": "Settings – User"
- },
- { "caption": "-" },
- {
- "command": "open_file",
- "args": {
- "file": "${packages}/AdvancedNewFile/Default (OSX).sublime-keymap",
- "platform": "OSX"
- },
- "caption": "Key Bindings – Default"
- },
- {
- "command": "open_file",
- "args": {
- "file": "${packages}/AdvancedNewFile/Default (Linux).sublime-keymap",
- "platform": "Linux"
- },
- "caption": "Key Bindings – Default"
- },
- {
- "command": "open_file",
- "args": {
- "file": "${packages}/AdvancedNewFile/Default (Windows).sublime-keymap",
- "platform": "Windows"
- },
- "caption": "Key Bindings – Default"
- },
- {
- "command": "open_file",
- "args": {
- "file": "${packages}/User/Default (OSX).sublime-keymap",
- "platform": "OSX"
- },
- "caption": "Key Bindings – User"
- },
- {
- "command": "open_file",
- "args": {
- "file": "${packages}/User/Default (Linux).sublime-keymap",
- "platform": "Linux"
- },
- "caption": "Key Bindings – User"
- },
- {
- "command": "open_file",
- "args": {
- "file": "${packages}/User/Default (Windows).sublime-keymap",
- "platform": "Windows"
- },
- "caption": "Key Bindings – User"
- },
- { "caption": "-" }
- ]
- }
- ]
- }
- ]
- }
-]
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/AdvancedNewFile/README.md b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/AdvancedNewFile/README.md
deleted file mode 100644
index 19158a2..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/AdvancedNewFile/README.md
+++ /dev/null
@@ -1,209 +0,0 @@
-# AdvancedNewFile
-Advanced file creation for Sublime Text 2 and Sublime Text 3.
-
-## Overview
-
-This plugin allows for faster file creation within a project. Please see the [Features](https://github.com/skuroda/Sublime-AdvancedNewFile#features) section for more detailed information about advanced features.
-
-## Installation
-Note with either method, you may need to restart Sublime Text 2 for the plugin to load.
-
-### Package Control
-Installation through [package control](http://wbond.net/sublime_packages/package_control) is recommended. It will handle updating your packages as they become available. To install, do the following.
-
-* In the Command Palette, enter `Package Control: Install Package`
-* Search for `AdvancedNewFile`
-* In the Command Palette, enter `Package Control :Enable Package` -> select AdvancedNewFile
-
-### Manual
-Clone or copy this repository into the packages directory. By default, they are located at:
-
-* OS X: ~/Library/Application Support/Sublime Text 2/Packages/
-* Windows: %APPDATA%/Roaming/Sublime Text 2/Packages/
-* Linux: ~/.config/sublime-text-2/Packages/
-
-or
-
-* OS X: ~/Library/Application Support/Sublime Text 3/Packages/
-* Windows: %APPDATA%/Roaming/Sublime Text 3/Packages/
-* Linux: ~/.config/sublime-text-3/Packages/
-
-## Usage
-Simply bring up the AdvancedNewFile input through the appropriate [key binding](https://github.com/skuroda/Sublime-AdvancedNewFile). Then, enter the path, along with the file name into the input field. Upon pressing enter, the file will be created. In addition, if the directories specified do not yet exists, they will also be created. For more advanced usage of this plugin, be sure to look at [Advanced Path Usage](https://github.com/skuroda/Sublime-AdvancedNewFile#advanced-path-usage). By default, the path to the file being created will be filled shown in the status bar as you enter the path information.
-
-**Default directory:**
-The default directory is specified by the `default_root` setting. By default, it will be the top directory of the folders listed in the window. If this cannot be resolved, the home directory will be used. See [Settings](https://github.com/skuroda/Sublime-AdvancedNewFile#settings) (`default_root`) for more information.
-
-## Keymaps
-If you have issues with keymaps, consider running [FindKeyConflicts](https://github.com/skuroda/FindKeyConflicts), also available through the package manager. Alternatively, set command logging to true by entering `sublime.log_commands(True)` in the Sublime Text console.
-
-### Windows
-`ctrl+alt+n`: General keymap to create new files.
-
-`ctrl+shift+alt+n`: In addition to creating the folders specified, new folders will also contain an `__init__.py` file.
-
-### OS X and Linux
-The super keys for Linux and OS X are the Windows and command key respectively.
-
-`super+alt+n`: General keymap to create new files.
-
-`shift+super+alt+n`: In addition to creating the folders specified, new folders will also contain an `__init__.py` file.
-
-## Settings
-`alias`:
-
-A dictionary that contains a set of aliases tied to a directory. For more information, see [Aliases](https://github.com/skuroda/Sublime-AdvancedNewFile#aliases)
-
-`os_specific_alias`:
-
-A dictionary containing a set of aliases tied to a directory. These aliases will be platform specific. For more information, see [Platform Specific Aliases](https://github.com/skuroda/Sublime-AdvancedNewFile#platform-specific-aliases)
-
-`default_initial`:
-
-A string that will be automatically inserted into the new file creation input.
-
-`use_cursor_text`:
-
-A boolean value determining if text from a buffer, bound by quotes or a selected region, will be auto inserted into the new file generation input field. If multiple cursors are used, the first entry either contained in quotes, are a selected region, will be used.
-
-`show_files`:
-
-A boolean value determining if regular files should be included in the autocompletion list.
-
-`show_path`:
-
-A boolean value used to determine if the path of the file to be created should be displayed in the status bar.
-
-`default_root`:
-
-This value is used to determine the default root when using AdvancedNewFile. It must be one of the following values:
-
-* `project_folder`- The default path will be the folder specified by the 'default_folder_index' setting.
-* `current` - The default path will be the directory of the current active view.
-* `home` - The default path will be your home directory.
-* `path` - The default path will be defined by the setting `default_path`
-
-If the current view's directory cannot be resolved, the top level folder in the window will be used. If the top level folder in the window cannot be resolved either, the home directory will be used.
-
-`default_path`:
-
-This path is used as the default if `path` has been specified for the setting `default_root`. This path should be absolute. If a relative path is specified, it will be relative to the AdvancedNewFile package directory.
-
-`default_folder_index`:
-
-An integer value representing a folder index to be used when "folder" is specified for "default_root". If an index outside of the range of existing folders is used, it will default to 0 (the top level folder).
-
-`alias_root`:
-
-This entry defines the root that will be used when resolving aliases defined as relative paths. For more information about valid entries, see `default_root`. Note that for path, `alias_path` will be specified.
-
-`alias_path`:
-
-This path is used as the default if `path` has been specified for the setting `alias_root`.
-
-`alias_folder_index`:
-
-An integer value representing the folder index to use when "folder" is specified for "alias_root". If an index outside of the range of the existing folders is used, it will default to 0.
-
-`ignore_case`:
-
-A boolean specifying if case should be ignored when building auto complete list.
-
-`auto_refresh_sidebar`:
-
-A boolean specifying if folders should automatically refresh and update the sidebar. In some builds, the sidebar does not refresh when contents of project folder are updated. This setting is required to refresh the sidebar in these circumstances. False by default.
-
-`show_sidebar_menu`:
-
-A boolean specifying if an AdvancedNewFile option should be shown in the sidebar context menu.
-
-`completion_type`:
-
-A string specifying the type of auto completion to use. Valid values are "windows" or "nix".
-
-`complete_single_entry`
-
-A boolean setting specifying if a separator should be inserted when there is only one completion and completion type is "windows"
-
-`use_folder_name`:
-
-A boolean setting specifying if the folder name should be used or the name specified in the project. This setting only applies to ST3.
-
-`relative_from_current`:
-
-Boolean setting specifying if relative paths should be based on the current working directory.
-
-`default_extension`:
-
-String containing the default file extension. Note the extension is only applied if the specified path does not contain a dot (.) character.
-
-### Project Specific Settings
-All of the above settings can also be specified as part of the project specific settings. These values override any previous values set by higher level settings, with aliases being an exception. Alias settings will be merged with higher level configurations for alias. In addition, if the same alias exist for both default/user settings and project settings, the project setting will take precedence.
-
- "settings": {
- "AdvancedNewFile": {
- "default_initial": "/project/specific/path"
- }
- }
-
-
-## Features
-#### __init__.py creation:
-This plugin may optionally create `__init__` in the created directories. Please reference [Key Maps](https://github.com/skuroda/Sublime-AdvancedNewFile#keymaps) to see the default key bindings to do this.
-
-#### Tab Autocompletion:
-After typing in a partial path, simply press tab to autocomplete it. Continue to press tab to cycle through the options.
-
-### Advanced Path Usage
-#### Home directory:
-To begin at the home directory simply start with `~/` like you would in the shell.
-
-#### Aliases:
-You can create an alias to quickly navigate to a directory. Simply type in the alias followed by a colon. Then specify the path as you would normally. Note, in an event a specified alias conflicts with a [predefined alias](https://github.com/skuroda/Sublime-AdvancedNewFile#predefined-aliases), the specified alias will take precedence.
-
-Alias paths may be relative or absolute. If a relative path is specified, the `alias_root` setting will be used as the base. When specifying absolute paths, be sure to use the system specific style (e.g. Windows `C:\\Users\\username\\Desktop`, OS X and Linix `/home/username/desktop/`). In addition, you may specify an alias from the home directory by using `~/`.
-
-If an invalid alias is specified, an error pop up will be displayed when trying to create the file.
-
-Sample aliases:
-
- {
- "alias": {
- "Desktop": "~/Desktop/"
- }
- }
-
-To use the above alias, when specifying a new file enter `Desktop:testDir/testFile`, which would then create a file at `/Desktop/testDir/testFile`.
-
-##### Platform Specific Aliases
-You can also create aliases that are platform specific. These follow a similar set of rules as aliases. However, rather than specifying a string path to use, a dictionary is specified. This dictionary may contain the following keys: `windows`, `linux`, and `osx`. The path for this particular alias will be used based on the operating system in use. If the same alias is specified in both `alias` and `os_specific_alias`, the path in `os_specific_alias` will be used.
-
-Sample OS Specific Aliases:
-
- {
- "os_specific_alias": {
- "subl_packages": {
- "windows": "~\\AppData\\Roaming\\Sublime Text 2\\Packages",
- "linux": "~/.config/sublime-text-2/Packages",
- "osx": "~/Library/Application Support/Sublime Text 2/Packages"
- }
- }
- }
-
-##### Predefined Aliases
-###### Top level folders in window
-Top level folders can be specified by typing in the name of the folder followed by a colon. Then specify the path as you would normally.
-
-###### Current Working Directory
-To specify the current working directory, simply type a colon, without any preceding text.
-
-## Notes
-Thanks to Dima Kukushkin ([xobb1t](https://github.com/xobb1t)) for the original work on this plugin. Also, thank you to [facelessuser](https://github.com/facelessuser), and by extension biermeester and matthjes for the idea of platform specific settings.
-
-### Contributors
-* [xobb1t](https://github.com/xobb1t)
-* [edmundask](https://github.com/edmundask)
-* [alirezadot](https://github.com/alirezadot)
-* [aventurella](https://github.com/aventurella)
-* [skuroda](https://github.com/skuroda)
-
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/AdvancedNewFile/Side Bar.sublime-menu b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/AdvancedNewFile/Side Bar.sublime-menu
deleted file mode 100644
index dc104de..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/AdvancedNewFile/Side Bar.sublime-menu
+++ /dev/null
@@ -1,3 +0,0 @@
-[
- { "caption": "Advanced New File", "command": "advanced_new_file_at", "args": {"dirs": []} }
-]
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/AdvancedNewFile/messages.json b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/AdvancedNewFile/messages.json
deleted file mode 100644
index 9801895..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/AdvancedNewFile/messages.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "install": "messages/install.txt",
- "2012.11.08.20.00.00": "messages/1.txt",
- "2012.11.12.11.00.00": "messages/2.txt",
- "2012.11.26.11.00.00": "messages/3.txt",
- "2012.12.17.11.00.00": "messages/4.txt",
- "2013.07.29.11.00.00": "messages/5.txt",
- "2013.08.05.11.00.00": "messages/6.txt",
- "2013.09.03.11.00.00": "messages/7.txt"
-}
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/AdvancedNewFile/messages/1.txt b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/AdvancedNewFile/messages/1.txt
deleted file mode 100644
index ce62ab0..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/AdvancedNewFile/messages/1.txt
+++ /dev/null
@@ -1 +0,0 @@
-The repository has now been transferred to the proper URL. If you experienced any issues while this transition was occuring, my apologies. Please take a look at the README for new enhancments if you have not done so already.
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/AdvancedNewFile/messages/2.txt b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/AdvancedNewFile/messages/2.txt
deleted file mode 100644
index 65d14f3..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/AdvancedNewFile/messages/2.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-New Features/Enhancements:
-
-- Add setting to display path for file to be created in status bar. - Default true
-- Add setting to set default base path (home, current, top_folder, path). - Default "top_folder"
-- Add support for relative paths in alias.
-
-Please see the README for more information about the new settings.
-
-Bug Fixes:
-- Auto complete bug for files with spaces in their name
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/AdvancedNewFile/messages/3.txt b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/AdvancedNewFile/messages/3.txt
deleted file mode 100644
index 06c1553..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/AdvancedNewFile/messages/3.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-New Features/Enhancements:
-
-- Add OS Specific Aliases to settings.
-- Display an error when attempting to use an invalid alias.
-- Display an error when attempting to open a directory in a view.
-- Display an error if path creation fails.
-
-Please see the README for more information about the new settings.
-
-Bug Fixes:
-- Status bar update causing errors when no view is present.
-- Specifying absolute paths for Windows produced unexpected behavior.
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/AdvancedNewFile/messages/4.txt b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/AdvancedNewFile/messages/4.txt
deleted file mode 100644
index 5e24c4c..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/AdvancedNewFile/messages/4.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-New Features/Enhancements:
-
-- Enabling "use_cursor_text" will fill with selected regions. The first cursor/region to match the conditions (region or quoted section) will be used.
-- Autocompleting with tab where there is only a single completion option will continue completion on subsequent directories.
-
-Please see the README for more information about the new settings.
-
-Bug Fixes:
-- Properly display completions when using "ctrl+space" to manually display auto complete options.
-- Prevent error pop up from occuring when explicitly creating a directory structure.
-- Fix bug where using cursor text causes an error.
-- Prevent spaces from being inserted when tab is without a possible completion.
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/AdvancedNewFile/messages/5.txt b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/AdvancedNewFile/messages/5.txt
deleted file mode 100644
index ac23414..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/AdvancedNewFile/messages/5.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-- Rewrite autocomplete functionality to support *nix or windows style completions. Please see the README for details about new settings.
-
-Bug Fixes:
-- Snippets no longer appear when entering completions.
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/AdvancedNewFile/messages/6.txt b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/AdvancedNewFile/messages/6.txt
deleted file mode 100644
index 66277ec..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/AdvancedNewFile/messages/6.txt
+++ /dev/null
@@ -1 +0,0 @@
-- Merge ST2 and ST3 into a single version.
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/AdvancedNewFile/messages/7.txt b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/AdvancedNewFile/messages/7.txt
deleted file mode 100644
index c5eabd2..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/AdvancedNewFile/messages/7.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-Enhancements:
-- Setting to allow relative paths to be based on the current working directory. Enabled by default.
-
-Bug Fixes:
-- Various fixes for auto completion
-- Prompt completion type when using Windows Completion
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/AdvancedNewFile/messages/install.txt b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/AdvancedNewFile/messages/install.txt
deleted file mode 100644
index 429cd7c..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/AdvancedNewFile/messages/install.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-Thank you for installing the AdvancedNewFile plugin.
-
-For more information please visit https://github.com/skuroda/Sublime-AdvancedNewFile.
-
-Note you may need to restart Sublime Text after installing this plugin.
-
-If you have any questions, comments, or run into issues, please let me know! Hope you enjoy the plugin.
-
-Thank you!
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/AdvancedNewFile/package-metadata.json b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/AdvancedNewFile/package-metadata.json
deleted file mode 100644
index 831c552..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/AdvancedNewFile/package-metadata.json
+++ /dev/null
@@ -1 +0,0 @@
-{"url": "https://github.com/skuroda/Sublime-AdvancedNewFile", "version": "2013.09.09.06.50.47", "description": "File creation plugin for Sublime Text 2 and Sublime Text 3."}
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/ConsoleExec/.gitignore b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/ConsoleExec/.gitignore
deleted file mode 100644
index 298d177..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/ConsoleExec/.gitignore
+++ /dev/null
@@ -1,7 +0,0 @@
-# Environment-specific files such as configuration, logs, and setup
-*.pyc
-
-# Misc and OS files
-Desktop.ini # Directory atttributes in Windows.
-Thumbs.db # Picture thumbnail cache in Windows 98.
-.DS_Store # Directory attributes in Mac OS X.
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/ConsoleExec/LICENSE b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/ConsoleExec/LICENSE
deleted file mode 100644
index 6dd5395..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/ConsoleExec/LICENSE
+++ /dev/null
@@ -1,19 +0,0 @@
-Copyright (c) 2012 Joe Esposito
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/ConsoleExec/README.md b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/ConsoleExec/README.md
deleted file mode 100644
index 2632673..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/ConsoleExec/README.md
+++ /dev/null
@@ -1,74 +0,0 @@
-Console Exec
-============
-
-Plugin for [Sublime Text 2][sublime] to execute a command in a console
-window. After the process exits, the console remains open and displays
-**"Press any key to exit"** before closing.
-
-This plugin is based on the exec command shipped with Sublime Text, and
-uses the launcher that ships with [Crimson Editor][crimson]
-to wait for a keypress before closing the window.
-
-![Running a Flask application screenshot][example]
-
-Source [available on Github][repo].
-
-[sublime]: http://www.sublimetext.com
-[crimson]: http://crimsoneditor.com
-[example]: https://raw.github.com/joeyespo/sublimetext-console-exec/master/examples/flask_application_screenshot.png
-[repo]: http://github.com/joeyespo/sublimetext-console-exec
-
-
-Why?
-----
-
-Aside from personal preference of having an external console in web projects,
-
-- Sublime leaves your background process running when you quit
-- Rebuilding a project overwrites your running process, leaking processes if you're not careful
-- Certain environments such as [Pyglet][] will not run within the integrated console window
-
-This plugin ties these loose ends in a familiar way.
-
-[Pyglet]: http://www.pyglet.org
-
-
-Usage
------
-
-In any **.sublime-build** file add the following line to run it in a console:
-
- "target": "console_exec"
-
-For example, here's a modified **Python.sublime-build** file:
-
- {
- "cmd": ["python", "-u", "$file"],
- "file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
- "selector": "source.python",
- "target": "console_exec"
- }
-
-Note: you can find the appropriate build file from **"Browse Packages..."**
-
-
-Installation
-------------
-
-With [Sublime Package Control][package_control], simply
-
-1. Select **Package Control: Install Package** from the command palette
-2. Locate **ConsoleExec** and press enter to install it
-
-[package_control]: http://wbond.net/sublime_packages/package_control
-
-#### Manual installation (advanced)
-
-Clone this repository into the Packages directory.
-To see where it's located enter `print sublime.packages_path()` in the console.
-
-
-Notes
------
-
-This plugin is Windows-only for the moment.
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/ConsoleExec/console_exec.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/ConsoleExec/console_exec.py
deleted file mode 100644
index 40b0a51..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/ConsoleExec/console_exec.py
+++ /dev/null
@@ -1,107 +0,0 @@
-# -*- coding: utf-8 -*-
-
-"""
-Console Exec
-
-Plugin for Sublime Text 2 to execute a command and redirect its output
-into a console window. This is based on the default exec command.
-"""
-
-import sublime
-import sublime_plugin
-import os
-import sys
-import subprocess
-import time
-
-
-class Process(object):
- def __init__(self, arg_list, env, listener,
- # "path" is an option in build systems
- path='',
- # "shell" is an options in build systems
- shell=False):
-
- self.listener = listener
- self.killed = False
-
- self.start_time = time.time()
-
- # Set temporary PATH to locate executable in arg_list
- if path:
- old_path = os.environ["PATH"]
- # The user decides in the build system whether he wants to append $PATH
- # or tuck it at the front: "$PATH;C:\\new\\path", "C:\\new\\path;$PATH"
- os.environ["PATH"] = os.path.expandvars(path).encode(sys.getfilesystemencoding())
-
- proc_env = os.environ.copy()
- proc_env.update(env)
- for k, v in proc_env.iteritems():
- proc_env[k] = os.path.expandvars(v).encode(sys.getfilesystemencoding())
-
- self.proc = subprocess.Popen(arg_list, env=proc_env, shell=shell)
-
- if path:
- os.environ["PATH"] = old_path
-
- def kill(self):
- if not self.killed:
- self.killed = True
- self.proc.terminate()
- self.listener = None
-
- def poll(self):
- return self.proc.poll() == None
-
-
-class ConsoleExecCommand(sublime_plugin.WindowCommand):
- def run(self, cmd=[], file_regex='', line_regex='', working_dir='', encoding='utf-8', env={}, quiet=False, kill=False, **kwargs):
- launcher = os.path.join(sublime.packages_path(), 'ConsoleExec', 'launch.exe')
- if not os.path.exists(launcher):
- if not quiet:
- print 'Error: Could not find the ConsoleExec package.'
- return
- cmd = [launcher] + map(lambda s: '"%s"' % s if ' ' in s else s, cmd)
-
- if kill:
- if self.proc:
- self.proc.kill()
- self.proc = None
- return
-
- # Default the to the current files directory if no working directory was given
- if (working_dir == '' and self.window.active_view()
- and self.window.active_view().file_name()):
- working_dir = os.path.dirname(self.window.active_view().file_name())
-
- # Call get_output_panel a second time after assigning the above
- # settings, so that it'll be picked up as a result buffer
- self.window.get_output_panel("exec")
-
- self.encoding = encoding
- self.quiet = quiet
-
- self.proc = None
- if not self.quiet:
- print "Running " + " ".join(cmd)
- sublime.status_message("Building")
-
- merged_env = env.copy()
- if self.window.active_view():
- user_env = self.window.active_view().settings().get('build_env')
- if user_env:
- merged_env.update(user_env)
-
- # Change to the working dir, rather than spawning the process with it,
- # so that emitted working dir relative path names make sense
- if working_dir != '':
- os.chdir(working_dir)
-
- # Forward kwargs to Process
- self.proc = Process(cmd, merged_env, self, **kwargs)
-
- def is_enabled(self, kill=False):
- if kill:
- return hasattr(self, 'proc') and self.proc and self.proc.poll()
- else:
- return True
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/ConsoleExec/examples/flask_application_screenshot.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/ConsoleExec/examples/flask_application_screenshot.png
deleted file mode 100644
index 874e7a4..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/ConsoleExec/examples/flask_application_screenshot.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/ConsoleExec/examples/hello_sublime_screenshot.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/ConsoleExec/examples/hello_sublime_screenshot.png
deleted file mode 100644
index 9de2511..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/ConsoleExec/examples/hello_sublime_screenshot.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/ConsoleExec/package-metadata.json b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/ConsoleExec/package-metadata.json
deleted file mode 100644
index d14d21c..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/ConsoleExec/package-metadata.json
+++ /dev/null
@@ -1 +0,0 @@
-{"url": "https://github.com/joeyespo/sublimetext-console-exec", "version": "1.0.0", "description": "Plugin for Sublime Text 2 to execute a command in a console window."}
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/ConsoleExec/packages.json b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/ConsoleExec/packages.json
deleted file mode 100644
index 3cb0263..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/ConsoleExec/packages.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "schema_version": "1.2",
- "packages": [
- {
- "name": "ConsoleExec",
- "description": "Plugin for Sublime Text 2 to execute a command in a console window.",
- "author": "Joe Esposito",
- "homepage": "https://github.com/joeyespo/sublimetext-console-exec",
- "last_modified": "2012-12-12 20:00:00",
- "platforms": {
- "windows": [
- {
- "version": "1.0.0",
- "url": "https://nodeload.github.com/joeyespo/sublimetext-console-exec/zipball/master"
- }
- ]
- }
- }
- ]
-}
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/.gitignore b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/.gitignore
deleted file mode 100644
index 00c4ea8..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/.gitignore
+++ /dev/null
@@ -1,4 +0,0 @@
-*.pyc
-*.cache
-*.sublime-project
-package-metadata.json
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/EncodingHelper.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/EncodingHelper.py
deleted file mode 100644
index a2e8f93..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/EncodingHelper.py
+++ /dev/null
@@ -1,299 +0,0 @@
-# coding=utf8
-import sublime, sublime_plugin
-import codecs
-import sys
-import os
-# sys.path.append(os.path.join(sublime.packages_path(), 'EncodingHelper', 'chardet'))
-from chardet.universaldetector import UniversalDetector
-import re
-import threading
-import time
-
-# don't parse binary files, just mark these as binary
- #IMAGES-------------------------------------#sublime---------------#fonts-----------#compressed----------------#audio-video--------------------------------------------------#docs------------------------------#misc
-BINARY = re.compile('\.(apng|png|jpg|gif|jpeg|bmp|psd|ai|cdr|ico|cache|sublime-package|eot|svgz|ttf|woff|zip|tar|gz|rar|bz2|jar|xpi|mov|mpeg|avi|mpg|flv|wmv|mp3|wav|aif|aiff|snd|wma|asf|asx|pcm|pdf|doc|docx|xls|xlsx|ppt|pptx|rtf|sqlite|sqlitedb|fla|swf|exe)$', re.I);
-
-SETTINGS = sublime.load_settings('EncodingHelper.sublime-settings')
-
-class EncodingOnStatusBarListener(sublime_plugin.EventListener):
-
- def on_load(self, v, ok = True):
-
- if not v:
- return
- if v.encoding() == 'Undefined' and ok:
- # give time to sublime just one time
- sublime.set_timeout(lambda:self.on_load(v, False), 120)
- return
- elif v.encoding() == 'Undefined' and not ok:
- v.settings().set('encoding_helper_encoding_sublime', 'UTF-8')
-
- # if enabled, show encoding on status bar
- if bool(SETTINGS.get('show_encoding_on_status_bar', True)):
-
- # mark as loading
- v.settings().set('encoding_helper_loading', True)
-
- if not v.settings().has('encoding_helper_encoding_sublime'):
- v.settings().set('encoding_helper_encoding_sublime', v.encoding())
-
- #has cached state?
- if v.settings().has('encoding_helper_encoding'):
- v.settings().erase('encoding_helper_loading')
- encoding = v.settings().get('encoding_helper_encoding')
- encoding_sublime = v.settings().get('encoding_helper_encoding_sublime')
- v.set_status('encoding_helper_statusbar', encoding)
- if encoding_sublime != '' and encoding_sublime != encoding and encoding != 'BINARY' and encoding != 'Unknown':
- v.set_status('encoding_helper_statusbar_convertion_status', 'Opened as '+encoding_sublime+' (document maybe broken)')
- else:
- # is the file is there
- file_name = v.file_name()
- if not file_name or file_name == '' or os.path.isfile(file_name) == False:
- v.settings().erase('encoding_helper_loading')
- v.set_status('encoding_helper_statusbar', '');
- #guess
- else:
- v.set_status('encoding_helper_statusbar', '');
- #print 'GuessEncoding'
- GuessEncoding(file_name, SETTINGS.get('fallback_encodings'), v).start()
- else:
- v.erase_status('encoding_helper_statusbar')
-
- def on_activated(self, v):
- if bool(SETTINGS.get('show_encoding_on_status_bar', True)):
- if v.settings().has('encoding_helper_loading'):
- pass
- else:
- if not v.is_loading():
- self.on_load(v)
- else:
- v.erase_status('encoding_helper_statusbar')
-
-SETTINGS.add_on_change('reload', lambda: EncodingOnStatusBarListener().on_load(sublime.active_window().active_view()))
-
-class GuessEncoding(threading.Thread):
-
- def __init__(self, file_name, fallback_encodings = [], v = False, callback = False):
- threading.Thread.__init__(self)
- self.file_name = file_name
-
- encoding_list = []
- for encoding in fallback_encodings:
- if encoding != 'ISO88591' and encoding != 'iso88591' and encoding != 'iso-8859-1' and encoding != 'ISO-8859-1':
- encoding_list.append(encoding)
- self.fallback_encodings = encoding_list
-
- self.v = v
- if callback == False:
- self.callback = self.on_done
- else:
- self.callback = callback
-
- def run(self):
- confidence = 0
- size = os.stat(self.file_name).st_size
- if BINARY.search(self.file_name):
- encoding = 'BINARY'
- confidence = 1
- elif size > 1048576 and maybe_binary(self.file_name):
- encoding = 'BINARY'
- confidence = 0.7
- elif size > 1048576: # skip files > 1Mb
- encoding = 'Unknown'
- confidence = 1
- else:
- started_at = time.time()
- timeout = False
-
- detector = UniversalDetector()
- fp = open(self.file_name, 'rb')
- line = fp.readline(500)
- while line != '':
- detector.feed(line)
- if time.time() - started_at > 8:
- timeout = True
- break
- line = fp.readline(8000)
- fp.close()
- detector.close()
- if timeout == False or (timeout == True and detector.done):
- encoding = str(detector.result['encoding']).upper()
- confidence = detector.result['confidence']
- else:
- encoding = 'Unknown'
- confidence = 1
-
- if encoding == 'ASCII':
- encoding = 'UTF-8'
- elif encoding == None or encoding == 'NONE' or encoding == '' or encoding == 'Unknown' or confidence < 0.7:
- if encoding == 'ISO-8859-2' and confidence > 0.69:
- workaround = self.test_fallback_encodings(['UTF-8', 'ISO-8859-1'])
- if workaround != False:
- encoding = workaround
- else:
- encoding = 'Unknown'
- elif encoding != 'ISO-8859-2' and confidence > 0.49:
- if encoding == 'WINDOWS-1252':
- encoding = 'ISO-8859-1'
- else:
- fallback = self.test_fallback_encodings()
- if fallback == False:
- encoding = 'Unknown'
- else:
- encoding = fallback
-
- # workarounds here
- if encoding == 'ISO-8859-2' or encoding == 'MACCYRILLIC':
- workaround = self.test_fallback_encodings(['UTF-8', 'ISO-8859-1'])
- if workaround != False:
- encoding = workaround
-
- del detector
- sublime.set_timeout(lambda:self.callback(encoding, confidence), 0)
-
- def test_fallback_encodings(self, encodings = False):
- if encodings == False:
- encodings = self.fallback_encodings
- for encoding in encodings:
- _encoding = translateCodec(encoding.lower())
- try:
- fp = codecs.open(self.file_name, "rb", _encoding, errors='strict')
- line = fp.readline(500)
- while line != '':
- line = fp.readline(8000)
- fp.close()
- return encoding
- except UnicodeDecodeError:
- fp.close()
- return False
-
- def on_done(self, encoding, confidence):
- if self.v:
- self.v.settings().set('encoding_helper_encoding', encoding)
- self.v.settings().set('encoding_helper_confidence', confidence)
- self.v.set_status('encoding_helper_statusbar', encoding)
-
- if not self.v.settings().has('encoding_helper_encoding_sublime'):
- self.v.settings().set('encoding_helper_encoding_sublime', self.v.encoding())
- encoding_sublime = self.v.settings().get('encoding_helper_encoding_sublime')
-
- if encoding in SETTINGS.get('open_automatically_as_utf8', []) and self.v.is_dirty() == False:
- ConvertToUTF8(self.file_name, encoding, self.v).start()
- else:
- if encoding_sublime != '' and encoding_sublime != encoding and encoding != 'BINARY' and encoding != 'Unknown':
- self.v.set_status('encoding_helper_statusbar_convertion_status', 'Opened as '+encoding_sublime+' (document maybe broken)')
- self.v.settings().erase('encoding_helper_loading')
-
-class Toutf8fromBestGuessCommand(sublime_plugin.WindowCommand):
-
- def run(self):
- encoding = sublime.active_window().active_view().settings().get('encoding_helper_encoding')
- if encoding != None and encoding != 'UTF-8' and encoding != 'BINARY' and encoding != 'Unknown' and encoding != '':
- Toutf8fromCommand(sublime_plugin.WindowCommand).run(encoding)
-
- def description(self):
- try:
- encoding = sublime.active_window().active_view().settings().get('encoding_helper_encoding')
- if encoding != None and encoding != 'UTF-8' and encoding != 'BINARY' and encoding != 'Unknown' and encoding != '':
- return 'Convert to UTF-8 From '+encoding
- else:
- return 'Convert to UTF-8 From Best Guess'
- except:
- return 'Convert to UTF-8 From Best Guess'
-
- def is_enabled(self):
- try:
- encoding = sublime.active_window().active_view().settings().get('encoding_helper_encoding')
- if encoding != None and encoding != 'UTF-8' and encoding != 'BINARY' and encoding != 'Unknown' and encoding != '':
- return True
- except:
- return False
-
-class Toutf8fromCommand(sublime_plugin.WindowCommand):
-
- def run(self, encoding = ''):
- try:
- if encoding == None or encoding == 'UTF-8' or encoding == 'BINARY' or encoding == 'Unknown' or encoding == '':
- return False
- v = sublime.active_window().active_view()
- file_name = v.file_name()
- if not file_name or file_name == '' or os.path.isfile(file_name) == False:
- return False
- else:
- ConvertToUTF8(file_name, encoding, v).start()
- return True
- except:
- return False
-
- def is_enabled(self, encoding = ''):
- try:
- file_name = sublime.active_window().active_view().file_name()
- if not file_name or file_name == '' or os.path.isfile(file_name) == False:
- return False
- else:
- return True
- except:
- return False
-
-class ConvertToUTF8(threading.Thread):
-
- def __init__(self, file_name, encoding, v = False, callback = False):
- threading.Thread.__init__(self)
- self.file_name = file_name
-
- self.encoding = encoding
- self.v = v
- if callback == False:
- self.callback = self.on_done
- else:
- self.callback = callback
-
- def run(self):
- _encoding = translateCodec(self.encoding.lower())
- try:
- content = codecs.open(self.file_name, "rb", _encoding, errors='strict').read()
- if len(content) != 0:
- sublime.set_timeout(lambda:self.callback(content, self.encoding), 0)
- except UnicodeDecodeError, e:
- print e
- sublime.set_timeout(lambda:self.on_error(self.file_name, self.encoding), 0)
- except LookupError, e:
- print e
- sublime.set_timeout(lambda:self.on_lookup_error(self.file_name, self.encoding), 0)
-
- def on_done(self, content, encoding):
- if self.v:
- edit = self.v.begin_edit()
- self.v.replace(edit, sublime.Region(0, self.v.size()), content);
- self.v.end_edit(edit)
- self.v.settings().set('encoding_helper_encoding_sublime', 'UTF-8')
- self.v.settings().set('encoding_helper_encoding', 'UTF-8')
- if bool(SETTINGS.get('show_encoding_on_status_bar', True)):
- self.v.set_status('encoding_helper_statusbar', 'UTF-8')
- self.v.set_status('encoding_helper_statusbar_convertion_status', 'Converted to UTF-8 from '+encoding)
-
- def on_error(self, file_name, encoding):
- sublime.error_message('Unable to convert to UTF-8 from encoding "'+encoding+'" the file: \n'+file_name);
-
- def on_lookup_error(self, file_name, encoding):
- sublime.error_message('The encoding "'+encoding+'" is unknown in this system.\n Unable to convert to UTF-8 the file: \n'+file_name);
-
-def maybe_binary(file_name):
- fp = open(file_name, 'rb')
- line = fp.readline(500)
- read = 500
- while line != '':
- if '\0' in line:
- fp.close()
- return True
- read += 8000
- if read > 1048576:
- fp.close()
- return False
- line = fp.readline(8000)
- fp.close()
- return False
-
-# should map different codecs to what codec.open except to receive
-def translateCodec(encoding):
- return str(encoding)
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/EncodingHelper.sublime-settings b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/EncodingHelper.sublime-settings
deleted file mode 100644
index 91a9b46..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/EncodingHelper.sublime-settings
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- // To show encoding on status bar
- "show_encoding_on_status_bar" : true,
-
- // Additional encodings to test when no acurrated guess can be done
- // NOTE: Don't add ISO-8859-1
- "fallback_encodings": [ ],
-
- // Automatically opens as UTF-8 the following encodings list
- // NOTE: Encoding detection is not acurrated
- // don't abuse of this feature
- "open_automatically_as_utf8": [ ]
-}
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/Main.sublime-menu b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/Main.sublime-menu
deleted file mode 100644
index 39ef36b..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/Main.sublime-menu
+++ /dev/null
@@ -1,291 +0,0 @@
-[
- {
- "caption": "Edit",
- "mnemonic": "E",
- "id": "edit",
- "children":[
- { "caption": "-", "id": "encoding-separator" },
-
- {"command":"toutf8from_best_guess"},
- {"caption": "Convert to UTF-8 From Encoding",
- "children":
- [
- //ALL
- {"caption":"Complete List Sorted", "children":
- [
- {"caption":"BIG5", "command":"toutf8from","args": {"encoding":"BIG5" } },
- {"caption":"BIG5HKSCS", "command":"toutf8from","args": {"encoding":"BIG5HKSCS" } },
- {"caption":"-"},
- {"caption": "CP", "children":
- [
- {"caption":"CP037", "command":"toutf8from","args": {"encoding":"CP037" } },
- {"caption":"CP424", "command":"toutf8from","args": {"encoding":"CP424" } },
- {"caption":"CP437", "command":"toutf8from","args": {"encoding":"CP437" } },
- {"caption":"CP500", "command":"toutf8from","args": {"encoding":"CP500" } },
- {"caption":"CP720", "command":"toutf8from","args": {"encoding":"CP720" } },
- {"caption":"CP737", "command":"toutf8from","args": {"encoding":"CP737" } },
- {"caption":"CP775", "command":"toutf8from","args": {"encoding":"CP775" } },
- {"caption":"CP850", "command":"toutf8from","args": {"encoding":"CP850" } },
- {"caption":"CP852", "command":"toutf8from","args": {"encoding":"CP852" } },
- {"caption":"CP855", "command":"toutf8from","args": {"encoding":"CP855" } },
- {"caption":"CP856", "command":"toutf8from","args": {"encoding":"CP856" } },
- {"caption":"CP857", "command":"toutf8from","args": {"encoding":"CP857" } },
- {"caption":"CP858", "command":"toutf8from","args": {"encoding":"CP858" } },
- {"caption":"CP860", "command":"toutf8from","args": {"encoding":"CP860" } },
- {"caption":"CP861", "command":"toutf8from","args": {"encoding":"CP861" } },
- {"caption":"CP862", "command":"toutf8from","args": {"encoding":"CP862" } },
- {"caption":"CP863", "command":"toutf8from","args": {"encoding":"CP863" } },
- {"caption":"CP864", "command":"toutf8from","args": {"encoding":"CP864" } },
- {"caption":"CP865", "command":"toutf8from","args": {"encoding":"CP865" } },
- {"caption":"CP866", "command":"toutf8from","args": {"encoding":"CP866" } },
- {"caption":"CP869", "command":"toutf8from","args": {"encoding":"CP869" } },
- {"caption":"CP874", "command":"toutf8from","args": {"encoding":"CP874" } },
- {"caption":"CP875", "command":"toutf8from","args": {"encoding":"CP875" } },
- {"caption":"CP932", "command":"toutf8from","args": {"encoding":"CP932" } },
- {"caption":"CP949", "command":"toutf8from","args": {"encoding":"CP949" } },
- {"caption":"CP950", "command":"toutf8from","args": {"encoding":"CP950" } },
- {"caption":"CP1006", "command":"toutf8from","args": {"encoding":"CP1006" } },
- {"caption":"CP1026", "command":"toutf8from","args": {"encoding":"CP1026" } },
- {"caption":"CP1140", "command":"toutf8from","args": {"encoding":"CP1140" } },
- {"caption":"CP1250", "command":"toutf8from","args": {"encoding":"CP1250" } },
- {"caption":"CP1251", "command":"toutf8from","args": {"encoding":"CP1251" } },
- {"caption":"CP1252", "command":"toutf8from","args": {"encoding":"CP1252" } },
- {"caption":"CP1253", "command":"toutf8from","args": {"encoding":"CP1253" } },
- {"caption":"CP1254", "command":"toutf8from","args": {"encoding":"CP1254" } },
- {"caption":"CP1255", "command":"toutf8from","args": {"encoding":"CP1255" } },
- {"caption":"CP1256", "command":"toutf8from","args": {"encoding":"CP1256" } },
- {"caption":"CP1257", "command":"toutf8from","args": {"encoding":"CP1257" } },
- {"caption":"CP1258", "command":"toutf8from","args": {"encoding":"CP1258" } }
- ]},
- {"caption":"-"},
- {"caption":"EUC JIS 2004", "command":"toutf8from","args": {"encoding":"EUC_JIS_2004" } },
- {"caption":"EUC JISX0213", "command":"toutf8from","args": {"encoding":"EUC_JISX0213" } },
- {"caption":"EUC JP", "command":"toutf8from","args": {"encoding":"EUC_JP" } },
- {"caption":"EUC KR", "command":"toutf8from","args": {"encoding":"EUC_KR" } },
- {"caption":"-"},
- {"caption":"GB2312", "command":"toutf8from","args": {"encoding":"GB2312" } },
- {"caption":"GB18030", "command":"toutf8from","args": {"encoding":"GB18030" } },
- {"caption":"GBK", "command":"toutf8from","args": {"encoding":"GBK" } },
- {"caption":"-"},
- {"caption":"HZ", "command":"toutf8from","args": {"encoding":"HZ" } },
- {"caption":"-"},
- {"caption": "ISO", "children":
- [
- {"caption":"ISO2022 JP 1", "command":"toutf8from","args": {"encoding":"ISO2022_JP_1" } },
- {"caption":"ISO2022 JP 2", "command":"toutf8from","args": {"encoding":"ISO2022_JP_2" } },
- {"caption":"ISO2022 JP 3", "command":"toutf8from","args": {"encoding":"ISO2022_JP_3" } },
- {"caption":"ISO2022 JP 2004", "command":"toutf8from","args": {"encoding":"ISO2022_JP_2004" } },
- {"caption":"ISO2022 JP EXT", "command":"toutf8from","args": {"encoding":"ISO2022_JP_EXT" } },
- {"caption":"ISO2022 JP", "command":"toutf8from","args": {"encoding":"ISO2022_JP" } },
- {"caption":"ISO2022 KR", "command":"toutf8from","args": {"encoding":"ISO2022_KR" } },
- {"caption":"-"},
- {"caption":"ISO8859 1", "command":"toutf8from","args": {"encoding":"ISO8859_1" } },
- {"caption":"ISO8859 2", "command":"toutf8from","args": {"encoding":"ISO8859_2" } },
- {"caption":"ISO8859 3", "command":"toutf8from","args": {"encoding":"ISO8859_3" } },
- {"caption":"ISO8859 4", "command":"toutf8from","args": {"encoding":"ISO8859_4" } },
- {"caption":"ISO8859 5", "command":"toutf8from","args": {"encoding":"ISO8859_5" } },
- {"caption":"ISO8859 6", "command":"toutf8from","args": {"encoding":"ISO8859_6" } },
- {"caption":"ISO8859 7", "command":"toutf8from","args": {"encoding":"ISO8859_7" } },
- {"caption":"ISO8859 8", "command":"toutf8from","args": {"encoding":"ISO8859_8" } },
- {"caption":"ISO8859 9", "command":"toutf8from","args": {"encoding":"ISO8859_9" } },
- {"caption":"ISO8859 10", "command":"toutf8from","args": {"encoding":"ISO8859_10" } },
- {"caption":"ISO8859 13", "command":"toutf8from","args": {"encoding":"ISO8859_13" } },
- {"caption":"ISO8859 14", "command":"toutf8from","args": {"encoding":"ISO8859_14" } },
- {"caption":"ISO8859 15", "command":"toutf8from","args": {"encoding":"ISO8859_15" } },
- {"caption":"ISO8859 16", "command":"toutf8from","args": {"encoding":"ISO8859_16" } }
- ]},
- {"caption":"-"},
- {"caption":"JOHAB", "command":"toutf8from","args": {"encoding":"JOHAB" } },
- {"caption":"KOI8 R", "command":"toutf8from","args": {"encoding":"KOI8_R" } },
- {"caption":"KOI8 U", "command":"toutf8from","args": {"encoding":"KOI8_U" } },
- {"caption":"LATIN 1", "command":"toutf8from","args": {"encoding":"LATIN_1" } },
- {"caption":"-"},
- {"caption":"MAC CYRILLIC", "command":"toutf8from","args": {"encoding":"MAC_CYRILLIC" } },
- {"caption":"MAC GREEK", "command":"toutf8from","args": {"encoding":"MAC_GREEK" } },
- {"caption":"MAC ICELAND", "command":"toutf8from","args": {"encoding":"MAC_ICELAND" } },
- {"caption":"MAC LATIN2", "command":"toutf8from","args": {"encoding":"MAC_LATIN2" } },
- {"caption":"MAC ROMAN", "command":"toutf8from","args": {"encoding":"MAC_ROMAN" } },
- {"caption":"MAC TURKISH", "command":"toutf8from","args": {"encoding":"MAC_TURKISH" } },
- {"caption":"-"},
- {"caption":"PTCP154", "command":"toutf8from","args": {"encoding":"PTCP154" } },
- {"caption":"-"},
- {"caption":"SHIFT JIS", "command":"toutf8from","args": {"encoding":"SHIFT_JIS" } },
- {"caption":"SHIFT JIS 2004", "command":"toutf8from","args": {"encoding":"SHIFT_JIS_2004" } },
- {"caption":"SHIFT JISX0213", "command":"toutf8from","args": {"encoding":"SHIFT_JISX0213" } },
- {"caption":"-"},
- {"caption": "UTF", "children":
- [
- {"caption":"UTF 7", "command":"toutf8from","args": {"encoding":"UTF_7" } },
- {"caption":"UTF 16", "command":"toutf8from","args": {"encoding":"UTF_16" } },
- {"caption":"UTF 16 LE", "command":"toutf8from","args": {"encoding":"UTF_16_LE" } },
- {"caption":"UTF 16 BE", "command":"toutf8from","args": {"encoding":"UTF_16_BE" } },
- {"caption":"UTF 32", "command":"toutf8from","args": {"encoding":"UTF_32" } },
- {"caption":"UTF 32 LE", "command":"toutf8from","args": {"encoding":"UTF_32_LE" } },
- {"caption":"UTF 32 BE", "command":"toutf8from","args": {"encoding":"UTF_32_BE" } }
- ]
- }
- ]
- },
- {"caption":"-"},
- {"caption": "UTF", "children":
- [
- {"caption":"UTF 7" ,"command":"toutf8from","args": {"encoding":"UTF_7" } },
- {"caption":"UTF 16" , "command": "toutf8from", "args": {"encoding": "UTF_16" } },
- {"caption":"UTF 16 BE (BMP only)" ,"command":"toutf8from","args": {"encoding":"UTF_16_BE" } },
- {"caption":"UTF 16 LE (BMP only)" ,"command":"toutf8from","args": {"encoding":"UTF_16_LE" } },
- {"caption":"UTF 32" ,"command":"toutf8from","args": {"encoding":"UTF_32" } },
- {"caption":"UTF 32 BE" ,"command":"toutf8from","args": {"encoding":"UTF_32_BE" } },
- {"caption":"UTF 32 LE" ,"command":"toutf8from","args": {"encoding":"UTF_32_LE" } }
- ]
- },
- {"caption":"-"},
- {"caption": "Chinese, Japanese, Korean", "children":
- [
- {"caption":"Traditional Chinese (BIG5)" ,"command":"toutf8from","args": {"encoding":"BIG5" } },
- {"caption":"Traditional Chinese (BIG5HKSCS)" ,"command":"toutf8from","args": {"encoding":"BIG5HKSCS" } },
- {"caption":"Traditional Chinese (CP950)" ,"command":"toutf8from","args": {"encoding":"CP950" } },
- {"caption":"-"},
- {"caption":"Simplified Chinese (GB2312)" ,"command":"toutf8from","args": {"encoding":"GB2312" } },
- {"caption":"Simplified Chinese (HZ)" ,"command":"toutf8from","args": {"encoding":"HZ" } },
- {"caption":"-"},
- {"caption":"Unified Chinese (GB18030)" ,"command":"toutf8from","args": {"encoding":"GB18030" } },
- {"caption":"Unified Chinese (GBK)" ,"command":"toutf8from","args": {"encoding":"GBK" } },
- {"caption":"-"},
- {"caption":"Japanese (CP932)" ,"command":"toutf8from","args": {"encoding":"CP932" } },
- {"caption":"Japanese (EUC JIS 2004)" ,"command":"toutf8from","args": {"encoding":"EUC_JIS_2004" } },
- {"caption":"Japanese (EUC JISX0213)" ,"command":"toutf8from","args": {"encoding":"EUC_JISX0213" } },
- {"caption":"Japanese (EUC JP)" ,"command":"toutf8from","args": {"encoding":"EUC_JP" } },
- {"caption":"Japanese (ISO2022 JP)" ,"command":"toutf8from","args": {"encoding":"ISO2022_JP" } },
- {"caption":"Japanese (ISO2022 JP 1)" ,"command":"toutf8from","args": {"encoding":"ISO2022_JP_1" } },
- {"caption":"Japanese, Korean, Simplified Chinese, Western Europe, Greek (ISO2022 JP 2)" ,"command":"toutf8from","args": {"encoding":"ISO2022_JP_2" } },
- {"caption":"Japanese (ISO2022 JP 3)" ,"command":"toutf8from","args": {"encoding":"ISO2022_JP_3" } },
- {"caption":"Japanese (ISO2022 JP 2004)" ,"command":"toutf8from","args": {"encoding":"ISO2022_JP_2004" } },
- {"caption":"Japanese (ISO2022 JP EXT)" ,"command":"toutf8from","args": {"encoding":"ISO2022_JP_EXT" } },
- {"caption":"Japanese (SHIFT JIS)" ,"command":"toutf8from","args": {"encoding":"SHIFT_JIS" } },
- {"caption":"Japanese (SHIFT JIS 2004)" ,"command":"toutf8from","args": {"encoding":"SHIFT_JIS_2004" } },
- {"caption":"Japanese (SHIFT JISX0213)" ,"command":"toutf8from","args": {"encoding":"SHIFT_JISX0213" } },
- {"caption":"-"},
- {"caption":"Korean (CP949)" ,"command":"toutf8from","args": {"encoding":"CP949" } },
- {"caption":"Korean (EUC KR)" ,"command":"toutf8from","args": {"encoding":"EUC_KR" } },
- {"caption":"Korean (ISO2022 KR)" ,"command":"toutf8from","args": {"encoding":"ISO2022_KR" } },
- {"caption":"Korean (JOHAB)" ,"command":"toutf8from","args": {"encoding":"JOHAB" } }
- ]
- },
- {"caption": "Russian, Ukrainian", "children":
- [
- {"caption":"CP855" ,"command":"toutf8from","args": {"encoding":"CP855" } },
- {"caption":"CP1251" ,"command":"toutf8from","args": {"encoding":"CP1251" } },
- {"caption":"ISO8859 5" ,"command":"toutf8from","args": {"encoding":"ISO8859_5" } },
- {"caption":"MAC CYRILLIC" ,"command":"toutf8from","args": {"encoding":"MAC_CYRILLIC" } },
- {"caption":"-"},
- {"caption":"Russian (CP866)" ,"command":"toutf8from","args": {"encoding":"CP866" } },
- {"caption":"Russian (KOI8 R)" ,"command":"toutf8from","args": {"encoding":"KOI8_R" } },
- {"caption":"-"},
- {"caption":"Ukrainian (KOI8 U)" ,"command":"toutf8from","args": {"encoding":"KOI8_U" } }
- ]
- },
-
- {"caption":"-"},
- {"caption": "Arabic", "children":
- [
- {"caption":"CP720" ,"command":"toutf8from","args": {"encoding":"CP720" } },
- {"caption":"CP864" ,"command":"toutf8from","args": {"encoding":"CP864" } },
- {"caption":"CP1256" ,"command":"toutf8from","args": {"encoding":"CP1256" } },
- {"caption":"ISO8859 6" ,"command":"toutf8from","args": {"encoding":"ISO8859_6" } }
- ]
- },
- {"caption":"Canadian (CP863)" ,"command":"toutf8from","args": {"encoding":"CP863" } },
- {"caption":"Danish, Norwegian (CP865)" ,"command":"toutf8from","args": {"encoding":"CP865" } },
- {"caption": "English", "children":
- [
- {"caption":"CP037" ,"command":"toutf8from","args": {"encoding":"CP037" } },
- {"caption":"CP437" ,"command":"toutf8from","args": {"encoding":"CP437" } }
- ]
- },
- {"caption":"Esperanto, Maltese (ISO8859 3)" ,"command":"toutf8from","args": {"encoding":"ISO8859_3" } },
- {"caption": "Greek", "children":
- [
- {"caption":"CP737" ,"command":"toutf8from","args": {"encoding":"CP737" } },
- {"caption":"CP869" ,"command":"toutf8from","args": {"encoding":"CP869" } },
- {"caption":"CP875" ,"command":"toutf8from","args": {"encoding":"CP875" } },
- {"caption":"CP1253" ,"command":"toutf8from","args": {"encoding":"CP1253" } },
- {"caption":"ISO8859 7" ,"command":"toutf8from","args": {"encoding":"ISO8859_7" } },
- {"caption":"MAC GREEK" ,"command":"toutf8from","args": {"encoding":"MAC_GREEK" } }
- ]
- },
- { "caption": "Hebrew", "children":
- [
- {"caption":"CP424" ,"command":"toutf8from","args": {"encoding":"CP424" } },
- {"caption":"CP856" ,"command":"toutf8from","args": {"encoding":"CP856" } },
- {"caption":"CP862" ,"command":"toutf8from","args": {"encoding":"CP862" } },
- {"caption":"CP1255" ,"command":"toutf8from","args": {"encoding":"CP1255" } },
- {"caption":"ISO8859 8" ,"command":"toutf8from","args": {"encoding":"ISO8859_8" } }
- ]
- },
- {"caption": "Icelandic", "children":
- [
- {"caption":"CP861" ,"command":"toutf8from","args": {"encoding":"CP861" } },
- {"caption":"MAC ICELAND" ,"command":"toutf8from","args": {"encoding":"MAC_ICELAND" } }
- ]
- },
- {"caption":"Kazakh (PTCP154)" ,"command":"toutf8from","args": {"encoding":"PTCP154" } },
- {"caption":"Portuguese (CP860)" ,"command":"toutf8from","args": {"encoding":"CP860" } },
- {"caption":"Thai (CP874)" ,"command":"toutf8from","args": {"encoding":"CP874" } },
- {"caption": "Turkish", "children":
- [
- {"caption":"CP857" ,"command":"toutf8from","args": {"encoding":"CP857" } },
- {"caption":"CP1026" ,"command":"toutf8from","args": {"encoding":"CP1026" } },
- {"caption":"CP1254" ,"command":"toutf8from","args": {"encoding":"CP1254" } },
- {"caption":"ISO8859 9" ,"command":"toutf8from","args": {"encoding":"ISO8859_9" } },
- {"caption":"MAC TURKISH" ,"command":"toutf8from","args": {"encoding":"MAC_TURKISH" } }
- ]
- },
- {"caption":"Urdu (CP1006)" ,"command":"toutf8from","args": {"encoding":"CP1006" } },
- {"caption":"Vietnamese (CP1258)" ,"command":"toutf8from","args": {"encoding":"CP1258" } },
-
-
-
- //REGION
- {"caption":"-"},
- {"caption": "Baltic languages", "children":
- [
- {"caption":"CP775" ,"command":"toutf8from","args": {"encoding":"CP775" } },
- {"caption":"CP1257" ,"command":"toutf8from","args": {"encoding":"CP1257" } },
- {"caption":"ISO8859 13" ,"command":"toutf8from","args": {"encoding":"ISO8859_13" } },
- {"caption":"ISO8859 4" ,"command":"toutf8from","args": {"encoding":"ISO8859_4" } }
- ]
- },
- {"caption":"Celtic languages (ISO8859 14)" ,"command":"toutf8from","args": {"encoding":"ISO8859_14" } },
- {"caption":"Nordic languages (ISO8859 10)" ,"command":"toutf8from","args": {"encoding":"ISO8859_10" } },
-
-
- //LOCATION
- {"caption":"-"},
- {"caption": "Central and Eastern Europe", "children":
- [
- {"caption":"CP852" ,"command":"toutf8from","args": {"encoding":"CP852" } },
- {"caption":"CP1250" ,"command":"toutf8from","args": {"encoding":"CP1250" } },
- {"caption":"ISO8859 2" ,"command":"toutf8from","args": {"encoding":"ISO8859_2" } },
- {"caption":"CMAC LATIN2" ,"command":"toutf8from","args": {"encoding":"MAC_LATIN2" } }
- ]
- },
- {"caption":"South-Eastern Europe (ISO8859 16)" ,"command":"toutf8from","args": {"encoding":"ISO8859_16" } },
- {"caption":"West Europe (LATIN 1)" ,"command":"toutf8from","args": {"encoding":"LATIN_1" } },
- {"caption": "Western Europe", "children":
- [
- {"caption":"CP500" ,"command":"toutf8from","args": {"encoding":"CP500" } },
- {"caption":"CP850" ,"command":"toutf8from","args": {"encoding":"CP850" } },
- {"caption":"CP858" ,"command":"toutf8from","args": {"encoding":"CP858" } },
- {"caption":"CP1140" ,"command":"toutf8from","args": {"encoding":"CP1140" } },
- {"caption":"CP1252" ,"command":"toutf8from","args": {"encoding":"CP1252" } },
- {"caption":"ISO8859 15" ,"command":"toutf8from","args": {"encoding":"ISO8859_15" } },
- {"caption":"MAC ROMAN" ,"command":"toutf8from","args": {"encoding":"MAC_ROMAN" } }
- ]
- }
- ]
- }
- ]
-
-
- }
-]
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/Settings/Main.sublime-menu b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/Settings/Main.sublime-menu
deleted file mode 100644
index c6b637c..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/Settings/Main.sublime-menu
+++ /dev/null
@@ -1,39 +0,0 @@
-[
- {
- "caption": "Preferences",
- "mnemonic": "n",
- "id": "preferences",
- "children":
- [
- {
- "caption": "Package Settings",
- "mnemonic": "P",
- "id": "package-settings",
- "children":
- [
- {
- "caption": "Encoding Helper",
- "children":
- [
- {
- "command": "open_file", "args":
- {
- "file": "${packages}/EncodingHelper/EncodingHelper.sublime-settings"
- },
- "caption": "Settings – Default"
- },
- {
- "command": "open_file", "args":
- {
- "file": "${packages}/User/EncodingHelper.sublime-settings"
- },
- "caption": "Settings – User"
- },
- { "caption": "-" }
- ]
- }
- ]
- }
- ]
- }
-]
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/COPYING b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/COPYING
deleted file mode 100644
index 8add30a..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/COPYING
+++ /dev/null
@@ -1,504 +0,0 @@
- GNU LESSER GENERAL PUBLIC LICENSE
- Version 2.1, February 1999
-
- Copyright (C) 1991, 1999 Free Software Foundation, Inc.
- 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the Lesser GPL. It also counts
- as the successor of the GNU Library Public License, version 2, hence
- the version number 2.1.]
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
- This license, the Lesser General Public License, applies to some
-specially designated software packages--typically libraries--of the
-Free Software Foundation and other authors who decide to use it. You
-can use it too, but we suggest you first think carefully about whether
-this license or the ordinary General Public License is the better
-strategy to use in any particular case, based on the explanations below.
-
- When we speak of free software, we are referring to freedom of use,
-not price. Our General Public Licenses are designed to make sure that
-you have the freedom to distribute copies of free software (and charge
-for this service if you wish); that you receive source code or can get
-it if you want it; that you can change the software and use pieces of
-it in new free programs; and that you are informed that you can do
-these things.
-
- To protect your rights, we need to make restrictions that forbid
-distributors to deny you these rights or to ask you to surrender these
-rights. These restrictions translate to certain responsibilities for
-you if you distribute copies of the library or if you modify it.
-
- For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you. You must make sure that they, too, receive or can get the source
-code. If you link other code with the library, you must provide
-complete object files to the recipients, so that they can relink them
-with the library after making changes to the library and recompiling
-it. And you must show them these terms so they know their rights.
-
- We protect your rights with a two-step method: (1) we copyright the
-library, and (2) we offer you this license, which gives you legal
-permission to copy, distribute and/or modify the library.
-
- To protect each distributor, we want to make it very clear that
-there is no warranty for the free library. Also, if the library is
-modified by someone else and passed on, the recipients should know
-that what they have is not the original version, so that the original
-author's reputation will not be affected by problems that might be
-introduced by others.
-
- Finally, software patents pose a constant threat to the existence of
-any free program. We wish to make sure that a company cannot
-effectively restrict the users of a free program by obtaining a
-restrictive license from a patent holder. Therefore, we insist that
-any patent license obtained for a version of the library must be
-consistent with the full freedom of use specified in this license.
-
- Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License. This license, the GNU Lesser
-General Public License, applies to certain designated libraries, and
-is quite different from the ordinary General Public License. We use
-this license for certain libraries in order to permit linking those
-libraries into non-free programs.
-
- When a program is linked with a library, whether statically or using
-a shared library, the combination of the two is legally speaking a
-combined work, a derivative of the original library. The ordinary
-General Public License therefore permits such linking only if the
-entire combination fits its criteria of freedom. The Lesser General
-Public License permits more lax criteria for linking other code with
-the library.
-
- We call this license the "Lesser" General Public License because it
-does Less to protect the user's freedom than the ordinary General
-Public License. It also provides other free software developers Less
-of an advantage over competing non-free programs. These disadvantages
-are the reason we use the ordinary General Public License for many
-libraries. However, the Lesser license provides advantages in certain
-special circumstances.
-
- For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it becomes
-a de-facto standard. To achieve this, non-free programs must be
-allowed to use the library. A more frequent case is that a free
-library does the same job as widely used non-free libraries. In this
-case, there is little to gain by limiting the free library to free
-software only, so we use the Lesser General Public License.
-
- In other cases, permission to use a particular library in non-free
-programs enables a greater number of people to use a large body of
-free software. For example, permission to use the GNU C Library in
-non-free programs enables many more people to use the whole GNU
-operating system, as well as its variant, the GNU/Linux operating
-system.
-
- Although the Lesser General Public License is Less protective of the
-users' freedom, it does ensure that the user of a program that is
-linked with the Library has the freedom and the wherewithal to run
-that program using a modified version of the Library.
-
- The precise terms and conditions for copying, distribution and
-modification follow. Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library". The
-former contains code derived from the library, whereas the latter must
-be combined with the library in order to run.
-
- GNU LESSER GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License Agreement applies to any software library or other
-program which contains a notice placed by the copyright holder or
-other authorized party saying it may be distributed under the terms of
-this Lesser General Public License (also called "this License").
-Each licensee is addressed as "you".
-
- A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
- The "Library", below, refers to any such software library or work
-which has been distributed under these terms. A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language. (Hereinafter, translation is
-included without limitation in the term "modification".)
-
- "Source code" for a work means the preferred form of the work for
-making modifications to it. For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
- Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it). Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
- 1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
- You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
- 2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) The modified work must itself be a software library.
-
- b) You must cause the files modified to carry prominent notices
- stating that you changed the files and the date of any change.
-
- c) You must cause the whole of the work to be licensed at no
- charge to all third parties under the terms of this License.
-
- d) If a facility in the modified Library refers to a function or a
- table of data to be supplied by an application program that uses
- the facility, other than as an argument passed when the facility
- is invoked, then you must make a good faith effort to ensure that,
- in the event an application does not supply such function or
- table, the facility still operates, and performs whatever part of
- its purpose remains meaningful.
-
- (For example, a function in a library to compute square roots has
- a purpose that is entirely well-defined independent of the
- application. Therefore, Subsection 2d requires that any
- application-supplied function or table used by this function must
- be optional: if the application does not supply it, the square
- root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License. (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.) Do not make any other change in
-these notices.
-
- Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
- This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
- 4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
- If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library". Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
- However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library". The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
- When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library. The
-threshold for this to be true is not precisely defined by law.
-
- If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work. (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
- Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
- 6. As an exception to the Sections above, you may also combine or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
- You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License. You must supply a copy of this License. If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License. Also, you must do one
-of these things:
-
- a) Accompany the work with the complete corresponding
- machine-readable source code for the Library including whatever
- changes were used in the work (which must be distributed under
- Sections 1 and 2 above); and, if the work is an executable linked
- with the Library, with the complete machine-readable "work that
- uses the Library", as object code and/or source code, so that the
- user can modify the Library and then relink to produce a modified
- executable containing the modified Library. (It is understood
- that the user who changes the contents of definitions files in the
- Library will not necessarily be able to recompile the application
- to use the modified definitions.)
-
- b) Use a suitable shared library mechanism for linking with the
- Library. A suitable mechanism is one that (1) uses at run time a
- copy of the library already present on the user's computer system,
- rather than copying library functions into the executable, and (2)
- will operate properly with a modified version of the library, if
- the user installs one, as long as the modified version is
- interface-compatible with the version that the work was made with.
-
- c) Accompany the work with a written offer, valid for at
- least three years, to give the same user the materials
- specified in Subsection 6a, above, for a charge no more
- than the cost of performing this distribution.
-
- d) If distribution of the work is made by offering access to copy
- from a designated place, offer equivalent access to copy the above
- specified materials from the same place.
-
- e) Verify that the user has already received a copy of these
- materials or that you have already sent this user a copy.
-
- For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it. However, as a special exception,
-the materials to be distributed need not include anything that is
-normally distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
- It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system. Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
- 7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
- a) Accompany the combined library with a copy of the same work
- based on the Library, uncombined with any other library
- facilities. This must be distributed under the terms of the
- Sections above.
-
- b) Give prominent notice with the combined library of the fact
- that part of it is a work based on the Library, and explaining
- where to find the accompanying uncombined form of the same work.
-
- 8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License. However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
- 9. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Library or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
- 10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties with
-this License.
-
- 11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all. For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded. In such case, this License incorporates the limitation as if
-written in the body of this License.
-
- 13. The Free Software Foundation may publish revised and/or new
-versions of the Lesser General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation. If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
- 14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission. For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this. Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
- NO WARRANTY
-
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Libraries
-
- If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change. You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms of the
-ordinary General Public License).
-
- To apply these terms, attach the following notices to the library. It is
-safest to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
-
-
- Copyright (C)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-Also add information on how to contact you by electronic and paper mail.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the
- library `Frob' (a library for tweaking knobs) written by James Random Hacker.
-
- , 1 April 1990
- Ty Coon, President of Vice
-
-That's all there is to it!
-
-
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/__init__.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/__init__.py
deleted file mode 100644
index 953b399..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/__init__.py
+++ /dev/null
@@ -1,26 +0,0 @@
-######################## BEGIN LICENSE BLOCK ########################
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301 USA
-######################### END LICENSE BLOCK #########################
-
-__version__ = "2.0.1"
-
-def detect(aBuf):
- import universaldetector
- u = universaldetector.UniversalDetector()
- u.reset()
- u.feed(aBuf)
- u.close()
- return u.result
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/big5freq.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/big5freq.py
deleted file mode 100644
index c1b0f3c..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/big5freq.py
+++ /dev/null
@@ -1,923 +0,0 @@
-######################## BEGIN LICENSE BLOCK ########################
-# The Original Code is Mozilla Communicator client code.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 1998
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-# Mark Pilgrim - port to Python
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301 USA
-######################### END LICENSE BLOCK #########################
-
-# Big5 frequency table
-# by Taiwan's Mandarin Promotion Council
-#
-#
-# 128 --> 0.42261
-# 256 --> 0.57851
-# 512 --> 0.74851
-# 1024 --> 0.89384
-# 2048 --> 0.97583
-#
-# Ideal Distribution Ratio = 0.74851/(1-0.74851) =2.98
-# Random Distribution Ration = 512/(5401-512)=0.105
-#
-# Typical Distribution Ratio about 25% of Ideal one, still much higher than RDR
-
-BIG5_TYPICAL_DISTRIBUTION_RATIO = 0.75
-
-#Char to FreqOrder table
-BIG5_TABLE_SIZE = 5376
-
-Big5CharToFreqOrder = ( \
- 1,1801,1506, 255,1431, 198, 9, 82, 6,5008, 177, 202,3681,1256,2821, 110, # 16
-3814, 33,3274, 261, 76, 44,2114, 16,2946,2187,1176, 659,3971, 26,3451,2653, # 32
-1198,3972,3350,4202, 410,2215, 302, 590, 361,1964, 8, 204, 58,4510,5009,1932, # 48
- 63,5010,5011, 317,1614, 75, 222, 159,4203,2417,1480,5012,3555,3091, 224,2822, # 64
-3682, 3, 10,3973,1471, 29,2787,1135,2866,1940, 873, 130,3275,1123, 312,5013, # 80
-4511,2052, 507, 252, 682,5014, 142,1915, 124, 206,2947, 34,3556,3204, 64, 604, # 96
-5015,2501,1977,1978, 155,1991, 645, 641,1606,5016,3452, 337, 72, 406,5017, 80, # 112
- 630, 238,3205,1509, 263, 939,1092,2654, 756,1440,1094,3453, 449, 69,2987, 591, # 128
- 179,2096, 471, 115,2035,1844, 60, 50,2988, 134, 806,1869, 734,2036,3454, 180, # 144
- 995,1607, 156, 537,2907, 688,5018, 319,1305, 779,2145, 514,2379, 298,4512, 359, # 160
-2502, 90,2716,1338, 663, 11, 906,1099,2553, 20,2441, 182, 532,1716,5019, 732, # 176
-1376,4204,1311,1420,3206, 25,2317,1056, 113, 399, 382,1950, 242,3455,2474, 529, # 192
-3276, 475,1447,3683,5020, 117, 21, 656, 810,1297,2300,2334,3557,5021, 126,4205, # 208
- 706, 456, 150, 613,4513, 71,1118,2037,4206, 145,3092, 85, 835, 486,2115,1246, # 224
-1426, 428, 727,1285,1015, 800, 106, 623, 303,1281,5022,2128,2359, 347,3815, 221, # 240
-3558,3135,5023,1956,1153,4207, 83, 296,1199,3093, 192, 624, 93,5024, 822,1898, # 256
-2823,3136, 795,2065, 991,1554,1542,1592, 27, 43,2867, 859, 139,1456, 860,4514, # 272
- 437, 712,3974, 164,2397,3137, 695, 211,3037,2097, 195,3975,1608,3559,3560,3684, # 288
-3976, 234, 811,2989,2098,3977,2233,1441,3561,1615,2380, 668,2077,1638, 305, 228, # 304
-1664,4515, 467, 415,5025, 262,2099,1593, 239, 108, 300, 200,1033, 512,1247,2078, # 320
-5026,5027,2176,3207,3685,2682, 593, 845,1062,3277, 88,1723,2038,3978,1951, 212, # 336
- 266, 152, 149, 468,1899,4208,4516, 77, 187,5028,3038, 37, 5,2990,5029,3979, # 352
-5030,5031, 39,2524,4517,2908,3208,2079, 55, 148, 74,4518, 545, 483,1474,1029, # 368
-1665, 217,1870,1531,3138,1104,2655,4209, 24, 172,3562, 900,3980,3563,3564,4519, # 384
- 32,1408,2824,1312, 329, 487,2360,2251,2717, 784,2683, 4,3039,3351,1427,1789, # 400
- 188, 109, 499,5032,3686,1717,1790, 888,1217,3040,4520,5033,3565,5034,3352,1520, # 416
-3687,3981, 196,1034, 775,5035,5036, 929,1816, 249, 439, 38,5037,1063,5038, 794, # 432
-3982,1435,2301, 46, 178,3278,2066,5039,2381,5040, 214,1709,4521, 804, 35, 707, # 448
- 324,3688,1601,2554, 140, 459,4210,5041,5042,1365, 839, 272, 978,2262,2580,3456, # 464
-2129,1363,3689,1423, 697, 100,3094, 48, 70,1231, 495,3139,2196,5043,1294,5044, # 480
-2080, 462, 586,1042,3279, 853, 256, 988, 185,2382,3457,1698, 434,1084,5045,3458, # 496
- 314,2625,2788,4522,2335,2336, 569,2285, 637,1817,2525, 757,1162,1879,1616,3459, # 512
- 287,1577,2116, 768,4523,1671,2868,3566,2526,1321,3816, 909,2418,5046,4211, 933, # 528
-3817,4212,2053,2361,1222,4524, 765,2419,1322, 786,4525,5047,1920,1462,1677,2909, # 544
-1699,5048,4526,1424,2442,3140,3690,2600,3353,1775,1941,3460,3983,4213, 309,1369, # 560
-1130,2825, 364,2234,1653,1299,3984,3567,3985,3986,2656, 525,1085,3041, 902,2001, # 576
-1475, 964,4527, 421,1845,1415,1057,2286, 940,1364,3141, 376,4528,4529,1381, 7, # 592
-2527, 983,2383, 336,1710,2684,1846, 321,3461, 559,1131,3042,2752,1809,1132,1313, # 608
- 265,1481,1858,5049, 352,1203,2826,3280, 167,1089, 420,2827, 776, 792,1724,3568, # 624
-4214,2443,3281,5050,4215,5051, 446, 229, 333,2753, 901,3818,1200,1557,4530,2657, # 640
-1921, 395,2754,2685,3819,4216,1836, 125, 916,3209,2626,4531,5052,5053,3820,5054, # 656
-5055,5056,4532,3142,3691,1133,2555,1757,3462,1510,2318,1409,3569,5057,2146, 438, # 672
-2601,2910,2384,3354,1068, 958,3043, 461, 311,2869,2686,4217,1916,3210,4218,1979, # 688
- 383, 750,2755,2627,4219, 274, 539, 385,1278,1442,5058,1154,1965, 384, 561, 210, # 704
- 98,1295,2556,3570,5059,1711,2420,1482,3463,3987,2911,1257, 129,5060,3821, 642, # 720
- 523,2789,2790,2658,5061, 141,2235,1333, 68, 176, 441, 876, 907,4220, 603,2602, # 736
- 710, 171,3464, 404, 549, 18,3143,2398,1410,3692,1666,5062,3571,4533,2912,4534, # 752
-5063,2991, 368,5064, 146, 366, 99, 871,3693,1543, 748, 807,1586,1185, 22,2263, # 768
- 379,3822,3211,5065,3212, 505,1942,2628,1992,1382,2319,5066, 380,2362, 218, 702, # 784
-1818,1248,3465,3044,3572,3355,3282,5067,2992,3694, 930,3283,3823,5068, 59,5069, # 800
- 585, 601,4221, 497,3466,1112,1314,4535,1802,5070,1223,1472,2177,5071, 749,1837, # 816
- 690,1900,3824,1773,3988,1476, 429,1043,1791,2236,2117, 917,4222, 447,1086,1629, # 832
-5072, 556,5073,5074,2021,1654, 844,1090, 105, 550, 966,1758,2828,1008,1783, 686, # 848
-1095,5075,2287, 793,1602,5076,3573,2603,4536,4223,2948,2302,4537,3825, 980,2503, # 864
- 544, 353, 527,4538, 908,2687,2913,5077, 381,2629,1943,1348,5078,1341,1252, 560, # 880
-3095,5079,3467,2870,5080,2054, 973, 886,2081, 143,4539,5081,5082, 157,3989, 496, # 896
-4224, 57, 840, 540,2039,4540,4541,3468,2118,1445, 970,2264,1748,1966,2082,4225, # 912
-3144,1234,1776,3284,2829,3695, 773,1206,2130,1066,2040,1326,3990,1738,1725,4226, # 928
- 279,3145, 51,1544,2604, 423,1578,2131,2067, 173,4542,1880,5083,5084,1583, 264, # 944
- 610,3696,4543,2444, 280, 154,5085,5086,5087,1739, 338,1282,3096, 693,2871,1411, # 960
-1074,3826,2445,5088,4544,5089,5090,1240, 952,2399,5091,2914,1538,2688, 685,1483, # 976
-4227,2475,1436, 953,4228,2055,4545, 671,2400, 79,4229,2446,3285, 608, 567,2689, # 992
-3469,4230,4231,1691, 393,1261,1792,2401,5092,4546,5093,5094,5095,5096,1383,1672, # 1008
-3827,3213,1464, 522,1119, 661,1150, 216, 675,4547,3991,1432,3574, 609,4548,2690, # 1024
-2402,5097,5098,5099,4232,3045, 0,5100,2476, 315, 231,2447, 301,3356,4549,2385, # 1040
-5101, 233,4233,3697,1819,4550,4551,5102, 96,1777,1315,2083,5103, 257,5104,1810, # 1056
-3698,2718,1139,1820,4234,2022,1124,2164,2791,1778,2659,5105,3097, 363,1655,3214, # 1072
-5106,2993,5107,5108,5109,3992,1567,3993, 718, 103,3215, 849,1443, 341,3357,2949, # 1088
-1484,5110,1712, 127, 67, 339,4235,2403, 679,1412, 821,5111,5112, 834, 738, 351, # 1104
-2994,2147, 846, 235,1497,1881, 418,1993,3828,2719, 186,1100,2148,2756,3575,1545, # 1120
-1355,2950,2872,1377, 583,3994,4236,2581,2995,5113,1298,3699,1078,2557,3700,2363, # 1136
- 78,3829,3830, 267,1289,2100,2002,1594,4237, 348, 369,1274,2197,2178,1838,4552, # 1152
-1821,2830,3701,2757,2288,2003,4553,2951,2758, 144,3358, 882,4554,3995,2759,3470, # 1168
-4555,2915,5114,4238,1726, 320,5115,3996,3046, 788,2996,5116,2831,1774,1327,2873, # 1184
-3997,2832,5117,1306,4556,2004,1700,3831,3576,2364,2660, 787,2023, 506, 824,3702, # 1200
- 534, 323,4557,1044,3359,2024,1901, 946,3471,5118,1779,1500,1678,5119,1882,4558, # 1216
- 165, 243,4559,3703,2528, 123, 683,4239, 764,4560, 36,3998,1793, 589,2916, 816, # 1232
- 626,1667,3047,2237,1639,1555,1622,3832,3999,5120,4000,2874,1370,1228,1933, 891, # 1248
-2084,2917, 304,4240,5121, 292,2997,2720,3577, 691,2101,4241,1115,4561, 118, 662, # 1264
-5122, 611,1156, 854,2386,1316,2875, 2, 386, 515,2918,5123,5124,3286, 868,2238, # 1280
-1486, 855,2661, 785,2216,3048,5125,1040,3216,3578,5126,3146, 448,5127,1525,5128, # 1296
-2165,4562,5129,3833,5130,4242,2833,3579,3147, 503, 818,4001,3148,1568, 814, 676, # 1312
-1444, 306,1749,5131,3834,1416,1030, 197,1428, 805,2834,1501,4563,5132,5133,5134, # 1328
-1994,5135,4564,5136,5137,2198, 13,2792,3704,2998,3149,1229,1917,5138,3835,2132, # 1344
-5139,4243,4565,2404,3580,5140,2217,1511,1727,1120,5141,5142, 646,3836,2448, 307, # 1360
-5143,5144,1595,3217,5145,5146,5147,3705,1113,1356,4002,1465,2529,2530,5148, 519, # 1376
-5149, 128,2133, 92,2289,1980,5150,4003,1512, 342,3150,2199,5151,2793,2218,1981, # 1392
-3360,4244, 290,1656,1317, 789, 827,2365,5152,3837,4566, 562, 581,4004,5153, 401, # 1408
-4567,2252, 94,4568,5154,1399,2794,5155,1463,2025,4569,3218,1944,5156, 828,1105, # 1424
-4245,1262,1394,5157,4246, 605,4570,5158,1784,2876,5159,2835, 819,2102, 578,2200, # 1440
-2952,5160,1502, 436,3287,4247,3288,2836,4005,2919,3472,3473,5161,2721,2320,5162, # 1456
-5163,2337,2068, 23,4571, 193, 826,3838,2103, 699,1630,4248,3098, 390,1794,1064, # 1472
-3581,5164,1579,3099,3100,1400,5165,4249,1839,1640,2877,5166,4572,4573, 137,4250, # 1488
- 598,3101,1967, 780, 104, 974,2953,5167, 278, 899, 253, 402, 572, 504, 493,1339, # 1504
-5168,4006,1275,4574,2582,2558,5169,3706,3049,3102,2253, 565,1334,2722, 863, 41, # 1520
-5170,5171,4575,5172,1657,2338, 19, 463,2760,4251, 606,5173,2999,3289,1087,2085, # 1536
-1323,2662,3000,5174,1631,1623,1750,4252,2691,5175,2878, 791,2723,2663,2339, 232, # 1552
-2421,5176,3001,1498,5177,2664,2630, 755,1366,3707,3290,3151,2026,1609, 119,1918, # 1568
-3474, 862,1026,4253,5178,4007,3839,4576,4008,4577,2265,1952,2477,5179,1125, 817, # 1584
-4254,4255,4009,1513,1766,2041,1487,4256,3050,3291,2837,3840,3152,5180,5181,1507, # 1600
-5182,2692, 733, 40,1632,1106,2879, 345,4257, 841,2531, 230,4578,3002,1847,3292, # 1616
-3475,5183,1263, 986,3476,5184, 735, 879, 254,1137, 857, 622,1300,1180,1388,1562, # 1632
-4010,4011,2954, 967,2761,2665,1349, 592,2134,1692,3361,3003,1995,4258,1679,4012, # 1648
-1902,2188,5185, 739,3708,2724,1296,1290,5186,4259,2201,2202,1922,1563,2605,2559, # 1664
-1871,2762,3004,5187, 435,5188, 343,1108, 596, 17,1751,4579,2239,3477,3709,5189, # 1680
-4580, 294,3582,2955,1693, 477, 979, 281,2042,3583, 643,2043,3710,2631,2795,2266, # 1696
-1031,2340,2135,2303,3584,4581, 367,1249,2560,5190,3585,5191,4582,1283,3362,2005, # 1712
- 240,1762,3363,4583,4584, 836,1069,3153, 474,5192,2149,2532, 268,3586,5193,3219, # 1728
-1521,1284,5194,1658,1546,4260,5195,3587,3588,5196,4261,3364,2693,1685,4262, 961, # 1744
-1673,2632, 190,2006,2203,3841,4585,4586,5197, 570,2504,3711,1490,5198,4587,2633, # 1760
-3293,1957,4588, 584,1514, 396,1045,1945,5199,4589,1968,2449,5200,5201,4590,4013, # 1776
- 619,5202,3154,3294, 215,2007,2796,2561,3220,4591,3221,4592, 763,4263,3842,4593, # 1792
-5203,5204,1958,1767,2956,3365,3712,1174, 452,1477,4594,3366,3155,5205,2838,1253, # 1808
-2387,2189,1091,2290,4264, 492,5206, 638,1169,1825,2136,1752,4014, 648, 926,1021, # 1824
-1324,4595, 520,4596, 997, 847,1007, 892,4597,3843,2267,1872,3713,2405,1785,4598, # 1840
-1953,2957,3103,3222,1728,4265,2044,3714,4599,2008,1701,3156,1551, 30,2268,4266, # 1856
-5207,2027,4600,3589,5208, 501,5209,4267, 594,3478,2166,1822,3590,3479,3591,3223, # 1872
- 829,2839,4268,5210,1680,3157,1225,4269,5211,3295,4601,4270,3158,2341,5212,4602, # 1888
-4271,5213,4015,4016,5214,1848,2388,2606,3367,5215,4603, 374,4017, 652,4272,4273, # 1904
- 375,1140, 798,5216,5217,5218,2366,4604,2269, 546,1659, 138,3051,2450,4605,5219, # 1920
-2254, 612,1849, 910, 796,3844,1740,1371, 825,3845,3846,5220,2920,2562,5221, 692, # 1936
- 444,3052,2634, 801,4606,4274,5222,1491, 244,1053,3053,4275,4276, 340,5223,4018, # 1952
-1041,3005, 293,1168, 87,1357,5224,1539, 959,5225,2240, 721, 694,4277,3847, 219, # 1968
-1478, 644,1417,3368,2666,1413,1401,1335,1389,4019,5226,5227,3006,2367,3159,1826, # 1984
- 730,1515, 184,2840, 66,4607,5228,1660,2958, 246,3369, 378,1457, 226,3480, 975, # 2000
-4020,2959,1264,3592, 674, 696,5229, 163,5230,1141,2422,2167, 713,3593,3370,4608, # 2016
-4021,5231,5232,1186, 15,5233,1079,1070,5234,1522,3224,3594, 276,1050,2725, 758, # 2032
-1126, 653,2960,3296,5235,2342, 889,3595,4022,3104,3007, 903,1250,4609,4023,3481, # 2048
-3596,1342,1681,1718, 766,3297, 286, 89,2961,3715,5236,1713,5237,2607,3371,3008, # 2064
-5238,2962,2219,3225,2880,5239,4610,2505,2533, 181, 387,1075,4024, 731,2190,3372, # 2080
-5240,3298, 310, 313,3482,2304, 770,4278, 54,3054, 189,4611,3105,3848,4025,5241, # 2096
-1230,1617,1850, 355,3597,4279,4612,3373, 111,4280,3716,1350,3160,3483,3055,4281, # 2112
-2150,3299,3598,5242,2797,4026,4027,3009, 722,2009,5243,1071, 247,1207,2343,2478, # 2128
-1378,4613,2010, 864,1437,1214,4614, 373,3849,1142,2220, 667,4615, 442,2763,2563, # 2144
-3850,4028,1969,4282,3300,1840, 837, 170,1107, 934,1336,1883,5244,5245,2119,4283, # 2160
-2841, 743,1569,5246,4616,4284, 582,2389,1418,3484,5247,1803,5248, 357,1395,1729, # 2176
-3717,3301,2423,1564,2241,5249,3106,3851,1633,4617,1114,2086,4285,1532,5250, 482, # 2192
-2451,4618,5251,5252,1492, 833,1466,5253,2726,3599,1641,2842,5254,1526,1272,3718, # 2208
-4286,1686,1795, 416,2564,1903,1954,1804,5255,3852,2798,3853,1159,2321,5256,2881, # 2224
-4619,1610,1584,3056,2424,2764, 443,3302,1163,3161,5257,5258,4029,5259,4287,2506, # 2240
-3057,4620,4030,3162,2104,1647,3600,2011,1873,4288,5260,4289, 431,3485,5261, 250, # 2256
- 97, 81,4290,5262,1648,1851,1558, 160, 848,5263, 866, 740,1694,5264,2204,2843, # 2272
-3226,4291,4621,3719,1687, 950,2479, 426, 469,3227,3720,3721,4031,5265,5266,1188, # 2288
- 424,1996, 861,3601,4292,3854,2205,2694, 168,1235,3602,4293,5267,2087,1674,4622, # 2304
-3374,3303, 220,2565,1009,5268,3855, 670,3010, 332,1208, 717,5269,5270,3603,2452, # 2320
-4032,3375,5271, 513,5272,1209,2882,3376,3163,4623,1080,5273,5274,5275,5276,2534, # 2336
-3722,3604, 815,1587,4033,4034,5277,3605,3486,3856,1254,4624,1328,3058,1390,4035, # 2352
-1741,4036,3857,4037,5278, 236,3858,2453,3304,5279,5280,3723,3859,1273,3860,4625, # 2368
-5281, 308,5282,4626, 245,4627,1852,2480,1307,2583, 430, 715,2137,2454,5283, 270, # 2384
- 199,2883,4038,5284,3606,2727,1753, 761,1754, 725,1661,1841,4628,3487,3724,5285, # 2400
-5286, 587, 14,3305, 227,2608, 326, 480,2270, 943,2765,3607, 291, 650,1884,5287, # 2416
-1702,1226, 102,1547, 62,3488, 904,4629,3489,1164,4294,5288,5289,1224,1548,2766, # 2432
- 391, 498,1493,5290,1386,1419,5291,2056,1177,4630, 813, 880,1081,2368, 566,1145, # 2448
-4631,2291,1001,1035,2566,2609,2242, 394,1286,5292,5293,2069,5294, 86,1494,1730, # 2464
-4039, 491,1588, 745, 897,2963, 843,3377,4040,2767,2884,3306,1768, 998,2221,2070, # 2480
- 397,1827,1195,1970,3725,3011,3378, 284,5295,3861,2507,2138,2120,1904,5296,4041, # 2496
-2151,4042,4295,1036,3490,1905, 114,2567,4296, 209,1527,5297,5298,2964,2844,2635, # 2512
-2390,2728,3164, 812,2568,5299,3307,5300,1559, 737,1885,3726,1210, 885, 28,2695, # 2528
-3608,3862,5301,4297,1004,1780,4632,5302, 346,1982,2222,2696,4633,3863,1742, 797, # 2544
-1642,4043,1934,1072,1384,2152, 896,4044,3308,3727,3228,2885,3609,5303,2569,1959, # 2560
-4634,2455,1786,5304,5305,5306,4045,4298,1005,1308,3728,4299,2729,4635,4636,1528, # 2576
-2610, 161,1178,4300,1983, 987,4637,1101,4301, 631,4046,1157,3229,2425,1343,1241, # 2592
-1016,2243,2570, 372, 877,2344,2508,1160, 555,1935, 911,4047,5307, 466,1170, 169, # 2608
-1051,2921,2697,3729,2481,3012,1182,2012,2571,1251,2636,5308, 992,2345,3491,1540, # 2624
-2730,1201,2071,2406,1997,2482,5309,4638, 528,1923,2191,1503,1874,1570,2369,3379, # 2640
-3309,5310, 557,1073,5311,1828,3492,2088,2271,3165,3059,3107, 767,3108,2799,4639, # 2656
-1006,4302,4640,2346,1267,2179,3730,3230, 778,4048,3231,2731,1597,2667,5312,4641, # 2672
-5313,3493,5314,5315,5316,3310,2698,1433,3311, 131, 95,1504,4049, 723,4303,3166, # 2688
-1842,3610,2768,2192,4050,2028,2105,3731,5317,3013,4051,1218,5318,3380,3232,4052, # 2704
-4304,2584, 248,1634,3864, 912,5319,2845,3732,3060,3865, 654, 53,5320,3014,5321, # 2720
-1688,4642, 777,3494,1032,4053,1425,5322, 191, 820,2121,2846, 971,4643, 931,3233, # 2736
- 135, 664, 783,3866,1998, 772,2922,1936,4054,3867,4644,2923,3234, 282,2732, 640, # 2752
-1372,3495,1127, 922, 325,3381,5323,5324, 711,2045,5325,5326,4055,2223,2800,1937, # 2768
-4056,3382,2224,2255,3868,2305,5327,4645,3869,1258,3312,4057,3235,2139,2965,4058, # 2784
-4059,5328,2225, 258,3236,4646, 101,1227,5329,3313,1755,5330,1391,3314,5331,2924, # 2800
-2057, 893,5332,5333,5334,1402,4305,2347,5335,5336,3237,3611,5337,5338, 878,1325, # 2816
-1781,2801,4647, 259,1385,2585, 744,1183,2272,4648,5339,4060,2509,5340, 684,1024, # 2832
-4306,5341, 472,3612,3496,1165,3315,4061,4062, 322,2153, 881, 455,1695,1152,1340, # 2848
- 660, 554,2154,4649,1058,4650,4307, 830,1065,3383,4063,4651,1924,5342,1703,1919, # 2864
-5343, 932,2273, 122,5344,4652, 947, 677,5345,3870,2637, 297,1906,1925,2274,4653, # 2880
-2322,3316,5346,5347,4308,5348,4309, 84,4310, 112, 989,5349, 547,1059,4064, 701, # 2896
-3613,1019,5350,4311,5351,3497, 942, 639, 457,2306,2456, 993,2966, 407, 851, 494, # 2912
-4654,3384, 927,5352,1237,5353,2426,3385, 573,4312, 680, 921,2925,1279,1875, 285, # 2928
- 790,1448,1984, 719,2168,5354,5355,4655,4065,4066,1649,5356,1541, 563,5357,1077, # 2944
-5358,3386,3061,3498, 511,3015,4067,4068,3733,4069,1268,2572,3387,3238,4656,4657, # 2960
-5359, 535,1048,1276,1189,2926,2029,3167,1438,1373,2847,2967,1134,2013,5360,4313, # 2976
-1238,2586,3109,1259,5361, 700,5362,2968,3168,3734,4314,5363,4315,1146,1876,1907, # 2992
-4658,2611,4070, 781,2427, 132,1589, 203, 147, 273,2802,2407, 898,1787,2155,4071, # 3008
-4072,5364,3871,2803,5365,5366,4659,4660,5367,3239,5368,1635,3872, 965,5369,1805, # 3024
-2699,1516,3614,1121,1082,1329,3317,4073,1449,3873, 65,1128,2848,2927,2769,1590, # 3040
-3874,5370,5371, 12,2668, 45, 976,2587,3169,4661, 517,2535,1013,1037,3240,5372, # 3056
-3875,2849,5373,3876,5374,3499,5375,2612, 614,1999,2323,3877,3110,2733,2638,5376, # 3072
-2588,4316, 599,1269,5377,1811,3735,5378,2700,3111, 759,1060, 489,1806,3388,3318, # 3088
-1358,5379,5380,2391,1387,1215,2639,2256, 490,5381,5382,4317,1759,2392,2348,5383, # 3104
-4662,3878,1908,4074,2640,1807,3241,4663,3500,3319,2770,2349, 874,5384,5385,3501, # 3120
-3736,1859, 91,2928,3737,3062,3879,4664,5386,3170,4075,2669,5387,3502,1202,1403, # 3136
-3880,2969,2536,1517,2510,4665,3503,2511,5388,4666,5389,2701,1886,1495,1731,4076, # 3152
-2370,4667,5390,2030,5391,5392,4077,2702,1216, 237,2589,4318,2324,4078,3881,4668, # 3168
-4669,2703,3615,3504, 445,4670,5393,5394,5395,5396,2771, 61,4079,3738,1823,4080, # 3184
-5397, 687,2046, 935, 925, 405,2670, 703,1096,1860,2734,4671,4081,1877,1367,2704, # 3200
-3389, 918,2106,1782,2483, 334,3320,1611,1093,4672, 564,3171,3505,3739,3390, 945, # 3216
-2641,2058,4673,5398,1926, 872,4319,5399,3506,2705,3112, 349,4320,3740,4082,4674, # 3232
-3882,4321,3741,2156,4083,4675,4676,4322,4677,2408,2047, 782,4084, 400, 251,4323, # 3248
-1624,5400,5401, 277,3742, 299,1265, 476,1191,3883,2122,4324,4325,1109, 205,5402, # 3264
-2590,1000,2157,3616,1861,5403,5404,5405,4678,5406,4679,2573, 107,2484,2158,4085, # 3280
-3507,3172,5407,1533, 541,1301, 158, 753,4326,2886,3617,5408,1696, 370,1088,4327, # 3296
-4680,3618, 579, 327, 440, 162,2244, 269,1938,1374,3508, 968,3063, 56,1396,3113, # 3312
-2107,3321,3391,5409,1927,2159,4681,3016,5410,3619,5411,5412,3743,4682,2485,5413, # 3328
-2804,5414,1650,4683,5415,2613,5416,5417,4086,2671,3392,1149,3393,4087,3884,4088, # 3344
-5418,1076, 49,5419, 951,3242,3322,3323, 450,2850, 920,5420,1812,2805,2371,4328, # 3360
-1909,1138,2372,3885,3509,5421,3243,4684,1910,1147,1518,2428,4685,3886,5422,4686, # 3376
-2393,2614, 260,1796,3244,5423,5424,3887,3324, 708,5425,3620,1704,5426,3621,1351, # 3392
-1618,3394,3017,1887, 944,4329,3395,4330,3064,3396,4331,5427,3744, 422, 413,1714, # 3408
-3325, 500,2059,2350,4332,2486,5428,1344,1911, 954,5429,1668,5430,5431,4089,2409, # 3424
-4333,3622,3888,4334,5432,2307,1318,2512,3114, 133,3115,2887,4687, 629, 31,2851, # 3440
-2706,3889,4688, 850, 949,4689,4090,2970,1732,2089,4335,1496,1853,5433,4091, 620, # 3456
-3245, 981,1242,3745,3397,1619,3746,1643,3326,2140,2457,1971,1719,3510,2169,5434, # 3472
-3246,5435,5436,3398,1829,5437,1277,4690,1565,2048,5438,1636,3623,3116,5439, 869, # 3488
-2852, 655,3890,3891,3117,4092,3018,3892,1310,3624,4691,5440,5441,5442,1733, 558, # 3504
-4692,3747, 335,1549,3065,1756,4336,3748,1946,3511,1830,1291,1192, 470,2735,2108, # 3520
-2806, 913,1054,4093,5443,1027,5444,3066,4094,4693, 982,2672,3399,3173,3512,3247, # 3536
-3248,1947,2807,5445, 571,4694,5446,1831,5447,3625,2591,1523,2429,5448,2090, 984, # 3552
-4695,3749,1960,5449,3750, 852, 923,2808,3513,3751, 969,1519, 999,2049,2325,1705, # 3568
-5450,3118, 615,1662, 151, 597,4095,2410,2326,1049, 275,4696,3752,4337, 568,3753, # 3584
-3626,2487,4338,3754,5451,2430,2275, 409,3249,5452,1566,2888,3514,1002, 769,2853, # 3600
- 194,2091,3174,3755,2226,3327,4339, 628,1505,5453,5454,1763,2180,3019,4096, 521, # 3616
-1161,2592,1788,2206,2411,4697,4097,1625,4340,4341, 412, 42,3119, 464,5455,2642, # 3632
-4698,3400,1760,1571,2889,3515,2537,1219,2207,3893,2643,2141,2373,4699,4700,3328, # 3648
-1651,3401,3627,5456,5457,3628,2488,3516,5458,3756,5459,5460,2276,2092, 460,5461, # 3664
-4701,5462,3020, 962, 588,3629, 289,3250,2644,1116, 52,5463,3067,1797,5464,5465, # 3680
-5466,1467,5467,1598,1143,3757,4342,1985,1734,1067,4702,1280,3402, 465,4703,1572, # 3696
- 510,5468,1928,2245,1813,1644,3630,5469,4704,3758,5470,5471,2673,1573,1534,5472, # 3712
-5473, 536,1808,1761,3517,3894,3175,2645,5474,5475,5476,4705,3518,2929,1912,2809, # 3728
-5477,3329,1122, 377,3251,5478, 360,5479,5480,4343,1529, 551,5481,2060,3759,1769, # 3744
-2431,5482,2930,4344,3330,3120,2327,2109,2031,4706,1404, 136,1468,1479, 672,1171, # 3760
-3252,2308, 271,3176,5483,2772,5484,2050, 678,2736, 865,1948,4707,5485,2014,4098, # 3776
-2971,5486,2737,2227,1397,3068,3760,4708,4709,1735,2931,3403,3631,5487,3895, 509, # 3792
-2854,2458,2890,3896,5488,5489,3177,3178,4710,4345,2538,4711,2309,1166,1010, 552, # 3808
- 681,1888,5490,5491,2972,2973,4099,1287,1596,1862,3179, 358, 453, 736, 175, 478, # 3824
-1117, 905,1167,1097,5492,1854,1530,5493,1706,5494,2181,3519,2292,3761,3520,3632, # 3840
-4346,2093,4347,5495,3404,1193,2489,4348,1458,2193,2208,1863,1889,1421,3331,2932, # 3856
-3069,2182,3521, 595,2123,5496,4100,5497,5498,4349,1707,2646, 223,3762,1359, 751, # 3872
-3121, 183,3522,5499,2810,3021, 419,2374, 633, 704,3897,2394, 241,5500,5501,5502, # 3888
- 838,3022,3763,2277,2773,2459,3898,1939,2051,4101,1309,3122,2246,1181,5503,1136, # 3904
-2209,3899,2375,1446,4350,2310,4712,5504,5505,4351,1055,2615, 484,3764,5506,4102, # 3920
- 625,4352,2278,3405,1499,4353,4103,5507,4104,4354,3253,2279,2280,3523,5508,5509, # 3936
-2774, 808,2616,3765,3406,4105,4355,3123,2539, 526,3407,3900,4356, 955,5510,1620, # 3952
-4357,2647,2432,5511,1429,3766,1669,1832, 994, 928,5512,3633,1260,5513,5514,5515, # 3968
-1949,2293, 741,2933,1626,4358,2738,2460, 867,1184, 362,3408,1392,5516,5517,4106, # 3984
-4359,1770,1736,3254,2934,4713,4714,1929,2707,1459,1158,5518,3070,3409,2891,1292, # 4000
-1930,2513,2855,3767,1986,1187,2072,2015,2617,4360,5519,2574,2514,2170,3768,2490, # 4016
-3332,5520,3769,4715,5521,5522, 666,1003,3023,1022,3634,4361,5523,4716,1814,2257, # 4032
- 574,3901,1603, 295,1535, 705,3902,4362, 283, 858, 417,5524,5525,3255,4717,4718, # 4048
-3071,1220,1890,1046,2281,2461,4107,1393,1599, 689,2575, 388,4363,5526,2491, 802, # 4064
-5527,2811,3903,2061,1405,2258,5528,4719,3904,2110,1052,1345,3256,1585,5529, 809, # 4080
-5530,5531,5532, 575,2739,3524, 956,1552,1469,1144,2328,5533,2329,1560,2462,3635, # 4096
-3257,4108, 616,2210,4364,3180,2183,2294,5534,1833,5535,3525,4720,5536,1319,3770, # 4112
-3771,1211,3636,1023,3258,1293,2812,5537,5538,5539,3905, 607,2311,3906, 762,2892, # 4128
-1439,4365,1360,4721,1485,3072,5540,4722,1038,4366,1450,2062,2648,4367,1379,4723, # 4144
-2593,5541,5542,4368,1352,1414,2330,2935,1172,5543,5544,3907,3908,4724,1798,1451, # 4160
-5545,5546,5547,5548,2936,4109,4110,2492,2351, 411,4111,4112,3637,3333,3124,4725, # 4176
-1561,2674,1452,4113,1375,5549,5550, 47,2974, 316,5551,1406,1591,2937,3181,5552, # 4192
-1025,2142,3125,3182, 354,2740, 884,2228,4369,2412, 508,3772, 726,3638, 996,2433, # 4208
-3639, 729,5553, 392,2194,1453,4114,4726,3773,5554,5555,2463,3640,2618,1675,2813, # 4224
- 919,2352,2975,2353,1270,4727,4115, 73,5556,5557, 647,5558,3259,2856,2259,1550, # 4240
-1346,3024,5559,1332, 883,3526,5560,5561,5562,5563,3334,2775,5564,1212, 831,1347, # 4256
-4370,4728,2331,3909,1864,3073, 720,3910,4729,4730,3911,5565,4371,5566,5567,4731, # 4272
-5568,5569,1799,4732,3774,2619,4733,3641,1645,2376,4734,5570,2938, 669,2211,2675, # 4288
-2434,5571,2893,5572,5573,1028,3260,5574,4372,2413,5575,2260,1353,5576,5577,4735, # 4304
-3183, 518,5578,4116,5579,4373,1961,5580,2143,4374,5581,5582,3025,2354,2355,3912, # 4320
- 516,1834,1454,4117,2708,4375,4736,2229,2620,1972,1129,3642,5583,2776,5584,2976, # 4336
-1422, 577,1470,3026,1524,3410,5585,5586, 432,4376,3074,3527,5587,2594,1455,2515, # 4352
-2230,1973,1175,5588,1020,2741,4118,3528,4737,5589,2742,5590,1743,1361,3075,3529, # 4368
-2649,4119,4377,4738,2295, 895, 924,4378,2171, 331,2247,3076, 166,1627,3077,1098, # 4384
-5591,1232,2894,2231,3411,4739, 657, 403,1196,2377, 542,3775,3412,1600,4379,3530, # 4400
-5592,4740,2777,3261, 576, 530,1362,4741,4742,2540,2676,3776,4120,5593, 842,3913, # 4416
-5594,2814,2032,1014,4121, 213,2709,3413, 665, 621,4380,5595,3777,2939,2435,5596, # 4432
-2436,3335,3643,3414,4743,4381,2541,4382,4744,3644,1682,4383,3531,1380,5597, 724, # 4448
-2282, 600,1670,5598,1337,1233,4745,3126,2248,5599,1621,4746,5600, 651,4384,5601, # 4464
-1612,4385,2621,5602,2857,5603,2743,2312,3078,5604, 716,2464,3079, 174,1255,2710, # 4480
-4122,3645, 548,1320,1398, 728,4123,1574,5605,1891,1197,3080,4124,5606,3081,3082, # 4496
-3778,3646,3779, 747,5607, 635,4386,4747,5608,5609,5610,4387,5611,5612,4748,5613, # 4512
-3415,4749,2437, 451,5614,3780,2542,2073,4388,2744,4389,4125,5615,1764,4750,5616, # 4528
-4390, 350,4751,2283,2395,2493,5617,4391,4126,2249,1434,4127, 488,4752, 458,4392, # 4544
-4128,3781, 771,1330,2396,3914,2576,3184,2160,2414,1553,2677,3185,4393,5618,2494, # 4560
-2895,2622,1720,2711,4394,3416,4753,5619,2543,4395,5620,3262,4396,2778,5621,2016, # 4576
-2745,5622,1155,1017,3782,3915,5623,3336,2313, 201,1865,4397,1430,5624,4129,5625, # 4592
-5626,5627,5628,5629,4398,1604,5630, 414,1866, 371,2595,4754,4755,3532,2017,3127, # 4608
-4756,1708, 960,4399, 887, 389,2172,1536,1663,1721,5631,2232,4130,2356,2940,1580, # 4624
-5632,5633,1744,4757,2544,4758,4759,5634,4760,5635,2074,5636,4761,3647,3417,2896, # 4640
-4400,5637,4401,2650,3418,2815, 673,2712,2465, 709,3533,4131,3648,4402,5638,1148, # 4656
- 502, 634,5639,5640,1204,4762,3649,1575,4763,2623,3783,5641,3784,3128, 948,3263, # 4672
- 121,1745,3916,1110,5642,4403,3083,2516,3027,4132,3785,1151,1771,3917,1488,4133, # 4688
-1987,5643,2438,3534,5644,5645,2094,5646,4404,3918,1213,1407,2816, 531,2746,2545, # 4704
-3264,1011,1537,4764,2779,4405,3129,1061,5647,3786,3787,1867,2897,5648,2018, 120, # 4720
-4406,4407,2063,3650,3265,2314,3919,2678,3419,1955,4765,4134,5649,3535,1047,2713, # 4736
-1266,5650,1368,4766,2858, 649,3420,3920,2546,2747,1102,2859,2679,5651,5652,2000, # 4752
-5653,1111,3651,2977,5654,2495,3921,3652,2817,1855,3421,3788,5655,5656,3422,2415, # 4768
-2898,3337,3266,3653,5657,2577,5658,3654,2818,4135,1460, 856,5659,3655,5660,2899, # 4784
-2978,5661,2900,3922,5662,4408, 632,2517, 875,3923,1697,3924,2296,5663,5664,4767, # 4800
-3028,1239, 580,4768,4409,5665, 914, 936,2075,1190,4136,1039,2124,5666,5667,5668, # 4816
-5669,3423,1473,5670,1354,4410,3925,4769,2173,3084,4137, 915,3338,4411,4412,3339, # 4832
-1605,1835,5671,2748, 398,3656,4413,3926,4138, 328,1913,2860,4139,3927,1331,4414, # 4848
-3029, 937,4415,5672,3657,4140,4141,3424,2161,4770,3425, 524, 742, 538,3085,1012, # 4864
-5673,5674,3928,2466,5675, 658,1103, 225,3929,5676,5677,4771,5678,4772,5679,3267, # 4880
-1243,5680,4142, 963,2250,4773,5681,2714,3658,3186,5682,5683,2596,2332,5684,4774, # 4896
-5685,5686,5687,3536, 957,3426,2547,2033,1931,2941,2467, 870,2019,3659,1746,2780, # 4912
-2781,2439,2468,5688,3930,5689,3789,3130,3790,3537,3427,3791,5690,1179,3086,5691, # 4928
-3187,2378,4416,3792,2548,3188,3131,2749,4143,5692,3428,1556,2549,2297, 977,2901, # 4944
-2034,4144,1205,3429,5693,1765,3430,3189,2125,1271, 714,1689,4775,3538,5694,2333, # 4960
-3931, 533,4417,3660,2184, 617,5695,2469,3340,3539,2315,5696,5697,3190,5698,5699, # 4976
-3932,1988, 618, 427,2651,3540,3431,5700,5701,1244,1690,5702,2819,4418,4776,5703, # 4992
-3541,4777,5704,2284,1576, 473,3661,4419,3432, 972,5705,3662,5706,3087,5707,5708, # 5008
-4778,4779,5709,3793,4145,4146,5710, 153,4780, 356,5711,1892,2902,4420,2144, 408, # 5024
- 803,2357,5712,3933,5713,4421,1646,2578,2518,4781,4782,3934,5714,3935,4422,5715, # 5040
-2416,3433, 752,5716,5717,1962,3341,2979,5718, 746,3030,2470,4783,4423,3794, 698, # 5056
-4784,1893,4424,3663,2550,4785,3664,3936,5719,3191,3434,5720,1824,1302,4147,2715, # 5072
-3937,1974,4425,5721,4426,3192, 823,1303,1288,1236,2861,3542,4148,3435, 774,3938, # 5088
-5722,1581,4786,1304,2862,3939,4787,5723,2440,2162,1083,3268,4427,4149,4428, 344, # 5104
-1173, 288,2316, 454,1683,5724,5725,1461,4788,4150,2597,5726,5727,4789, 985, 894, # 5120
-5728,3436,3193,5729,1914,2942,3795,1989,5730,2111,1975,5731,4151,5732,2579,1194, # 5136
- 425,5733,4790,3194,1245,3796,4429,5734,5735,2863,5736, 636,4791,1856,3940, 760, # 5152
-1800,5737,4430,2212,1508,4792,4152,1894,1684,2298,5738,5739,4793,4431,4432,2213, # 5168
- 479,5740,5741, 832,5742,4153,2496,5743,2980,2497,3797, 990,3132, 627,1815,2652, # 5184
-4433,1582,4434,2126,2112,3543,4794,5744, 799,4435,3195,5745,4795,2113,1737,3031, # 5200
-1018, 543, 754,4436,3342,1676,4796,4797,4154,4798,1489,5746,3544,5747,2624,2903, # 5216
-4155,5748,5749,2981,5750,5751,5752,5753,3196,4799,4800,2185,1722,5754,3269,3270, # 5232
-1843,3665,1715, 481, 365,1976,1857,5755,5756,1963,2498,4801,5757,2127,3666,3271, # 5248
- 433,1895,2064,2076,5758, 602,2750,5759,5760,5761,5762,5763,3032,1628,3437,5764, # 5264
-3197,4802,4156,2904,4803,2519,5765,2551,2782,5766,5767,5768,3343,4804,2905,5769, # 5280
-4805,5770,2864,4806,4807,1221,2982,4157,2520,5771,5772,5773,1868,1990,5774,5775, # 5296
-5776,1896,5777,5778,4808,1897,4158, 318,5779,2095,4159,4437,5780,5781, 485,5782, # 5312
- 938,3941, 553,2680, 116,5783,3942,3667,5784,3545,2681,2783,3438,3344,2820,5785, # 5328
-3668,2943,4160,1747,2944,2983,5786,5787, 207,5788,4809,5789,4810,2521,5790,3033, # 5344
- 890,3669,3943,5791,1878,3798,3439,5792,2186,2358,3440,1652,5793,5794,5795, 941, # 5360
-2299, 208,3546,4161,2020, 330,4438,3944,2906,2499,3799,4439,4811,5796,5797,5798, # 5376 #last 512
-#Everything below is of no interest for detection purpose
-2522,1613,4812,5799,3345,3945,2523,5800,4162,5801,1637,4163,2471,4813,3946,5802, # 5392
-2500,3034,3800,5803,5804,2195,4814,5805,2163,5806,5807,5808,5809,5810,5811,5812, # 5408
-5813,5814,5815,5816,5817,5818,5819,5820,5821,5822,5823,5824,5825,5826,5827,5828, # 5424
-5829,5830,5831,5832,5833,5834,5835,5836,5837,5838,5839,5840,5841,5842,5843,5844, # 5440
-5845,5846,5847,5848,5849,5850,5851,5852,5853,5854,5855,5856,5857,5858,5859,5860, # 5456
-5861,5862,5863,5864,5865,5866,5867,5868,5869,5870,5871,5872,5873,5874,5875,5876, # 5472
-5877,5878,5879,5880,5881,5882,5883,5884,5885,5886,5887,5888,5889,5890,5891,5892, # 5488
-5893,5894,5895,5896,5897,5898,5899,5900,5901,5902,5903,5904,5905,5906,5907,5908, # 5504
-5909,5910,5911,5912,5913,5914,5915,5916,5917,5918,5919,5920,5921,5922,5923,5924, # 5520
-5925,5926,5927,5928,5929,5930,5931,5932,5933,5934,5935,5936,5937,5938,5939,5940, # 5536
-5941,5942,5943,5944,5945,5946,5947,5948,5949,5950,5951,5952,5953,5954,5955,5956, # 5552
-5957,5958,5959,5960,5961,5962,5963,5964,5965,5966,5967,5968,5969,5970,5971,5972, # 5568
-5973,5974,5975,5976,5977,5978,5979,5980,5981,5982,5983,5984,5985,5986,5987,5988, # 5584
-5989,5990,5991,5992,5993,5994,5995,5996,5997,5998,5999,6000,6001,6002,6003,6004, # 5600
-6005,6006,6007,6008,6009,6010,6011,6012,6013,6014,6015,6016,6017,6018,6019,6020, # 5616
-6021,6022,6023,6024,6025,6026,6027,6028,6029,6030,6031,6032,6033,6034,6035,6036, # 5632
-6037,6038,6039,6040,6041,6042,6043,6044,6045,6046,6047,6048,6049,6050,6051,6052, # 5648
-6053,6054,6055,6056,6057,6058,6059,6060,6061,6062,6063,6064,6065,6066,6067,6068, # 5664
-6069,6070,6071,6072,6073,6074,6075,6076,6077,6078,6079,6080,6081,6082,6083,6084, # 5680
-6085,6086,6087,6088,6089,6090,6091,6092,6093,6094,6095,6096,6097,6098,6099,6100, # 5696
-6101,6102,6103,6104,6105,6106,6107,6108,6109,6110,6111,6112,6113,6114,6115,6116, # 5712
-6117,6118,6119,6120,6121,6122,6123,6124,6125,6126,6127,6128,6129,6130,6131,6132, # 5728
-6133,6134,6135,6136,6137,6138,6139,6140,6141,6142,6143,6144,6145,6146,6147,6148, # 5744
-6149,6150,6151,6152,6153,6154,6155,6156,6157,6158,6159,6160,6161,6162,6163,6164, # 5760
-6165,6166,6167,6168,6169,6170,6171,6172,6173,6174,6175,6176,6177,6178,6179,6180, # 5776
-6181,6182,6183,6184,6185,6186,6187,6188,6189,6190,6191,6192,6193,6194,6195,6196, # 5792
-6197,6198,6199,6200,6201,6202,6203,6204,6205,6206,6207,6208,6209,6210,6211,6212, # 5808
-6213,6214,6215,6216,6217,6218,6219,6220,6221,6222,6223,3670,6224,6225,6226,6227, # 5824
-6228,6229,6230,6231,6232,6233,6234,6235,6236,6237,6238,6239,6240,6241,6242,6243, # 5840
-6244,6245,6246,6247,6248,6249,6250,6251,6252,6253,6254,6255,6256,6257,6258,6259, # 5856
-6260,6261,6262,6263,6264,6265,6266,6267,6268,6269,6270,6271,6272,6273,6274,6275, # 5872
-6276,6277,6278,6279,6280,6281,6282,6283,6284,6285,4815,6286,6287,6288,6289,6290, # 5888
-6291,6292,4816,6293,6294,6295,6296,6297,6298,6299,6300,6301,6302,6303,6304,6305, # 5904
-6306,6307,6308,6309,6310,6311,4817,4818,6312,6313,6314,6315,6316,6317,6318,4819, # 5920
-6319,6320,6321,6322,6323,6324,6325,6326,6327,6328,6329,6330,6331,6332,6333,6334, # 5936
-6335,6336,6337,4820,6338,6339,6340,6341,6342,6343,6344,6345,6346,6347,6348,6349, # 5952
-6350,6351,6352,6353,6354,6355,6356,6357,6358,6359,6360,6361,6362,6363,6364,6365, # 5968
-6366,6367,6368,6369,6370,6371,6372,6373,6374,6375,6376,6377,6378,6379,6380,6381, # 5984
-6382,6383,6384,6385,6386,6387,6388,6389,6390,6391,6392,6393,6394,6395,6396,6397, # 6000
-6398,6399,6400,6401,6402,6403,6404,6405,6406,6407,6408,6409,6410,3441,6411,6412, # 6016
-6413,6414,6415,6416,6417,6418,6419,6420,6421,6422,6423,6424,6425,4440,6426,6427, # 6032
-6428,6429,6430,6431,6432,6433,6434,6435,6436,6437,6438,6439,6440,6441,6442,6443, # 6048
-6444,6445,6446,6447,6448,6449,6450,6451,6452,6453,6454,4821,6455,6456,6457,6458, # 6064
-6459,6460,6461,6462,6463,6464,6465,6466,6467,6468,6469,6470,6471,6472,6473,6474, # 6080
-6475,6476,6477,3947,3948,6478,6479,6480,6481,3272,4441,6482,6483,6484,6485,4442, # 6096
-6486,6487,6488,6489,6490,6491,6492,6493,6494,6495,6496,4822,6497,6498,6499,6500, # 6112
-6501,6502,6503,6504,6505,6506,6507,6508,6509,6510,6511,6512,6513,6514,6515,6516, # 6128
-6517,6518,6519,6520,6521,6522,6523,6524,6525,6526,6527,6528,6529,6530,6531,6532, # 6144
-6533,6534,6535,6536,6537,6538,6539,6540,6541,6542,6543,6544,6545,6546,6547,6548, # 6160
-6549,6550,6551,6552,6553,6554,6555,6556,2784,6557,4823,6558,6559,6560,6561,6562, # 6176
-6563,6564,6565,6566,6567,6568,6569,3949,6570,6571,6572,4824,6573,6574,6575,6576, # 6192
-6577,6578,6579,6580,6581,6582,6583,4825,6584,6585,6586,3950,2785,6587,6588,6589, # 6208
-6590,6591,6592,6593,6594,6595,6596,6597,6598,6599,6600,6601,6602,6603,6604,6605, # 6224
-6606,6607,6608,6609,6610,6611,6612,4826,6613,6614,6615,4827,6616,6617,6618,6619, # 6240
-6620,6621,6622,6623,6624,6625,4164,6626,6627,6628,6629,6630,6631,6632,6633,6634, # 6256
-3547,6635,4828,6636,6637,6638,6639,6640,6641,6642,3951,2984,6643,6644,6645,6646, # 6272
-6647,6648,6649,4165,6650,4829,6651,6652,4830,6653,6654,6655,6656,6657,6658,6659, # 6288
-6660,6661,6662,4831,6663,6664,6665,6666,6667,6668,6669,6670,6671,4166,6672,4832, # 6304
-3952,6673,6674,6675,6676,4833,6677,6678,6679,4167,6680,6681,6682,3198,6683,6684, # 6320
-6685,6686,6687,6688,6689,6690,6691,6692,6693,6694,6695,6696,6697,4834,6698,6699, # 6336
-6700,6701,6702,6703,6704,6705,6706,6707,6708,6709,6710,6711,6712,6713,6714,6715, # 6352
-6716,6717,6718,6719,6720,6721,6722,6723,6724,6725,6726,6727,6728,6729,6730,6731, # 6368
-6732,6733,6734,4443,6735,6736,6737,6738,6739,6740,6741,6742,6743,6744,6745,4444, # 6384
-6746,6747,6748,6749,6750,6751,6752,6753,6754,6755,6756,6757,6758,6759,6760,6761, # 6400
-6762,6763,6764,6765,6766,6767,6768,6769,6770,6771,6772,6773,6774,6775,6776,6777, # 6416
-6778,6779,6780,6781,4168,6782,6783,3442,6784,6785,6786,6787,6788,6789,6790,6791, # 6432
-4169,6792,6793,6794,6795,6796,6797,6798,6799,6800,6801,6802,6803,6804,6805,6806, # 6448
-6807,6808,6809,6810,6811,4835,6812,6813,6814,4445,6815,6816,4446,6817,6818,6819, # 6464
-6820,6821,6822,6823,6824,6825,6826,6827,6828,6829,6830,6831,6832,6833,6834,6835, # 6480
-3548,6836,6837,6838,6839,6840,6841,6842,6843,6844,6845,6846,4836,6847,6848,6849, # 6496
-6850,6851,6852,6853,6854,3953,6855,6856,6857,6858,6859,6860,6861,6862,6863,6864, # 6512
-6865,6866,6867,6868,6869,6870,6871,6872,6873,6874,6875,6876,6877,3199,6878,6879, # 6528
-6880,6881,6882,4447,6883,6884,6885,6886,6887,6888,6889,6890,6891,6892,6893,6894, # 6544
-6895,6896,6897,6898,6899,6900,6901,6902,6903,6904,4170,6905,6906,6907,6908,6909, # 6560
-6910,6911,6912,6913,6914,6915,6916,6917,6918,6919,6920,6921,6922,6923,6924,6925, # 6576
-6926,6927,4837,6928,6929,6930,6931,6932,6933,6934,6935,6936,3346,6937,6938,4838, # 6592
-6939,6940,6941,4448,6942,6943,6944,6945,6946,4449,6947,6948,6949,6950,6951,6952, # 6608
-6953,6954,6955,6956,6957,6958,6959,6960,6961,6962,6963,6964,6965,6966,6967,6968, # 6624
-6969,6970,6971,6972,6973,6974,6975,6976,6977,6978,6979,6980,6981,6982,6983,6984, # 6640
-6985,6986,6987,6988,6989,6990,6991,6992,6993,6994,3671,6995,6996,6997,6998,4839, # 6656
-6999,7000,7001,7002,3549,7003,7004,7005,7006,7007,7008,7009,7010,7011,7012,7013, # 6672
-7014,7015,7016,7017,7018,7019,7020,7021,7022,7023,7024,7025,7026,7027,7028,7029, # 6688
-7030,4840,7031,7032,7033,7034,7035,7036,7037,7038,4841,7039,7040,7041,7042,7043, # 6704
-7044,7045,7046,7047,7048,7049,7050,7051,7052,7053,7054,7055,7056,7057,7058,7059, # 6720
-7060,7061,7062,7063,7064,7065,7066,7067,7068,7069,7070,2985,7071,7072,7073,7074, # 6736
-7075,7076,7077,7078,7079,7080,4842,7081,7082,7083,7084,7085,7086,7087,7088,7089, # 6752
-7090,7091,7092,7093,7094,7095,7096,7097,7098,7099,7100,7101,7102,7103,7104,7105, # 6768
-7106,7107,7108,7109,7110,7111,7112,7113,7114,7115,7116,7117,7118,4450,7119,7120, # 6784
-7121,7122,7123,7124,7125,7126,7127,7128,7129,7130,7131,7132,7133,7134,7135,7136, # 6800
-7137,7138,7139,7140,7141,7142,7143,4843,7144,7145,7146,7147,7148,7149,7150,7151, # 6816
-7152,7153,7154,7155,7156,7157,7158,7159,7160,7161,7162,7163,7164,7165,7166,7167, # 6832
-7168,7169,7170,7171,7172,7173,7174,7175,7176,7177,7178,7179,7180,7181,7182,7183, # 6848
-7184,7185,7186,7187,7188,4171,4172,7189,7190,7191,7192,7193,7194,7195,7196,7197, # 6864
-7198,7199,7200,7201,7202,7203,7204,7205,7206,7207,7208,7209,7210,7211,7212,7213, # 6880
-7214,7215,7216,7217,7218,7219,7220,7221,7222,7223,7224,7225,7226,7227,7228,7229, # 6896
-7230,7231,7232,7233,7234,7235,7236,7237,7238,7239,7240,7241,7242,7243,7244,7245, # 6912
-7246,7247,7248,7249,7250,7251,7252,7253,7254,7255,7256,7257,7258,7259,7260,7261, # 6928
-7262,7263,7264,7265,7266,7267,7268,7269,7270,7271,7272,7273,7274,7275,7276,7277, # 6944
-7278,7279,7280,7281,7282,7283,7284,7285,7286,7287,7288,7289,7290,7291,7292,7293, # 6960
-7294,7295,7296,4844,7297,7298,7299,7300,7301,7302,7303,7304,7305,7306,7307,7308, # 6976
-7309,7310,7311,7312,7313,7314,7315,7316,4451,7317,7318,7319,7320,7321,7322,7323, # 6992
-7324,7325,7326,7327,7328,7329,7330,7331,7332,7333,7334,7335,7336,7337,7338,7339, # 7008
-7340,7341,7342,7343,7344,7345,7346,7347,7348,7349,7350,7351,7352,7353,4173,7354, # 7024
-7355,4845,7356,7357,7358,7359,7360,7361,7362,7363,7364,7365,7366,7367,7368,7369, # 7040
-7370,7371,7372,7373,7374,7375,7376,7377,7378,7379,7380,7381,7382,7383,7384,7385, # 7056
-7386,7387,7388,4846,7389,7390,7391,7392,7393,7394,7395,7396,7397,7398,7399,7400, # 7072
-7401,7402,7403,7404,7405,3672,7406,7407,7408,7409,7410,7411,7412,7413,7414,7415, # 7088
-7416,7417,7418,7419,7420,7421,7422,7423,7424,7425,7426,7427,7428,7429,7430,7431, # 7104
-7432,7433,7434,7435,7436,7437,7438,7439,7440,7441,7442,7443,7444,7445,7446,7447, # 7120
-7448,7449,7450,7451,7452,7453,4452,7454,3200,7455,7456,7457,7458,7459,7460,7461, # 7136
-7462,7463,7464,7465,7466,7467,7468,7469,7470,7471,7472,7473,7474,4847,7475,7476, # 7152
-7477,3133,7478,7479,7480,7481,7482,7483,7484,7485,7486,7487,7488,7489,7490,7491, # 7168
-7492,7493,7494,7495,7496,7497,7498,7499,7500,7501,7502,3347,7503,7504,7505,7506, # 7184
-7507,7508,7509,7510,7511,7512,7513,7514,7515,7516,7517,7518,7519,7520,7521,4848, # 7200
-7522,7523,7524,7525,7526,7527,7528,7529,7530,7531,7532,7533,7534,7535,7536,7537, # 7216
-7538,7539,7540,7541,7542,7543,7544,7545,7546,7547,7548,7549,3801,4849,7550,7551, # 7232
-7552,7553,7554,7555,7556,7557,7558,7559,7560,7561,7562,7563,7564,7565,7566,7567, # 7248
-7568,7569,3035,7570,7571,7572,7573,7574,7575,7576,7577,7578,7579,7580,7581,7582, # 7264
-7583,7584,7585,7586,7587,7588,7589,7590,7591,7592,7593,7594,7595,7596,7597,7598, # 7280
-7599,7600,7601,7602,7603,7604,7605,7606,7607,7608,7609,7610,7611,7612,7613,7614, # 7296
-7615,7616,4850,7617,7618,3802,7619,7620,7621,7622,7623,7624,7625,7626,7627,7628, # 7312
-7629,7630,7631,7632,4851,7633,7634,7635,7636,7637,7638,7639,7640,7641,7642,7643, # 7328
-7644,7645,7646,7647,7648,7649,7650,7651,7652,7653,7654,7655,7656,7657,7658,7659, # 7344
-7660,7661,7662,7663,7664,7665,7666,7667,7668,7669,7670,4453,7671,7672,7673,7674, # 7360
-7675,7676,7677,7678,7679,7680,7681,7682,7683,7684,7685,7686,7687,7688,7689,7690, # 7376
-7691,7692,7693,7694,7695,7696,7697,3443,7698,7699,7700,7701,7702,4454,7703,7704, # 7392
-7705,7706,7707,7708,7709,7710,7711,7712,7713,2472,7714,7715,7716,7717,7718,7719, # 7408
-7720,7721,7722,7723,7724,7725,7726,7727,7728,7729,7730,7731,3954,7732,7733,7734, # 7424
-7735,7736,7737,7738,7739,7740,7741,7742,7743,7744,7745,7746,7747,7748,7749,7750, # 7440
-3134,7751,7752,4852,7753,7754,7755,4853,7756,7757,7758,7759,7760,4174,7761,7762, # 7456
-7763,7764,7765,7766,7767,7768,7769,7770,7771,7772,7773,7774,7775,7776,7777,7778, # 7472
-7779,7780,7781,7782,7783,7784,7785,7786,7787,7788,7789,7790,7791,7792,7793,7794, # 7488
-7795,7796,7797,7798,7799,7800,7801,7802,7803,7804,7805,4854,7806,7807,7808,7809, # 7504
-7810,7811,7812,7813,7814,7815,7816,7817,7818,7819,7820,7821,7822,7823,7824,7825, # 7520
-4855,7826,7827,7828,7829,7830,7831,7832,7833,7834,7835,7836,7837,7838,7839,7840, # 7536
-7841,7842,7843,7844,7845,7846,7847,3955,7848,7849,7850,7851,7852,7853,7854,7855, # 7552
-7856,7857,7858,7859,7860,3444,7861,7862,7863,7864,7865,7866,7867,7868,7869,7870, # 7568
-7871,7872,7873,7874,7875,7876,7877,7878,7879,7880,7881,7882,7883,7884,7885,7886, # 7584
-7887,7888,7889,7890,7891,4175,7892,7893,7894,7895,7896,4856,4857,7897,7898,7899, # 7600
-7900,2598,7901,7902,7903,7904,7905,7906,7907,7908,4455,7909,7910,7911,7912,7913, # 7616
-7914,3201,7915,7916,7917,7918,7919,7920,7921,4858,7922,7923,7924,7925,7926,7927, # 7632
-7928,7929,7930,7931,7932,7933,7934,7935,7936,7937,7938,7939,7940,7941,7942,7943, # 7648
-7944,7945,7946,7947,7948,7949,7950,7951,7952,7953,7954,7955,7956,7957,7958,7959, # 7664
-7960,7961,7962,7963,7964,7965,7966,7967,7968,7969,7970,7971,7972,7973,7974,7975, # 7680
-7976,7977,7978,7979,7980,7981,4859,7982,7983,7984,7985,7986,7987,7988,7989,7990, # 7696
-7991,7992,7993,7994,7995,7996,4860,7997,7998,7999,8000,8001,8002,8003,8004,8005, # 7712
-8006,8007,8008,8009,8010,8011,8012,8013,8014,8015,8016,4176,8017,8018,8019,8020, # 7728
-8021,8022,8023,4861,8024,8025,8026,8027,8028,8029,8030,8031,8032,8033,8034,8035, # 7744
-8036,4862,4456,8037,8038,8039,8040,4863,8041,8042,8043,8044,8045,8046,8047,8048, # 7760
-8049,8050,8051,8052,8053,8054,8055,8056,8057,8058,8059,8060,8061,8062,8063,8064, # 7776
-8065,8066,8067,8068,8069,8070,8071,8072,8073,8074,8075,8076,8077,8078,8079,8080, # 7792
-8081,8082,8083,8084,8085,8086,8087,8088,8089,8090,8091,8092,8093,8094,8095,8096, # 7808
-8097,8098,8099,4864,4177,8100,8101,8102,8103,8104,8105,8106,8107,8108,8109,8110, # 7824
-8111,8112,8113,8114,8115,8116,8117,8118,8119,8120,4178,8121,8122,8123,8124,8125, # 7840
-8126,8127,8128,8129,8130,8131,8132,8133,8134,8135,8136,8137,8138,8139,8140,8141, # 7856
-8142,8143,8144,8145,4865,4866,8146,8147,8148,8149,8150,8151,8152,8153,8154,8155, # 7872
-8156,8157,8158,8159,8160,8161,8162,8163,8164,8165,4179,8166,8167,8168,8169,8170, # 7888
-8171,8172,8173,8174,8175,8176,8177,8178,8179,8180,8181,4457,8182,8183,8184,8185, # 7904
-8186,8187,8188,8189,8190,8191,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201, # 7920
-8202,8203,8204,8205,8206,8207,8208,8209,8210,8211,8212,8213,8214,8215,8216,8217, # 7936
-8218,8219,8220,8221,8222,8223,8224,8225,8226,8227,8228,8229,8230,8231,8232,8233, # 7952
-8234,8235,8236,8237,8238,8239,8240,8241,8242,8243,8244,8245,8246,8247,8248,8249, # 7968
-8250,8251,8252,8253,8254,8255,8256,3445,8257,8258,8259,8260,8261,8262,4458,8263, # 7984
-8264,8265,8266,8267,8268,8269,8270,8271,8272,4459,8273,8274,8275,8276,3550,8277, # 8000
-8278,8279,8280,8281,8282,8283,8284,8285,8286,8287,8288,8289,4460,8290,8291,8292, # 8016
-8293,8294,8295,8296,8297,8298,8299,8300,8301,8302,8303,8304,8305,8306,8307,4867, # 8032
-8308,8309,8310,8311,8312,3551,8313,8314,8315,8316,8317,8318,8319,8320,8321,8322, # 8048
-8323,8324,8325,8326,4868,8327,8328,8329,8330,8331,8332,8333,8334,8335,8336,8337, # 8064
-8338,8339,8340,8341,8342,8343,8344,8345,8346,8347,8348,8349,8350,8351,8352,8353, # 8080
-8354,8355,8356,8357,8358,8359,8360,8361,8362,8363,4869,4461,8364,8365,8366,8367, # 8096
-8368,8369,8370,4870,8371,8372,8373,8374,8375,8376,8377,8378,8379,8380,8381,8382, # 8112
-8383,8384,8385,8386,8387,8388,8389,8390,8391,8392,8393,8394,8395,8396,8397,8398, # 8128
-8399,8400,8401,8402,8403,8404,8405,8406,8407,8408,8409,8410,4871,8411,8412,8413, # 8144
-8414,8415,8416,8417,8418,8419,8420,8421,8422,4462,8423,8424,8425,8426,8427,8428, # 8160
-8429,8430,8431,8432,8433,2986,8434,8435,8436,8437,8438,8439,8440,8441,8442,8443, # 8176
-8444,8445,8446,8447,8448,8449,8450,8451,8452,8453,8454,8455,8456,8457,8458,8459, # 8192
-8460,8461,8462,8463,8464,8465,8466,8467,8468,8469,8470,8471,8472,8473,8474,8475, # 8208
-8476,8477,8478,4180,8479,8480,8481,8482,8483,8484,8485,8486,8487,8488,8489,8490, # 8224
-8491,8492,8493,8494,8495,8496,8497,8498,8499,8500,8501,8502,8503,8504,8505,8506, # 8240
-8507,8508,8509,8510,8511,8512,8513,8514,8515,8516,8517,8518,8519,8520,8521,8522, # 8256
-8523,8524,8525,8526,8527,8528,8529,8530,8531,8532,8533,8534,8535,8536,8537,8538, # 8272
-8539,8540,8541,8542,8543,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,8554, # 8288
-8555,8556,8557,8558,8559,8560,8561,8562,8563,8564,4872,8565,8566,8567,8568,8569, # 8304
-8570,8571,8572,8573,4873,8574,8575,8576,8577,8578,8579,8580,8581,8582,8583,8584, # 8320
-8585,8586,8587,8588,8589,8590,8591,8592,8593,8594,8595,8596,8597,8598,8599,8600, # 8336
-8601,8602,8603,8604,8605,3803,8606,8607,8608,8609,8610,8611,8612,8613,4874,3804, # 8352
-8614,8615,8616,8617,8618,8619,8620,8621,3956,8622,8623,8624,8625,8626,8627,8628, # 8368
-8629,8630,8631,8632,8633,8634,8635,8636,8637,8638,2865,8639,8640,8641,8642,8643, # 8384
-8644,8645,8646,8647,8648,8649,8650,8651,8652,8653,8654,8655,8656,4463,8657,8658, # 8400
-8659,4875,4876,8660,8661,8662,8663,8664,8665,8666,8667,8668,8669,8670,8671,8672, # 8416
-8673,8674,8675,8676,8677,8678,8679,8680,8681,4464,8682,8683,8684,8685,8686,8687, # 8432
-8688,8689,8690,8691,8692,8693,8694,8695,8696,8697,8698,8699,8700,8701,8702,8703, # 8448
-8704,8705,8706,8707,8708,8709,2261,8710,8711,8712,8713,8714,8715,8716,8717,8718, # 8464
-8719,8720,8721,8722,8723,8724,8725,8726,8727,8728,8729,8730,8731,8732,8733,4181, # 8480
-8734,8735,8736,8737,8738,8739,8740,8741,8742,8743,8744,8745,8746,8747,8748,8749, # 8496
-8750,8751,8752,8753,8754,8755,8756,8757,8758,8759,8760,8761,8762,8763,4877,8764, # 8512
-8765,8766,8767,8768,8769,8770,8771,8772,8773,8774,8775,8776,8777,8778,8779,8780, # 8528
-8781,8782,8783,8784,8785,8786,8787,8788,4878,8789,4879,8790,8791,8792,4880,8793, # 8544
-8794,8795,8796,8797,8798,8799,8800,8801,4881,8802,8803,8804,8805,8806,8807,8808, # 8560
-8809,8810,8811,8812,8813,8814,8815,3957,8816,8817,8818,8819,8820,8821,8822,8823, # 8576
-8824,8825,8826,8827,8828,8829,8830,8831,8832,8833,8834,8835,8836,8837,8838,8839, # 8592
-8840,8841,8842,8843,8844,8845,8846,8847,4882,8848,8849,8850,8851,8852,8853,8854, # 8608
-8855,8856,8857,8858,8859,8860,8861,8862,8863,8864,8865,8866,8867,8868,8869,8870, # 8624
-8871,8872,8873,8874,8875,8876,8877,8878,8879,8880,8881,8882,8883,8884,3202,8885, # 8640
-8886,8887,8888,8889,8890,8891,8892,8893,8894,8895,8896,8897,8898,8899,8900,8901, # 8656
-8902,8903,8904,8905,8906,8907,8908,8909,8910,8911,8912,8913,8914,8915,8916,8917, # 8672
-8918,8919,8920,8921,8922,8923,8924,4465,8925,8926,8927,8928,8929,8930,8931,8932, # 8688
-4883,8933,8934,8935,8936,8937,8938,8939,8940,8941,8942,8943,2214,8944,8945,8946, # 8704
-8947,8948,8949,8950,8951,8952,8953,8954,8955,8956,8957,8958,8959,8960,8961,8962, # 8720
-8963,8964,8965,4884,8966,8967,8968,8969,8970,8971,8972,8973,8974,8975,8976,8977, # 8736
-8978,8979,8980,8981,8982,8983,8984,8985,8986,8987,8988,8989,8990,8991,8992,4885, # 8752
-8993,8994,8995,8996,8997,8998,8999,9000,9001,9002,9003,9004,9005,9006,9007,9008, # 8768
-9009,9010,9011,9012,9013,9014,9015,9016,9017,9018,9019,9020,9021,4182,9022,9023, # 8784
-9024,9025,9026,9027,9028,9029,9030,9031,9032,9033,9034,9035,9036,9037,9038,9039, # 8800
-9040,9041,9042,9043,9044,9045,9046,9047,9048,9049,9050,9051,9052,9053,9054,9055, # 8816
-9056,9057,9058,9059,9060,9061,9062,9063,4886,9064,9065,9066,9067,9068,9069,4887, # 8832
-9070,9071,9072,9073,9074,9075,9076,9077,9078,9079,9080,9081,9082,9083,9084,9085, # 8848
-9086,9087,9088,9089,9090,9091,9092,9093,9094,9095,9096,9097,9098,9099,9100,9101, # 8864
-9102,9103,9104,9105,9106,9107,9108,9109,9110,9111,9112,9113,9114,9115,9116,9117, # 8880
-9118,9119,9120,9121,9122,9123,9124,9125,9126,9127,9128,9129,9130,9131,9132,9133, # 8896
-9134,9135,9136,9137,9138,9139,9140,9141,3958,9142,9143,9144,9145,9146,9147,9148, # 8912
-9149,9150,9151,4888,9152,9153,9154,9155,9156,9157,9158,9159,9160,9161,9162,9163, # 8928
-9164,9165,9166,9167,9168,9169,9170,9171,9172,9173,9174,9175,4889,9176,9177,9178, # 8944
-9179,9180,9181,9182,9183,9184,9185,9186,9187,9188,9189,9190,9191,9192,9193,9194, # 8960
-9195,9196,9197,9198,9199,9200,9201,9202,9203,4890,9204,9205,9206,9207,9208,9209, # 8976
-9210,9211,9212,9213,9214,9215,9216,9217,9218,9219,9220,9221,9222,4466,9223,9224, # 8992
-9225,9226,9227,9228,9229,9230,9231,9232,9233,9234,9235,9236,9237,9238,9239,9240, # 9008
-9241,9242,9243,9244,9245,4891,9246,9247,9248,9249,9250,9251,9252,9253,9254,9255, # 9024
-9256,9257,4892,9258,9259,9260,9261,4893,4894,9262,9263,9264,9265,9266,9267,9268, # 9040
-9269,9270,9271,9272,9273,4467,9274,9275,9276,9277,9278,9279,9280,9281,9282,9283, # 9056
-9284,9285,3673,9286,9287,9288,9289,9290,9291,9292,9293,9294,9295,9296,9297,9298, # 9072
-9299,9300,9301,9302,9303,9304,9305,9306,9307,9308,9309,9310,9311,9312,9313,9314, # 9088
-9315,9316,9317,9318,9319,9320,9321,9322,4895,9323,9324,9325,9326,9327,9328,9329, # 9104
-9330,9331,9332,9333,9334,9335,9336,9337,9338,9339,9340,9341,9342,9343,9344,9345, # 9120
-9346,9347,4468,9348,9349,9350,9351,9352,9353,9354,9355,9356,9357,9358,9359,9360, # 9136
-9361,9362,9363,9364,9365,9366,9367,9368,9369,9370,9371,9372,9373,4896,9374,4469, # 9152
-9375,9376,9377,9378,9379,4897,9380,9381,9382,9383,9384,9385,9386,9387,9388,9389, # 9168
-9390,9391,9392,9393,9394,9395,9396,9397,9398,9399,9400,9401,9402,9403,9404,9405, # 9184
-9406,4470,9407,2751,9408,9409,3674,3552,9410,9411,9412,9413,9414,9415,9416,9417, # 9200
-9418,9419,9420,9421,4898,9422,9423,9424,9425,9426,9427,9428,9429,3959,9430,9431, # 9216
-9432,9433,9434,9435,9436,4471,9437,9438,9439,9440,9441,9442,9443,9444,9445,9446, # 9232
-9447,9448,9449,9450,3348,9451,9452,9453,9454,9455,9456,9457,9458,9459,9460,9461, # 9248
-9462,9463,9464,9465,9466,9467,9468,9469,9470,9471,9472,4899,9473,9474,9475,9476, # 9264
-9477,4900,9478,9479,9480,9481,9482,9483,9484,9485,9486,9487,9488,3349,9489,9490, # 9280
-9491,9492,9493,9494,9495,9496,9497,9498,9499,9500,9501,9502,9503,9504,9505,9506, # 9296
-9507,9508,9509,9510,9511,9512,9513,9514,9515,9516,9517,9518,9519,9520,4901,9521, # 9312
-9522,9523,9524,9525,9526,4902,9527,9528,9529,9530,9531,9532,9533,9534,9535,9536, # 9328
-9537,9538,9539,9540,9541,9542,9543,9544,9545,9546,9547,9548,9549,9550,9551,9552, # 9344
-9553,9554,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568, # 9360
-9569,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,9581,9582,9583,9584, # 9376
-3805,9585,9586,9587,9588,9589,9590,9591,9592,9593,9594,9595,9596,9597,9598,9599, # 9392
-9600,9601,9602,4903,9603,9604,9605,9606,9607,4904,9608,9609,9610,9611,9612,9613, # 9408
-9614,4905,9615,9616,9617,9618,9619,9620,9621,9622,9623,9624,9625,9626,9627,9628, # 9424
-9629,9630,9631,9632,4906,9633,9634,9635,9636,9637,9638,9639,9640,9641,9642,9643, # 9440
-4907,9644,9645,9646,9647,9648,9649,9650,9651,9652,9653,9654,9655,9656,9657,9658, # 9456
-9659,9660,9661,9662,9663,9664,9665,9666,9667,9668,9669,9670,9671,9672,4183,9673, # 9472
-9674,9675,9676,9677,4908,9678,9679,9680,9681,4909,9682,9683,9684,9685,9686,9687, # 9488
-9688,9689,9690,4910,9691,9692,9693,3675,9694,9695,9696,2945,9697,9698,9699,9700, # 9504
-9701,9702,9703,9704,9705,4911,9706,9707,9708,9709,9710,9711,9712,9713,9714,9715, # 9520
-9716,9717,9718,9719,9720,9721,9722,9723,9724,9725,9726,9727,9728,9729,9730,9731, # 9536
-9732,9733,9734,9735,4912,9736,9737,9738,9739,9740,4913,9741,9742,9743,9744,9745, # 9552
-9746,9747,9748,9749,9750,9751,9752,9753,9754,9755,9756,9757,9758,4914,9759,9760, # 9568
-9761,9762,9763,9764,9765,9766,9767,9768,9769,9770,9771,9772,9773,9774,9775,9776, # 9584
-9777,9778,9779,9780,9781,9782,4915,9783,9784,9785,9786,9787,9788,9789,9790,9791, # 9600
-9792,9793,4916,9794,9795,9796,9797,9798,9799,9800,9801,9802,9803,9804,9805,9806, # 9616
-9807,9808,9809,9810,9811,9812,9813,9814,9815,9816,9817,9818,9819,9820,9821,9822, # 9632
-9823,9824,9825,9826,9827,9828,9829,9830,9831,9832,9833,9834,9835,9836,9837,9838, # 9648
-9839,9840,9841,9842,9843,9844,9845,9846,9847,9848,9849,9850,9851,9852,9853,9854, # 9664
-9855,9856,9857,9858,9859,9860,9861,9862,9863,9864,9865,9866,9867,9868,4917,9869, # 9680
-9870,9871,9872,9873,9874,9875,9876,9877,9878,9879,9880,9881,9882,9883,9884,9885, # 9696
-9886,9887,9888,9889,9890,9891,9892,4472,9893,9894,9895,9896,9897,3806,9898,9899, # 9712
-9900,9901,9902,9903,9904,9905,9906,9907,9908,9909,9910,9911,9912,9913,9914,4918, # 9728
-9915,9916,9917,4919,9918,9919,9920,9921,4184,9922,9923,9924,9925,9926,9927,9928, # 9744
-9929,9930,9931,9932,9933,9934,9935,9936,9937,9938,9939,9940,9941,9942,9943,9944, # 9760
-9945,9946,4920,9947,9948,9949,9950,9951,9952,9953,9954,9955,4185,9956,9957,9958, # 9776
-9959,9960,9961,9962,9963,9964,9965,4921,9966,9967,9968,4473,9969,9970,9971,9972, # 9792
-9973,9974,9975,9976,9977,4474,9978,9979,9980,9981,9982,9983,9984,9985,9986,9987, # 9808
-9988,9989,9990,9991,9992,9993,9994,9995,9996,9997,9998,9999,10000,10001,10002,10003, # 9824
-10004,10005,10006,10007,10008,10009,10010,10011,10012,10013,10014,10015,10016,10017,10018,10019, # 9840
-10020,10021,4922,10022,4923,10023,10024,10025,10026,10027,10028,10029,10030,10031,10032,10033, # 9856
-10034,10035,10036,10037,10038,10039,10040,10041,10042,10043,10044,10045,10046,10047,10048,4924, # 9872
-10049,10050,10051,10052,10053,10054,10055,10056,10057,10058,10059,10060,10061,10062,10063,10064, # 9888
-10065,10066,10067,10068,10069,10070,10071,10072,10073,10074,10075,10076,10077,10078,10079,10080, # 9904
-10081,10082,10083,10084,10085,10086,10087,4475,10088,10089,10090,10091,10092,10093,10094,10095, # 9920
-10096,10097,4476,10098,10099,10100,10101,10102,10103,10104,10105,10106,10107,10108,10109,10110, # 9936
-10111,2174,10112,10113,10114,10115,10116,10117,10118,10119,10120,10121,10122,10123,10124,10125, # 9952
-10126,10127,10128,10129,10130,10131,10132,10133,10134,10135,10136,10137,10138,10139,10140,3807, # 9968
-4186,4925,10141,10142,10143,10144,10145,10146,10147,4477,4187,10148,10149,10150,10151,10152, # 9984
-10153,4188,10154,10155,10156,10157,10158,10159,10160,10161,4926,10162,10163,10164,10165,10166, #10000
-10167,10168,10169,10170,10171,10172,10173,10174,10175,10176,10177,10178,10179,10180,10181,10182, #10016
-10183,10184,10185,10186,10187,10188,10189,10190,10191,10192,3203,10193,10194,10195,10196,10197, #10032
-10198,10199,10200,4478,10201,10202,10203,10204,4479,10205,10206,10207,10208,10209,10210,10211, #10048
-10212,10213,10214,10215,10216,10217,10218,10219,10220,10221,10222,10223,10224,10225,10226,10227, #10064
-10228,10229,10230,10231,10232,10233,10234,4927,10235,10236,10237,10238,10239,10240,10241,10242, #10080
-10243,10244,10245,10246,10247,10248,10249,10250,10251,10252,10253,10254,10255,10256,10257,10258, #10096
-10259,10260,10261,10262,10263,10264,10265,10266,10267,10268,10269,10270,10271,10272,10273,4480, #10112
-4928,4929,10274,10275,10276,10277,10278,10279,10280,10281,10282,10283,10284,10285,10286,10287, #10128
-10288,10289,10290,10291,10292,10293,10294,10295,10296,10297,10298,10299,10300,10301,10302,10303, #10144
-10304,10305,10306,10307,10308,10309,10310,10311,10312,10313,10314,10315,10316,10317,10318,10319, #10160
-10320,10321,10322,10323,10324,10325,10326,10327,10328,10329,10330,10331,10332,10333,10334,4930, #10176
-10335,10336,10337,10338,10339,10340,10341,10342,4931,10343,10344,10345,10346,10347,10348,10349, #10192
-10350,10351,10352,10353,10354,10355,3088,10356,2786,10357,10358,10359,10360,4189,10361,10362, #10208
-10363,10364,10365,10366,10367,10368,10369,10370,10371,10372,10373,10374,10375,4932,10376,10377, #10224
-10378,10379,10380,10381,10382,10383,10384,10385,10386,10387,10388,10389,10390,10391,10392,4933, #10240
-10393,10394,10395,4934,10396,10397,10398,10399,10400,10401,10402,10403,10404,10405,10406,10407, #10256
-10408,10409,10410,10411,10412,3446,10413,10414,10415,10416,10417,10418,10419,10420,10421,10422, #10272
-10423,4935,10424,10425,10426,10427,10428,10429,10430,4936,10431,10432,10433,10434,10435,10436, #10288
-10437,10438,10439,10440,10441,10442,10443,4937,10444,10445,10446,10447,4481,10448,10449,10450, #10304
-10451,10452,10453,10454,10455,10456,10457,10458,10459,10460,10461,10462,10463,10464,10465,10466, #10320
-10467,10468,10469,10470,10471,10472,10473,10474,10475,10476,10477,10478,10479,10480,10481,10482, #10336
-10483,10484,10485,10486,10487,10488,10489,10490,10491,10492,10493,10494,10495,10496,10497,10498, #10352
-10499,10500,10501,10502,10503,10504,10505,4938,10506,10507,10508,10509,10510,2552,10511,10512, #10368
-10513,10514,10515,10516,3447,10517,10518,10519,10520,10521,10522,10523,10524,10525,10526,10527, #10384
-10528,10529,10530,10531,10532,10533,10534,10535,10536,10537,10538,10539,10540,10541,10542,10543, #10400
-4482,10544,4939,10545,10546,10547,10548,10549,10550,10551,10552,10553,10554,10555,10556,10557, #10416
-10558,10559,10560,10561,10562,10563,10564,10565,10566,10567,3676,4483,10568,10569,10570,10571, #10432
-10572,3448,10573,10574,10575,10576,10577,10578,10579,10580,10581,10582,10583,10584,10585,10586, #10448
-10587,10588,10589,10590,10591,10592,10593,10594,10595,10596,10597,10598,10599,10600,10601,10602, #10464
-10603,10604,10605,10606,10607,10608,10609,10610,10611,10612,10613,10614,10615,10616,10617,10618, #10480
-10619,10620,10621,10622,10623,10624,10625,10626,10627,4484,10628,10629,10630,10631,10632,4940, #10496
-10633,10634,10635,10636,10637,10638,10639,10640,10641,10642,10643,10644,10645,10646,10647,10648, #10512
-10649,10650,10651,10652,10653,10654,10655,10656,4941,10657,10658,10659,2599,10660,10661,10662, #10528
-10663,10664,10665,10666,3089,10667,10668,10669,10670,10671,10672,10673,10674,10675,10676,10677, #10544
-10678,10679,10680,4942,10681,10682,10683,10684,10685,10686,10687,10688,10689,10690,10691,10692, #10560
-10693,10694,10695,10696,10697,4485,10698,10699,10700,10701,10702,10703,10704,4943,10705,3677, #10576
-10706,10707,10708,10709,10710,10711,10712,4944,10713,10714,10715,10716,10717,10718,10719,10720, #10592
-10721,10722,10723,10724,10725,10726,10727,10728,4945,10729,10730,10731,10732,10733,10734,10735, #10608
-10736,10737,10738,10739,10740,10741,10742,10743,10744,10745,10746,10747,10748,10749,10750,10751, #10624
-10752,10753,10754,10755,10756,10757,10758,10759,10760,10761,4946,10762,10763,10764,10765,10766, #10640
-10767,4947,4948,10768,10769,10770,10771,10772,10773,10774,10775,10776,10777,10778,10779,10780, #10656
-10781,10782,10783,10784,10785,10786,10787,10788,10789,10790,10791,10792,10793,10794,10795,10796, #10672
-10797,10798,10799,10800,10801,10802,10803,10804,10805,10806,10807,10808,10809,10810,10811,10812, #10688
-10813,10814,10815,10816,10817,10818,10819,10820,10821,10822,10823,10824,10825,10826,10827,10828, #10704
-10829,10830,10831,10832,10833,10834,10835,10836,10837,10838,10839,10840,10841,10842,10843,10844, #10720
-10845,10846,10847,10848,10849,10850,10851,10852,10853,10854,10855,10856,10857,10858,10859,10860, #10736
-10861,10862,10863,10864,10865,10866,10867,10868,10869,10870,10871,10872,10873,10874,10875,10876, #10752
-10877,10878,4486,10879,10880,10881,10882,10883,10884,10885,4949,10886,10887,10888,10889,10890, #10768
-10891,10892,10893,10894,10895,10896,10897,10898,10899,10900,10901,10902,10903,10904,10905,10906, #10784
-10907,10908,10909,10910,10911,10912,10913,10914,10915,10916,10917,10918,10919,4487,10920,10921, #10800
-10922,10923,10924,10925,10926,10927,10928,10929,10930,10931,10932,4950,10933,10934,10935,10936, #10816
-10937,10938,10939,10940,10941,10942,10943,10944,10945,10946,10947,10948,10949,4488,10950,10951, #10832
-10952,10953,10954,10955,10956,10957,10958,10959,4190,10960,10961,10962,10963,10964,10965,10966, #10848
-10967,10968,10969,10970,10971,10972,10973,10974,10975,10976,10977,10978,10979,10980,10981,10982, #10864
-10983,10984,10985,10986,10987,10988,10989,10990,10991,10992,10993,10994,10995,10996,10997,10998, #10880
-10999,11000,11001,11002,11003,11004,11005,11006,3960,11007,11008,11009,11010,11011,11012,11013, #10896
-11014,11015,11016,11017,11018,11019,11020,11021,11022,11023,11024,11025,11026,11027,11028,11029, #10912
-11030,11031,11032,4951,11033,11034,11035,11036,11037,11038,11039,11040,11041,11042,11043,11044, #10928
-11045,11046,11047,4489,11048,11049,11050,11051,4952,11052,11053,11054,11055,11056,11057,11058, #10944
-4953,11059,11060,11061,11062,11063,11064,11065,11066,11067,11068,11069,11070,11071,4954,11072, #10960
-11073,11074,11075,11076,11077,11078,11079,11080,11081,11082,11083,11084,11085,11086,11087,11088, #10976
-11089,11090,11091,11092,11093,11094,11095,11096,11097,11098,11099,11100,11101,11102,11103,11104, #10992
-11105,11106,11107,11108,11109,11110,11111,11112,11113,11114,11115,3808,11116,11117,11118,11119, #11008
-11120,11121,11122,11123,11124,11125,11126,11127,11128,11129,11130,11131,11132,11133,11134,4955, #11024
-11135,11136,11137,11138,11139,11140,11141,11142,11143,11144,11145,11146,11147,11148,11149,11150, #11040
-11151,11152,11153,11154,11155,11156,11157,11158,11159,11160,11161,4956,11162,11163,11164,11165, #11056
-11166,11167,11168,11169,11170,11171,11172,11173,11174,11175,11176,11177,11178,11179,11180,4957, #11072
-11181,11182,11183,11184,11185,11186,4958,11187,11188,11189,11190,11191,11192,11193,11194,11195, #11088
-11196,11197,11198,11199,11200,3678,11201,11202,11203,11204,11205,11206,4191,11207,11208,11209, #11104
-11210,11211,11212,11213,11214,11215,11216,11217,11218,11219,11220,11221,11222,11223,11224,11225, #11120
-11226,11227,11228,11229,11230,11231,11232,11233,11234,11235,11236,11237,11238,11239,11240,11241, #11136
-11242,11243,11244,11245,11246,11247,11248,11249,11250,11251,4959,11252,11253,11254,11255,11256, #11152
-11257,11258,11259,11260,11261,11262,11263,11264,11265,11266,11267,11268,11269,11270,11271,11272, #11168
-11273,11274,11275,11276,11277,11278,11279,11280,11281,11282,11283,11284,11285,11286,11287,11288, #11184
-11289,11290,11291,11292,11293,11294,11295,11296,11297,11298,11299,11300,11301,11302,11303,11304, #11200
-11305,11306,11307,11308,11309,11310,11311,11312,11313,11314,3679,11315,11316,11317,11318,4490, #11216
-11319,11320,11321,11322,11323,11324,11325,11326,11327,11328,11329,11330,11331,11332,11333,11334, #11232
-11335,11336,11337,11338,11339,11340,11341,11342,11343,11344,11345,11346,11347,4960,11348,11349, #11248
-11350,11351,11352,11353,11354,11355,11356,11357,11358,11359,11360,11361,11362,11363,11364,11365, #11264
-11366,11367,11368,11369,11370,11371,11372,11373,11374,11375,11376,11377,3961,4961,11378,11379, #11280
-11380,11381,11382,11383,11384,11385,11386,11387,11388,11389,11390,11391,11392,11393,11394,11395, #11296
-11396,11397,4192,11398,11399,11400,11401,11402,11403,11404,11405,11406,11407,11408,11409,11410, #11312
-11411,4962,11412,11413,11414,11415,11416,11417,11418,11419,11420,11421,11422,11423,11424,11425, #11328
-11426,11427,11428,11429,11430,11431,11432,11433,11434,11435,11436,11437,11438,11439,11440,11441, #11344
-11442,11443,11444,11445,11446,11447,11448,11449,11450,11451,11452,11453,11454,11455,11456,11457, #11360
-11458,11459,11460,11461,11462,11463,11464,11465,11466,11467,11468,11469,4963,11470,11471,4491, #11376
-11472,11473,11474,11475,4964,11476,11477,11478,11479,11480,11481,11482,11483,11484,11485,11486, #11392
-11487,11488,11489,11490,11491,11492,4965,11493,11494,11495,11496,11497,11498,11499,11500,11501, #11408
-11502,11503,11504,11505,11506,11507,11508,11509,11510,11511,11512,11513,11514,11515,11516,11517, #11424
-11518,11519,11520,11521,11522,11523,11524,11525,11526,11527,11528,11529,3962,11530,11531,11532, #11440
-11533,11534,11535,11536,11537,11538,11539,11540,11541,11542,11543,11544,11545,11546,11547,11548, #11456
-11549,11550,11551,11552,11553,11554,11555,11556,11557,11558,11559,11560,11561,11562,11563,11564, #11472
-4193,4194,11565,11566,11567,11568,11569,11570,11571,11572,11573,11574,11575,11576,11577,11578, #11488
-11579,11580,11581,11582,11583,11584,11585,11586,11587,11588,11589,11590,11591,4966,4195,11592, #11504
-11593,11594,11595,11596,11597,11598,11599,11600,11601,11602,11603,11604,3090,11605,11606,11607, #11520
-11608,11609,11610,4967,11611,11612,11613,11614,11615,11616,11617,11618,11619,11620,11621,11622, #11536
-11623,11624,11625,11626,11627,11628,11629,11630,11631,11632,11633,11634,11635,11636,11637,11638, #11552
-11639,11640,11641,11642,11643,11644,11645,11646,11647,11648,11649,11650,11651,11652,11653,11654, #11568
-11655,11656,11657,11658,11659,11660,11661,11662,11663,11664,11665,11666,11667,11668,11669,11670, #11584
-11671,11672,11673,11674,4968,11675,11676,11677,11678,11679,11680,11681,11682,11683,11684,11685, #11600
-11686,11687,11688,11689,11690,11691,11692,11693,3809,11694,11695,11696,11697,11698,11699,11700, #11616
-11701,11702,11703,11704,11705,11706,11707,11708,11709,11710,11711,11712,11713,11714,11715,11716, #11632
-11717,11718,3553,11719,11720,11721,11722,11723,11724,11725,11726,11727,11728,11729,11730,4969, #11648
-11731,11732,11733,11734,11735,11736,11737,11738,11739,11740,4492,11741,11742,11743,11744,11745, #11664
-11746,11747,11748,11749,11750,11751,11752,4970,11753,11754,11755,11756,11757,11758,11759,11760, #11680
-11761,11762,11763,11764,11765,11766,11767,11768,11769,11770,11771,11772,11773,11774,11775,11776, #11696
-11777,11778,11779,11780,11781,11782,11783,11784,11785,11786,11787,11788,11789,11790,4971,11791, #11712
-11792,11793,11794,11795,11796,11797,4972,11798,11799,11800,11801,11802,11803,11804,11805,11806, #11728
-11807,11808,11809,11810,4973,11811,11812,11813,11814,11815,11816,11817,11818,11819,11820,11821, #11744
-11822,11823,11824,11825,11826,11827,11828,11829,11830,11831,11832,11833,11834,3680,3810,11835, #11760
-11836,4974,11837,11838,11839,11840,11841,11842,11843,11844,11845,11846,11847,11848,11849,11850, #11776
-11851,11852,11853,11854,11855,11856,11857,11858,11859,11860,11861,11862,11863,11864,11865,11866, #11792
-11867,11868,11869,11870,11871,11872,11873,11874,11875,11876,11877,11878,11879,11880,11881,11882, #11808
-11883,11884,4493,11885,11886,11887,11888,11889,11890,11891,11892,11893,11894,11895,11896,11897, #11824
-11898,11899,11900,11901,11902,11903,11904,11905,11906,11907,11908,11909,11910,11911,11912,11913, #11840
-11914,11915,4975,11916,11917,11918,11919,11920,11921,11922,11923,11924,11925,11926,11927,11928, #11856
-11929,11930,11931,11932,11933,11934,11935,11936,11937,11938,11939,11940,11941,11942,11943,11944, #11872
-11945,11946,11947,11948,11949,4976,11950,11951,11952,11953,11954,11955,11956,11957,11958,11959, #11888
-11960,11961,11962,11963,11964,11965,11966,11967,11968,11969,11970,11971,11972,11973,11974,11975, #11904
-11976,11977,11978,11979,11980,11981,11982,11983,11984,11985,11986,11987,4196,11988,11989,11990, #11920
-11991,11992,4977,11993,11994,11995,11996,11997,11998,11999,12000,12001,12002,12003,12004,12005, #11936
-12006,12007,12008,12009,12010,12011,12012,12013,12014,12015,12016,12017,12018,12019,12020,12021, #11952
-12022,12023,12024,12025,12026,12027,12028,12029,12030,12031,12032,12033,12034,12035,12036,12037, #11968
-12038,12039,12040,12041,12042,12043,12044,12045,12046,12047,12048,12049,12050,12051,12052,12053, #11984
-12054,12055,12056,12057,12058,12059,12060,12061,4978,12062,12063,12064,12065,12066,12067,12068, #12000
-12069,12070,12071,12072,12073,12074,12075,12076,12077,12078,12079,12080,12081,12082,12083,12084, #12016
-12085,12086,12087,12088,12089,12090,12091,12092,12093,12094,12095,12096,12097,12098,12099,12100, #12032
-12101,12102,12103,12104,12105,12106,12107,12108,12109,12110,12111,12112,12113,12114,12115,12116, #12048
-12117,12118,12119,12120,12121,12122,12123,4979,12124,12125,12126,12127,12128,4197,12129,12130, #12064
-12131,12132,12133,12134,12135,12136,12137,12138,12139,12140,12141,12142,12143,12144,12145,12146, #12080
-12147,12148,12149,12150,12151,12152,12153,12154,4980,12155,12156,12157,12158,12159,12160,4494, #12096
-12161,12162,12163,12164,3811,12165,12166,12167,12168,12169,4495,12170,12171,4496,12172,12173, #12112
-12174,12175,12176,3812,12177,12178,12179,12180,12181,12182,12183,12184,12185,12186,12187,12188, #12128
-12189,12190,12191,12192,12193,12194,12195,12196,12197,12198,12199,12200,12201,12202,12203,12204, #12144
-12205,12206,12207,12208,12209,12210,12211,12212,12213,12214,12215,12216,12217,12218,12219,12220, #12160
-12221,4981,12222,12223,12224,12225,12226,12227,12228,12229,12230,12231,12232,12233,12234,12235, #12176
-4982,12236,12237,12238,12239,12240,12241,12242,12243,12244,12245,4983,12246,12247,12248,12249, #12192
-4984,12250,12251,12252,12253,12254,12255,12256,12257,12258,12259,12260,12261,12262,12263,12264, #12208
-4985,12265,4497,12266,12267,12268,12269,12270,12271,12272,12273,12274,12275,12276,12277,12278, #12224
-12279,12280,12281,12282,12283,12284,12285,12286,12287,4986,12288,12289,12290,12291,12292,12293, #12240
-12294,12295,12296,2473,12297,12298,12299,12300,12301,12302,12303,12304,12305,12306,12307,12308, #12256
-12309,12310,12311,12312,12313,12314,12315,12316,12317,12318,12319,3963,12320,12321,12322,12323, #12272
-12324,12325,12326,12327,12328,12329,12330,12331,12332,4987,12333,12334,12335,12336,12337,12338, #12288
-12339,12340,12341,12342,12343,12344,12345,12346,12347,12348,12349,12350,12351,12352,12353,12354, #12304
-12355,12356,12357,12358,12359,3964,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369, #12320
-12370,3965,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384, #12336
-12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400, #12352
-12401,12402,12403,12404,12405,12406,12407,12408,4988,12409,12410,12411,12412,12413,12414,12415, #12368
-12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431, #12384
-12432,12433,12434,12435,12436,12437,12438,3554,12439,12440,12441,12442,12443,12444,12445,12446, #12400
-12447,12448,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462, #12416
-12463,12464,4989,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477, #12432
-12478,12479,12480,4990,12481,12482,12483,12484,12485,12486,12487,12488,12489,4498,12490,12491, #12448
-12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507, #12464
-12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523, #12480
-12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,12535,12536,12537,12538,12539, #12496
-12540,12541,12542,12543,12544,12545,12546,12547,12548,12549,12550,12551,4991,12552,12553,12554, #12512
-12555,12556,12557,12558,12559,12560,12561,12562,12563,12564,12565,12566,12567,12568,12569,12570, #12528
-12571,12572,12573,12574,12575,12576,12577,12578,3036,12579,12580,12581,12582,12583,3966,12584, #12544
-12585,12586,12587,12588,12589,12590,12591,12592,12593,12594,12595,12596,12597,12598,12599,12600, #12560
-12601,12602,12603,12604,12605,12606,12607,12608,12609,12610,12611,12612,12613,12614,12615,12616, #12576
-12617,12618,12619,12620,12621,12622,12623,12624,12625,12626,12627,12628,12629,12630,12631,12632, #12592
-12633,12634,12635,12636,12637,12638,12639,12640,12641,12642,12643,12644,12645,12646,4499,12647, #12608
-12648,12649,12650,12651,12652,12653,12654,12655,12656,12657,12658,12659,12660,12661,12662,12663, #12624
-12664,12665,12666,12667,12668,12669,12670,12671,12672,12673,12674,12675,12676,12677,12678,12679, #12640
-12680,12681,12682,12683,12684,12685,12686,12687,12688,12689,12690,12691,12692,12693,12694,12695, #12656
-12696,12697,12698,4992,12699,12700,12701,12702,12703,12704,12705,12706,12707,12708,12709,12710, #12672
-12711,12712,12713,12714,12715,12716,12717,12718,12719,12720,12721,12722,12723,12724,12725,12726, #12688
-12727,12728,12729,12730,12731,12732,12733,12734,12735,12736,12737,12738,12739,12740,12741,12742, #12704
-12743,12744,12745,12746,12747,12748,12749,12750,12751,12752,12753,12754,12755,12756,12757,12758, #12720
-12759,12760,12761,12762,12763,12764,12765,12766,12767,12768,12769,12770,12771,12772,12773,12774, #12736
-12775,12776,12777,12778,4993,2175,12779,12780,12781,12782,12783,12784,12785,12786,4500,12787, #12752
-12788,12789,12790,12791,12792,12793,12794,12795,12796,12797,12798,12799,12800,12801,12802,12803, #12768
-12804,12805,12806,12807,12808,12809,12810,12811,12812,12813,12814,12815,12816,12817,12818,12819, #12784
-12820,12821,12822,12823,12824,12825,12826,4198,3967,12827,12828,12829,12830,12831,12832,12833, #12800
-12834,12835,12836,12837,12838,12839,12840,12841,12842,12843,12844,12845,12846,12847,12848,12849, #12816
-12850,12851,12852,12853,12854,12855,12856,12857,12858,12859,12860,12861,4199,12862,12863,12864, #12832
-12865,12866,12867,12868,12869,12870,12871,12872,12873,12874,12875,12876,12877,12878,12879,12880, #12848
-12881,12882,12883,12884,12885,12886,12887,4501,12888,12889,12890,12891,12892,12893,12894,12895, #12864
-12896,12897,12898,12899,12900,12901,12902,12903,12904,12905,12906,12907,12908,12909,12910,12911, #12880
-12912,4994,12913,12914,12915,12916,12917,12918,12919,12920,12921,12922,12923,12924,12925,12926, #12896
-12927,12928,12929,12930,12931,12932,12933,12934,12935,12936,12937,12938,12939,12940,12941,12942, #12912
-12943,12944,12945,12946,12947,12948,12949,12950,12951,12952,12953,12954,12955,12956,1772,12957, #12928
-12958,12959,12960,12961,12962,12963,12964,12965,12966,12967,12968,12969,12970,12971,12972,12973, #12944
-12974,12975,12976,12977,12978,12979,12980,12981,12982,12983,12984,12985,12986,12987,12988,12989, #12960
-12990,12991,12992,12993,12994,12995,12996,12997,4502,12998,4503,12999,13000,13001,13002,13003, #12976
-4504,13004,13005,13006,13007,13008,13009,13010,13011,13012,13013,13014,13015,13016,13017,13018, #12992
-13019,13020,13021,13022,13023,13024,13025,13026,13027,13028,13029,3449,13030,13031,13032,13033, #13008
-13034,13035,13036,13037,13038,13039,13040,13041,13042,13043,13044,13045,13046,13047,13048,13049, #13024
-13050,13051,13052,13053,13054,13055,13056,13057,13058,13059,13060,13061,13062,13063,13064,13065, #13040
-13066,13067,13068,13069,13070,13071,13072,13073,13074,13075,13076,13077,13078,13079,13080,13081, #13056
-13082,13083,13084,13085,13086,13087,13088,13089,13090,13091,13092,13093,13094,13095,13096,13097, #13072
-13098,13099,13100,13101,13102,13103,13104,13105,13106,13107,13108,13109,13110,13111,13112,13113, #13088
-13114,13115,13116,13117,13118,3968,13119,4995,13120,13121,13122,13123,13124,13125,13126,13127, #13104
-4505,13128,13129,13130,13131,13132,13133,13134,4996,4506,13135,13136,13137,13138,13139,4997, #13120
-13140,13141,13142,13143,13144,13145,13146,13147,13148,13149,13150,13151,13152,13153,13154,13155, #13136
-13156,13157,13158,13159,4998,13160,13161,13162,13163,13164,13165,13166,13167,13168,13169,13170, #13152
-13171,13172,13173,13174,13175,13176,4999,13177,13178,13179,13180,13181,13182,13183,13184,13185, #13168
-13186,13187,13188,13189,13190,13191,13192,13193,13194,13195,13196,13197,13198,13199,13200,13201, #13184
-13202,13203,13204,13205,13206,5000,13207,13208,13209,13210,13211,13212,13213,13214,13215,13216, #13200
-13217,13218,13219,13220,13221,13222,13223,13224,13225,13226,13227,4200,5001,13228,13229,13230, #13216
-13231,13232,13233,13234,13235,13236,13237,13238,13239,13240,3969,13241,13242,13243,13244,3970, #13232
-13245,13246,13247,13248,13249,13250,13251,13252,13253,13254,13255,13256,13257,13258,13259,13260, #13248
-13261,13262,13263,13264,13265,13266,13267,13268,3450,13269,13270,13271,13272,13273,13274,13275, #13264
-13276,5002,13277,13278,13279,13280,13281,13282,13283,13284,13285,13286,13287,13288,13289,13290, #13280
-13291,13292,13293,13294,13295,13296,13297,13298,13299,13300,13301,13302,3813,13303,13304,13305, #13296
-13306,13307,13308,13309,13310,13311,13312,13313,13314,13315,13316,13317,13318,13319,13320,13321, #13312
-13322,13323,13324,13325,13326,13327,13328,4507,13329,13330,13331,13332,13333,13334,13335,13336, #13328
-13337,13338,13339,13340,13341,5003,13342,13343,13344,13345,13346,13347,13348,13349,13350,13351, #13344
-13352,13353,13354,13355,13356,13357,13358,13359,13360,13361,13362,13363,13364,13365,13366,13367, #13360
-5004,13368,13369,13370,13371,13372,13373,13374,13375,13376,13377,13378,13379,13380,13381,13382, #13376
-13383,13384,13385,13386,13387,13388,13389,13390,13391,13392,13393,13394,13395,13396,13397,13398, #13392
-13399,13400,13401,13402,13403,13404,13405,13406,13407,13408,13409,13410,13411,13412,13413,13414, #13408
-13415,13416,13417,13418,13419,13420,13421,13422,13423,13424,13425,13426,13427,13428,13429,13430, #13424
-13431,13432,4508,13433,13434,13435,4201,13436,13437,13438,13439,13440,13441,13442,13443,13444, #13440
-13445,13446,13447,13448,13449,13450,13451,13452,13453,13454,13455,13456,13457,5005,13458,13459, #13456
-13460,13461,13462,13463,13464,13465,13466,13467,13468,13469,13470,4509,13471,13472,13473,13474, #13472
-13475,13476,13477,13478,13479,13480,13481,13482,13483,13484,13485,13486,13487,13488,13489,13490, #13488
-13491,13492,13493,13494,13495,13496,13497,13498,13499,13500,13501,13502,13503,13504,13505,13506, #13504
-13507,13508,13509,13510,13511,13512,13513,13514,13515,13516,13517,13518,13519,13520,13521,13522, #13520
-13523,13524,13525,13526,13527,13528,13529,13530,13531,13532,13533,13534,13535,13536,13537,13538, #13536
-13539,13540,13541,13542,13543,13544,13545,13546,13547,13548,13549,13550,13551,13552,13553,13554, #13552
-13555,13556,13557,13558,13559,13560,13561,13562,13563,13564,13565,13566,13567,13568,13569,13570, #13568
-13571,13572,13573,13574,13575,13576,13577,13578,13579,13580,13581,13582,13583,13584,13585,13586, #13584
-13587,13588,13589,13590,13591,13592,13593,13594,13595,13596,13597,13598,13599,13600,13601,13602, #13600
-13603,13604,13605,13606,13607,13608,13609,13610,13611,13612,13613,13614,13615,13616,13617,13618, #13616
-13619,13620,13621,13622,13623,13624,13625,13626,13627,13628,13629,13630,13631,13632,13633,13634, #13632
-13635,13636,13637,13638,13639,13640,13641,13642,5006,13643,13644,13645,13646,13647,13648,13649, #13648
-13650,13651,5007,13652,13653,13654,13655,13656,13657,13658,13659,13660,13661,13662,13663,13664, #13664
-13665,13666,13667,13668,13669,13670,13671,13672,13673,13674,13675,13676,13677,13678,13679,13680, #13680
-13681,13682,13683,13684,13685,13686,13687,13688,13689,13690,13691,13692,13693,13694,13695,13696, #13696
-13697,13698,13699,13700,13701,13702,13703,13704,13705,13706,13707,13708,13709,13710,13711,13712, #13712
-13713,13714,13715,13716,13717,13718,13719,13720,13721,13722,13723,13724,13725,13726,13727,13728, #13728
-13729,13730,13731,13732,13733,13734,13735,13736,13737,13738,13739,13740,13741,13742,13743,13744, #13744
-13745,13746,13747,13748,13749,13750,13751,13752,13753,13754,13755,13756,13757,13758,13759,13760, #13760
-13761,13762,13763,13764,13765,13766,13767,13768,13769,13770,13771,13772,13773,13774,3273,13775, #13776
-13776,13777,13778,13779,13780,13781,13782,13783,13784,13785,13786,13787,13788,13789,13790,13791, #13792
-13792,13793,13794,13795,13796,13797,13798,13799,13800,13801,13802,13803,13804,13805,13806,13807, #13808
-13808,13809,13810,13811,13812,13813,13814,13815,13816,13817,13818,13819,13820,13821,13822,13823, #13824
-13824,13825,13826,13827,13828,13829,13830,13831,13832,13833,13834,13835,13836,13837,13838,13839, #13840
-13840,13841,13842,13843,13844,13845,13846,13847,13848,13849,13850,13851,13852,13853,13854,13855, #13856
-13856,13857,13858,13859,13860,13861,13862,13863,13864,13865,13866,13867,13868,13869,13870,13871, #13872
-13872,13873,13874,13875,13876,13877,13878,13879,13880,13881,13882,13883,13884,13885,13886,13887, #13888
-13888,13889,13890,13891,13892,13893,13894,13895,13896,13897,13898,13899,13900,13901,13902,13903, #13904
-13904,13905,13906,13907,13908,13909,13910,13911,13912,13913,13914,13915,13916,13917,13918,13919, #13920
-13920,13921,13922,13923,13924,13925,13926,13927,13928,13929,13930,13931,13932,13933,13934,13935, #13936
-13936,13937,13938,13939,13940,13941,13942,13943,13944,13945,13946,13947,13948,13949,13950,13951, #13952
-13952,13953,13954,13955,13956,13957,13958,13959,13960,13961,13962,13963,13964,13965,13966,13967, #13968
-13968,13969,13970,13971,13972) #13973
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/big5prober.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/big5prober.py
deleted file mode 100644
index e6b52aa..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/big5prober.py
+++ /dev/null
@@ -1,41 +0,0 @@
-######################## BEGIN LICENSE BLOCK ########################
-# The Original Code is Mozilla Communicator client code.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 1998
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-# Mark Pilgrim - port to Python
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301 USA
-######################### END LICENSE BLOCK #########################
-
-from mbcharsetprober import MultiByteCharSetProber
-from codingstatemachine import CodingStateMachine
-from chardistribution import Big5DistributionAnalysis
-from mbcssm import Big5SMModel
-
-class Big5Prober(MultiByteCharSetProber):
- def __init__(self):
- MultiByteCharSetProber.__init__(self)
- self._mCodingSM = CodingStateMachine(Big5SMModel)
- self._mDistributionAnalyzer = Big5DistributionAnalysis()
- self.reset()
-
- def get_charset_name(self):
- return "Big5"
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/chardistribution.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/chardistribution.py
deleted file mode 100644
index b893341..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/chardistribution.py
+++ /dev/null
@@ -1,200 +0,0 @@
-######################## BEGIN LICENSE BLOCK ########################
-# The Original Code is Mozilla Communicator client code.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 1998
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-# Mark Pilgrim - port to Python
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301 USA
-######################### END LICENSE BLOCK #########################
-
-import constants
-from euctwfreq import EUCTWCharToFreqOrder, EUCTW_TABLE_SIZE, EUCTW_TYPICAL_DISTRIBUTION_RATIO
-from euckrfreq import EUCKRCharToFreqOrder, EUCKR_TABLE_SIZE, EUCKR_TYPICAL_DISTRIBUTION_RATIO
-from gb2312freq import GB2312CharToFreqOrder, GB2312_TABLE_SIZE, GB2312_TYPICAL_DISTRIBUTION_RATIO
-from big5freq import Big5CharToFreqOrder, BIG5_TABLE_SIZE, BIG5_TYPICAL_DISTRIBUTION_RATIO
-from jisfreq import JISCharToFreqOrder, JIS_TABLE_SIZE, JIS_TYPICAL_DISTRIBUTION_RATIO
-
-ENOUGH_DATA_THRESHOLD = 1024
-SURE_YES = 0.99
-SURE_NO = 0.01
-
-class CharDistributionAnalysis:
- def __init__(self):
- self._mCharToFreqOrder = None # Mapping table to get frequency order from char order (get from GetOrder())
- self._mTableSize = None # Size of above table
- self._mTypicalDistributionRatio = None # This is a constant value which varies from language to language, used in calculating confidence. See http://www.mozilla.org/projects/intl/UniversalCharsetDetection.html for further detail.
- self.reset()
-
- def reset(self):
- """reset analyser, clear any state"""
- self._mDone = constants.False # If this flag is set to constants.True, detection is done and conclusion has been made
- self._mTotalChars = 0 # Total characters encountered
- self._mFreqChars = 0 # The number of characters whose frequency order is less than 512
-
- def feed(self, aStr, aCharLen):
- """feed a character with known length"""
- if aCharLen == 2:
- # we only care about 2-bytes character in our distribution analysis
- order = self.get_order(aStr)
- else:
- order = -1
- if order >= 0:
- self._mTotalChars += 1
- # order is valid
- if order < self._mTableSize:
- if 512 > self._mCharToFreqOrder[order]:
- self._mFreqChars += 1
-
- def get_confidence(self):
- """return confidence based on existing data"""
- # if we didn't receive any character in our consideration range, return negative answer
- if self._mTotalChars <= 0:
- return SURE_NO
-
- if self._mTotalChars != self._mFreqChars:
- r = self._mFreqChars / ((self._mTotalChars - self._mFreqChars) * self._mTypicalDistributionRatio)
- if r < SURE_YES:
- return r
-
- # normalize confidence (we don't want to be 100% sure)
- return SURE_YES
-
- def got_enough_data(self):
- # It is not necessary to receive all data to draw conclusion. For charset detection,
- # certain amount of data is enough
- return self._mTotalChars > ENOUGH_DATA_THRESHOLD
-
- def get_order(self, aStr):
- # We do not handle characters based on the original encoding string, but
- # convert this encoding string to a number, here called order.
- # This allows multiple encodings of a language to share one frequency table.
- return -1
-
-class EUCTWDistributionAnalysis(CharDistributionAnalysis):
- def __init__(self):
- CharDistributionAnalysis.__init__(self)
- self._mCharToFreqOrder = EUCTWCharToFreqOrder
- self._mTableSize = EUCTW_TABLE_SIZE
- self._mTypicalDistributionRatio = EUCTW_TYPICAL_DISTRIBUTION_RATIO
-
- def get_order(self, aStr):
- # for euc-TW encoding, we are interested
- # first byte range: 0xc4 -- 0xfe
- # second byte range: 0xa1 -- 0xfe
- # no validation needed here. State machine has done that
- if aStr[0] >= '\xC4':
- return 94 * (ord(aStr[0]) - 0xC4) + ord(aStr[1]) - 0xA1
- else:
- return -1
-
-class EUCKRDistributionAnalysis(CharDistributionAnalysis):
- def __init__(self):
- CharDistributionAnalysis.__init__(self)
- self._mCharToFreqOrder = EUCKRCharToFreqOrder
- self._mTableSize = EUCKR_TABLE_SIZE
- self._mTypicalDistributionRatio = EUCKR_TYPICAL_DISTRIBUTION_RATIO
-
- def get_order(self, aStr):
- # for euc-KR encoding, we are interested
- # first byte range: 0xb0 -- 0xfe
- # second byte range: 0xa1 -- 0xfe
- # no validation needed here. State machine has done that
- if aStr[0] >= '\xB0':
- return 94 * (ord(aStr[0]) - 0xB0) + ord(aStr[1]) - 0xA1
- else:
- return -1;
-
-class GB2312DistributionAnalysis(CharDistributionAnalysis):
- def __init__(self):
- CharDistributionAnalysis.__init__(self)
- self._mCharToFreqOrder = GB2312CharToFreqOrder
- self._mTableSize = GB2312_TABLE_SIZE
- self._mTypicalDistributionRatio = GB2312_TYPICAL_DISTRIBUTION_RATIO
-
- def get_order(self, aStr):
- # for GB2312 encoding, we are interested
- # first byte range: 0xb0 -- 0xfe
- # second byte range: 0xa1 -- 0xfe
- # no validation needed here. State machine has done that
- if (aStr[0] >= '\xB0') and (aStr[1] >= '\xA1'):
- return 94 * (ord(aStr[0]) - 0xB0) + ord(aStr[1]) - 0xA1
- else:
- return -1;
-
-class Big5DistributionAnalysis(CharDistributionAnalysis):
- def __init__(self):
- CharDistributionAnalysis.__init__(self)
- self._mCharToFreqOrder = Big5CharToFreqOrder
- self._mTableSize = BIG5_TABLE_SIZE
- self._mTypicalDistributionRatio = BIG5_TYPICAL_DISTRIBUTION_RATIO
-
- def get_order(self, aStr):
- # for big5 encoding, we are interested
- # first byte range: 0xa4 -- 0xfe
- # second byte range: 0x40 -- 0x7e , 0xa1 -- 0xfe
- # no validation needed here. State machine has done that
- if aStr[0] >= '\xA4':
- if aStr[1] >= '\xA1':
- return 157 * (ord(aStr[0]) - 0xA4) + ord(aStr[1]) - 0xA1 + 63
- else:
- return 157 * (ord(aStr[0]) - 0xA4) + ord(aStr[1]) - 0x40
- else:
- return -1
-
-class SJISDistributionAnalysis(CharDistributionAnalysis):
- def __init__(self):
- CharDistributionAnalysis.__init__(self)
- self._mCharToFreqOrder = JISCharToFreqOrder
- self._mTableSize = JIS_TABLE_SIZE
- self._mTypicalDistributionRatio = JIS_TYPICAL_DISTRIBUTION_RATIO
-
- def get_order(self, aStr):
- # for sjis encoding, we are interested
- # first byte range: 0x81 -- 0x9f , 0xe0 -- 0xfe
- # second byte range: 0x40 -- 0x7e, 0x81 -- oxfe
- # no validation needed here. State machine has done that
- if (aStr[0] >= '\x81') and (aStr[0] <= '\x9F'):
- order = 188 * (ord(aStr[0]) - 0x81)
- elif (aStr[0] >= '\xE0') and (aStr[0] <= '\xEF'):
- order = 188 * (ord(aStr[0]) - 0xE0 + 31)
- else:
- return -1;
- order = order + ord(aStr[1]) - 0x40
- if aStr[1] > '\x7F':
- order =- 1
- return order
-
-class EUCJPDistributionAnalysis(CharDistributionAnalysis):
- def __init__(self):
- CharDistributionAnalysis.__init__(self)
- self._mCharToFreqOrder = JISCharToFreqOrder
- self._mTableSize = JIS_TABLE_SIZE
- self._mTypicalDistributionRatio = JIS_TYPICAL_DISTRIBUTION_RATIO
-
- def get_order(self, aStr):
- # for euc-JP encoding, we are interested
- # first byte range: 0xa0 -- 0xfe
- # second byte range: 0xa1 -- 0xfe
- # no validation needed here. State machine has done that
- if aStr[0] >= '\xA0':
- return 94 * (ord(aStr[0]) - 0xA1) + ord(aStr[1]) - 0xa1
- else:
- return -1
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/charsetgroupprober.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/charsetgroupprober.py
deleted file mode 100644
index 5188069..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/charsetgroupprober.py
+++ /dev/null
@@ -1,96 +0,0 @@
-######################## BEGIN LICENSE BLOCK ########################
-# The Original Code is Mozilla Communicator client code.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 1998
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-# Mark Pilgrim - port to Python
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301 USA
-######################### END LICENSE BLOCK #########################
-
-import constants, sys
-from charsetprober import CharSetProber
-
-class CharSetGroupProber(CharSetProber):
- def __init__(self):
- CharSetProber.__init__(self)
- self._mActiveNum = 0
- self._mProbers = []
- self._mBestGuessProber = None
-
- def reset(self):
- CharSetProber.reset(self)
- self._mActiveNum = 0
- for prober in self._mProbers:
- if prober:
- prober.reset()
- prober.active = constants.True
- self._mActiveNum += 1
- self._mBestGuessProber = None
-
- def get_charset_name(self):
- if not self._mBestGuessProber:
- self.get_confidence()
- if not self._mBestGuessProber: return None
-# self._mBestGuessProber = self._mProbers[0]
- return self._mBestGuessProber.get_charset_name()
-
- def feed(self, aBuf):
- for prober in self._mProbers:
- if not prober: continue
- if not prober.active: continue
- st = prober.feed(aBuf)
- if not st: continue
- if st == constants.eFoundIt:
- self._mBestGuessProber = prober
- return self.get_state()
- elif st == constants.eNotMe:
- prober.active = constants.False
- self._mActiveNum -= 1
- if self._mActiveNum <= 0:
- self._mState = constants.eNotMe
- return self.get_state()
- return self.get_state()
-
- def get_confidence(self):
- st = self.get_state()
- if st == constants.eFoundIt:
- return 0.99
- elif st == constants.eNotMe:
- return 0.01
- bestConf = 0.0
- self._mBestGuessProber = None
- for prober in self._mProbers:
- if not prober: continue
- if not prober.active:
- if constants._debug:
- sys.stderr.write(prober.get_charset_name() + ' not active\n')
- continue
- cf = prober.get_confidence()
- if constants._debug:
- sys.stderr.write('%s confidence = %s\n' % (prober.get_charset_name(), cf))
- if bestConf < cf:
- bestConf = cf
- self._mBestGuessProber = prober
- if not self._mBestGuessProber: return 0.0
- return bestConf
-# else:
-# self._mBestGuessProber = self._mProbers[0]
-# return self._mBestGuessProber.get_confidence()
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/charsetprober.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/charsetprober.py
deleted file mode 100644
index 3ac1683..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/charsetprober.py
+++ /dev/null
@@ -1,60 +0,0 @@
-######################## BEGIN LICENSE BLOCK ########################
-# The Original Code is Mozilla Universal charset detector code.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 2001
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-# Mark Pilgrim - port to Python
-# Shy Shalom - original C code
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301 USA
-######################### END LICENSE BLOCK #########################
-
-import constants, re
-
-class CharSetProber:
- def __init__(self):
- pass
-
- def reset(self):
- self._mState = constants.eDetecting
-
- def get_charset_name(self):
- return None
-
- def feed(self, aBuf):
- pass
-
- def get_state(self):
- return self._mState
-
- def get_confidence(self):
- return 0.0
-
- def filter_high_bit_only(self, aBuf):
- aBuf = re.sub(r'([\x00-\x7F])+', ' ', aBuf)
- return aBuf
-
- def filter_without_english_letters(self, aBuf):
- aBuf = re.sub(r'([A-Za-z])+', ' ', aBuf)
- return aBuf
-
- def filter_with_english_letters(self, aBuf):
- # TODO
- return aBuf
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/codingstatemachine.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/codingstatemachine.py
deleted file mode 100644
index 452d3b0..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/codingstatemachine.py
+++ /dev/null
@@ -1,56 +0,0 @@
-######################## BEGIN LICENSE BLOCK ########################
-# The Original Code is mozilla.org code.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 1998
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-# Mark Pilgrim - port to Python
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301 USA
-######################### END LICENSE BLOCK #########################
-
-from constants import eStart, eError, eItsMe
-
-class CodingStateMachine:
- def __init__(self, sm):
- self._mModel = sm
- self._mCurrentBytePos = 0
- self._mCurrentCharLen = 0
- self.reset()
-
- def reset(self):
- self._mCurrentState = eStart
-
- def next_state(self, c):
- # for each byte we get its class
- # if it is first byte, we also get byte length
- byteCls = self._mModel['classTable'][ord(c)]
- if self._mCurrentState == eStart:
- self._mCurrentBytePos = 0
- self._mCurrentCharLen = self._mModel['charLenTable'][byteCls]
- # from byte's class and stateTable, we get its next state
- self._mCurrentState = self._mModel['stateTable'][self._mCurrentState * self._mModel['classFactor'] + byteCls]
- self._mCurrentBytePos += 1
- return self._mCurrentState
-
- def get_current_charlen(self):
- return self._mCurrentCharLen
-
- def get_coding_state_machine(self):
- return self._mModel['name']
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/constants.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/constants.py
deleted file mode 100644
index e94e226..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/constants.py
+++ /dev/null
@@ -1,47 +0,0 @@
-######################## BEGIN LICENSE BLOCK ########################
-# The Original Code is Mozilla Universal charset detector code.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 2001
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-# Mark Pilgrim - port to Python
-# Shy Shalom - original C code
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301 USA
-######################### END LICENSE BLOCK #########################
-
-_debug = 0
-
-eDetecting = 0
-eFoundIt = 1
-eNotMe = 2
-
-eStart = 0
-eError = 1
-eItsMe = 2
-
-SHORTCUT_THRESHOLD = 0.95
-
-import __builtin__
-if not hasattr(__builtin__, 'False'):
- False = 0
- True = 1
-else:
- False = __builtin__.False
- True = __builtin__.True
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/escprober.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/escprober.py
deleted file mode 100644
index 572ed7b..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/escprober.py
+++ /dev/null
@@ -1,79 +0,0 @@
-######################## BEGIN LICENSE BLOCK ########################
-# The Original Code is mozilla.org code.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 1998
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-# Mark Pilgrim - port to Python
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301 USA
-######################### END LICENSE BLOCK #########################
-
-import constants, sys
-from escsm import HZSMModel, ISO2022CNSMModel, ISO2022JPSMModel, ISO2022KRSMModel
-from charsetprober import CharSetProber
-from codingstatemachine import CodingStateMachine
-
-class EscCharSetProber(CharSetProber):
- def __init__(self):
- CharSetProber.__init__(self)
- self._mCodingSM = [ \
- CodingStateMachine(HZSMModel),
- CodingStateMachine(ISO2022CNSMModel),
- CodingStateMachine(ISO2022JPSMModel),
- CodingStateMachine(ISO2022KRSMModel)
- ]
- self.reset()
-
- def reset(self):
- CharSetProber.reset(self)
- for codingSM in self._mCodingSM:
- if not codingSM: continue
- codingSM.active = constants.True
- codingSM.reset()
- self._mActiveSM = len(self._mCodingSM)
- self._mDetectedCharset = None
-
- def get_charset_name(self):
- return self._mDetectedCharset
-
- def get_confidence(self):
- if self._mDetectedCharset:
- return 0.99
- else:
- return 0.00
-
- def feed(self, aBuf):
- for c in aBuf:
- for codingSM in self._mCodingSM:
- if not codingSM: continue
- if not codingSM.active: continue
- codingState = codingSM.next_state(c)
- if codingState == constants.eError:
- codingSM.active = constants.False
- self._mActiveSM -= 1
- if self._mActiveSM <= 0:
- self._mState = constants.eNotMe
- return self.get_state()
- elif codingState == constants.eItsMe:
- self._mState = constants.eFoundIt
- self._mDetectedCharset = codingSM.get_coding_state_machine()
- return self.get_state()
-
- return self.get_state()
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/escsm.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/escsm.py
deleted file mode 100644
index 9fa2295..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/escsm.py
+++ /dev/null
@@ -1,240 +0,0 @@
-######################## BEGIN LICENSE BLOCK ########################
-# The Original Code is mozilla.org code.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 1998
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-# Mark Pilgrim - port to Python
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301 USA
-######################### END LICENSE BLOCK #########################
-
-from constants import eStart, eError, eItsMe
-
-HZ_cls = ( \
-1,0,0,0,0,0,0,0, # 00 - 07
-0,0,0,0,0,0,0,0, # 08 - 0f
-0,0,0,0,0,0,0,0, # 10 - 17
-0,0,0,1,0,0,0,0, # 18 - 1f
-0,0,0,0,0,0,0,0, # 20 - 27
-0,0,0,0,0,0,0,0, # 28 - 2f
-0,0,0,0,0,0,0,0, # 30 - 37
-0,0,0,0,0,0,0,0, # 38 - 3f
-0,0,0,0,0,0,0,0, # 40 - 47
-0,0,0,0,0,0,0,0, # 48 - 4f
-0,0,0,0,0,0,0,0, # 50 - 57
-0,0,0,0,0,0,0,0, # 58 - 5f
-0,0,0,0,0,0,0,0, # 60 - 67
-0,0,0,0,0,0,0,0, # 68 - 6f
-0,0,0,0,0,0,0,0, # 70 - 77
-0,0,0,4,0,5,2,0, # 78 - 7f
-1,1,1,1,1,1,1,1, # 80 - 87
-1,1,1,1,1,1,1,1, # 88 - 8f
-1,1,1,1,1,1,1,1, # 90 - 97
-1,1,1,1,1,1,1,1, # 98 - 9f
-1,1,1,1,1,1,1,1, # a0 - a7
-1,1,1,1,1,1,1,1, # a8 - af
-1,1,1,1,1,1,1,1, # b0 - b7
-1,1,1,1,1,1,1,1, # b8 - bf
-1,1,1,1,1,1,1,1, # c0 - c7
-1,1,1,1,1,1,1,1, # c8 - cf
-1,1,1,1,1,1,1,1, # d0 - d7
-1,1,1,1,1,1,1,1, # d8 - df
-1,1,1,1,1,1,1,1, # e0 - e7
-1,1,1,1,1,1,1,1, # e8 - ef
-1,1,1,1,1,1,1,1, # f0 - f7
-1,1,1,1,1,1,1,1, # f8 - ff
-)
-
-HZ_st = ( \
-eStart,eError, 3,eStart,eStart,eStart,eError,eError,# 00-07
-eError,eError,eError,eError,eItsMe,eItsMe,eItsMe,eItsMe,# 08-0f
-eItsMe,eItsMe,eError,eError,eStart,eStart, 4,eError,# 10-17
- 5,eError, 6,eError, 5, 5, 4,eError,# 18-1f
- 4,eError, 4, 4, 4,eError, 4,eError,# 20-27
- 4,eItsMe,eStart,eStart,eStart,eStart,eStart,eStart,# 28-2f
-)
-
-HZCharLenTable = (0, 0, 0, 0, 0, 0)
-
-HZSMModel = {'classTable': HZ_cls,
- 'classFactor': 6,
- 'stateTable': HZ_st,
- 'charLenTable': HZCharLenTable,
- 'name': "HZ-GB-2312"}
-
-ISO2022CN_cls = ( \
-2,0,0,0,0,0,0,0, # 00 - 07
-0,0,0,0,0,0,0,0, # 08 - 0f
-0,0,0,0,0,0,0,0, # 10 - 17
-0,0,0,1,0,0,0,0, # 18 - 1f
-0,0,0,0,0,0,0,0, # 20 - 27
-0,3,0,0,0,0,0,0, # 28 - 2f
-0,0,0,0,0,0,0,0, # 30 - 37
-0,0,0,0,0,0,0,0, # 38 - 3f
-0,0,0,4,0,0,0,0, # 40 - 47
-0,0,0,0,0,0,0,0, # 48 - 4f
-0,0,0,0,0,0,0,0, # 50 - 57
-0,0,0,0,0,0,0,0, # 58 - 5f
-0,0,0,0,0,0,0,0, # 60 - 67
-0,0,0,0,0,0,0,0, # 68 - 6f
-0,0,0,0,0,0,0,0, # 70 - 77
-0,0,0,0,0,0,0,0, # 78 - 7f
-2,2,2,2,2,2,2,2, # 80 - 87
-2,2,2,2,2,2,2,2, # 88 - 8f
-2,2,2,2,2,2,2,2, # 90 - 97
-2,2,2,2,2,2,2,2, # 98 - 9f
-2,2,2,2,2,2,2,2, # a0 - a7
-2,2,2,2,2,2,2,2, # a8 - af
-2,2,2,2,2,2,2,2, # b0 - b7
-2,2,2,2,2,2,2,2, # b8 - bf
-2,2,2,2,2,2,2,2, # c0 - c7
-2,2,2,2,2,2,2,2, # c8 - cf
-2,2,2,2,2,2,2,2, # d0 - d7
-2,2,2,2,2,2,2,2, # d8 - df
-2,2,2,2,2,2,2,2, # e0 - e7
-2,2,2,2,2,2,2,2, # e8 - ef
-2,2,2,2,2,2,2,2, # f0 - f7
-2,2,2,2,2,2,2,2, # f8 - ff
-)
-
-ISO2022CN_st = ( \
-eStart, 3,eError,eStart,eStart,eStart,eStart,eStart,# 00-07
-eStart,eError,eError,eError,eError,eError,eError,eError,# 08-0f
-eError,eError,eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,# 10-17
-eItsMe,eItsMe,eItsMe,eError,eError,eError, 4,eError,# 18-1f
-eError,eError,eError,eItsMe,eError,eError,eError,eError,# 20-27
- 5, 6,eError,eError,eError,eError,eError,eError,# 28-2f
-eError,eError,eError,eItsMe,eError,eError,eError,eError,# 30-37
-eError,eError,eError,eError,eError,eItsMe,eError,eStart,# 38-3f
-)
-
-ISO2022CNCharLenTable = (0, 0, 0, 0, 0, 0, 0, 0, 0)
-
-ISO2022CNSMModel = {'classTable': ISO2022CN_cls,
- 'classFactor': 9,
- 'stateTable': ISO2022CN_st,
- 'charLenTable': ISO2022CNCharLenTable,
- 'name': "ISO-2022-CN"}
-
-ISO2022JP_cls = ( \
-2,0,0,0,0,0,0,0, # 00 - 07
-0,0,0,0,0,0,2,2, # 08 - 0f
-0,0,0,0,0,0,0,0, # 10 - 17
-0,0,0,1,0,0,0,0, # 18 - 1f
-0,0,0,0,7,0,0,0, # 20 - 27
-3,0,0,0,0,0,0,0, # 28 - 2f
-0,0,0,0,0,0,0,0, # 30 - 37
-0,0,0,0,0,0,0,0, # 38 - 3f
-6,0,4,0,8,0,0,0, # 40 - 47
-0,9,5,0,0,0,0,0, # 48 - 4f
-0,0,0,0,0,0,0,0, # 50 - 57
-0,0,0,0,0,0,0,0, # 58 - 5f
-0,0,0,0,0,0,0,0, # 60 - 67
-0,0,0,0,0,0,0,0, # 68 - 6f
-0,0,0,0,0,0,0,0, # 70 - 77
-0,0,0,0,0,0,0,0, # 78 - 7f
-2,2,2,2,2,2,2,2, # 80 - 87
-2,2,2,2,2,2,2,2, # 88 - 8f
-2,2,2,2,2,2,2,2, # 90 - 97
-2,2,2,2,2,2,2,2, # 98 - 9f
-2,2,2,2,2,2,2,2, # a0 - a7
-2,2,2,2,2,2,2,2, # a8 - af
-2,2,2,2,2,2,2,2, # b0 - b7
-2,2,2,2,2,2,2,2, # b8 - bf
-2,2,2,2,2,2,2,2, # c0 - c7
-2,2,2,2,2,2,2,2, # c8 - cf
-2,2,2,2,2,2,2,2, # d0 - d7
-2,2,2,2,2,2,2,2, # d8 - df
-2,2,2,2,2,2,2,2, # e0 - e7
-2,2,2,2,2,2,2,2, # e8 - ef
-2,2,2,2,2,2,2,2, # f0 - f7
-2,2,2,2,2,2,2,2, # f8 - ff
-)
-
-ISO2022JP_st = ( \
-eStart, 3,eError,eStart,eStart,eStart,eStart,eStart,# 00-07
-eStart,eStart,eError,eError,eError,eError,eError,eError,# 08-0f
-eError,eError,eError,eError,eItsMe,eItsMe,eItsMe,eItsMe,# 10-17
-eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eError,eError,# 18-1f
-eError, 5,eError,eError,eError, 4,eError,eError,# 20-27
-eError,eError,eError, 6,eItsMe,eError,eItsMe,eError,# 28-2f
-eError,eError,eError,eError,eError,eError,eItsMe,eItsMe,# 30-37
-eError,eError,eError,eItsMe,eError,eError,eError,eError,# 38-3f
-eError,eError,eError,eError,eItsMe,eError,eStart,eStart,# 40-47
-)
-
-ISO2022JPCharLenTable = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
-
-ISO2022JPSMModel = {'classTable': ISO2022JP_cls,
- 'classFactor': 10,
- 'stateTable': ISO2022JP_st,
- 'charLenTable': ISO2022JPCharLenTable,
- 'name': "ISO-2022-JP"}
-
-ISO2022KR_cls = ( \
-2,0,0,0,0,0,0,0, # 00 - 07
-0,0,0,0,0,0,0,0, # 08 - 0f
-0,0,0,0,0,0,0,0, # 10 - 17
-0,0,0,1,0,0,0,0, # 18 - 1f
-0,0,0,0,3,0,0,0, # 20 - 27
-0,4,0,0,0,0,0,0, # 28 - 2f
-0,0,0,0,0,0,0,0, # 30 - 37
-0,0,0,0,0,0,0,0, # 38 - 3f
-0,0,0,5,0,0,0,0, # 40 - 47
-0,0,0,0,0,0,0,0, # 48 - 4f
-0,0,0,0,0,0,0,0, # 50 - 57
-0,0,0,0,0,0,0,0, # 58 - 5f
-0,0,0,0,0,0,0,0, # 60 - 67
-0,0,0,0,0,0,0,0, # 68 - 6f
-0,0,0,0,0,0,0,0, # 70 - 77
-0,0,0,0,0,0,0,0, # 78 - 7f
-2,2,2,2,2,2,2,2, # 80 - 87
-2,2,2,2,2,2,2,2, # 88 - 8f
-2,2,2,2,2,2,2,2, # 90 - 97
-2,2,2,2,2,2,2,2, # 98 - 9f
-2,2,2,2,2,2,2,2, # a0 - a7
-2,2,2,2,2,2,2,2, # a8 - af
-2,2,2,2,2,2,2,2, # b0 - b7
-2,2,2,2,2,2,2,2, # b8 - bf
-2,2,2,2,2,2,2,2, # c0 - c7
-2,2,2,2,2,2,2,2, # c8 - cf
-2,2,2,2,2,2,2,2, # d0 - d7
-2,2,2,2,2,2,2,2, # d8 - df
-2,2,2,2,2,2,2,2, # e0 - e7
-2,2,2,2,2,2,2,2, # e8 - ef
-2,2,2,2,2,2,2,2, # f0 - f7
-2,2,2,2,2,2,2,2, # f8 - ff
-)
-
-ISO2022KR_st = ( \
-eStart, 3,eError,eStart,eStart,eStart,eError,eError,# 00-07
-eError,eError,eError,eError,eItsMe,eItsMe,eItsMe,eItsMe,# 08-0f
-eItsMe,eItsMe,eError,eError,eError, 4,eError,eError,# 10-17
-eError,eError,eError,eError, 5,eError,eError,eError,# 18-1f
-eError,eError,eError,eItsMe,eStart,eStart,eStart,eStart,# 20-27
-)
-
-ISO2022KRCharLenTable = (0, 0, 0, 0, 0, 0)
-
-ISO2022KRSMModel = {'classTable': ISO2022KR_cls,
- 'classFactor': 6,
- 'stateTable': ISO2022KR_st,
- 'charLenTable': ISO2022KRCharLenTable,
- 'name': "ISO-2022-KR"}
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/eucjpprober.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/eucjpprober.py
deleted file mode 100644
index 46a8b38..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/eucjpprober.py
+++ /dev/null
@@ -1,85 +0,0 @@
-######################## BEGIN LICENSE BLOCK ########################
-# The Original Code is mozilla.org code.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 1998
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-# Mark Pilgrim - port to Python
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301 USA
-######################### END LICENSE BLOCK #########################
-
-import constants, sys
-from constants import eStart, eError, eItsMe
-from mbcharsetprober import MultiByteCharSetProber
-from codingstatemachine import CodingStateMachine
-from chardistribution import EUCJPDistributionAnalysis
-from jpcntx import EUCJPContextAnalysis
-from mbcssm import EUCJPSMModel
-
-class EUCJPProber(MultiByteCharSetProber):
- def __init__(self):
- MultiByteCharSetProber.__init__(self)
- self._mCodingSM = CodingStateMachine(EUCJPSMModel)
- self._mDistributionAnalyzer = EUCJPDistributionAnalysis()
- self._mContextAnalyzer = EUCJPContextAnalysis()
- self.reset()
-
- def reset(self):
- MultiByteCharSetProber.reset(self)
- self._mContextAnalyzer.reset()
-
- def get_charset_name(self):
- return "EUC-JP"
-
- def feed(self, aBuf):
- aLen = len(aBuf)
- for i in range(0, aLen):
- codingState = self._mCodingSM.next_state(aBuf[i])
- if codingState == eError:
- if constants._debug:
- sys.stderr.write(self.get_charset_name() + ' prober hit error at byte ' + str(i) + '\n')
- self._mState = constants.eNotMe
- break
- elif codingState == eItsMe:
- self._mState = constants.eFoundIt
- break
- elif codingState == eStart:
- charLen = self._mCodingSM.get_current_charlen()
- if i == 0:
- self._mLastChar[1] = aBuf[0]
- self._mContextAnalyzer.feed(self._mLastChar, charLen)
- self._mDistributionAnalyzer.feed(self._mLastChar, charLen)
- else:
- self._mContextAnalyzer.feed(aBuf[i-1:i+1], charLen)
- self._mDistributionAnalyzer.feed(aBuf[i-1:i+1], charLen)
-
- self._mLastChar[0] = aBuf[aLen - 1]
-
- if self.get_state() == constants.eDetecting:
- if self._mContextAnalyzer.got_enough_data() and \
- (self.get_confidence() > constants.SHORTCUT_THRESHOLD):
- self._mState = constants.eFoundIt
-
- return self.get_state()
-
- def get_confidence(self):
- contxtCf = self._mContextAnalyzer.get_confidence()
- distribCf = self._mDistributionAnalyzer.get_confidence()
- return max(contxtCf, distribCf)
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/euckrfreq.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/euckrfreq.py
deleted file mode 100644
index 1463fa1..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/euckrfreq.py
+++ /dev/null
@@ -1,594 +0,0 @@
-######################## BEGIN LICENSE BLOCK ########################
-# The Original Code is Mozilla Communicator client code.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 1998
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-# Mark Pilgrim - port to Python
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301 USA
-######################### END LICENSE BLOCK #########################
-
-# Sampling from about 20M text materials include literature and computer technology
-
-# 128 --> 0.79
-# 256 --> 0.92
-# 512 --> 0.986
-# 1024 --> 0.99944
-# 2048 --> 0.99999
-#
-# Idea Distribution Ratio = 0.98653 / (1-0.98653) = 73.24
-# Random Distribution Ration = 512 / (2350-512) = 0.279.
-#
-# Typical Distribution Ratio
-
-EUCKR_TYPICAL_DISTRIBUTION_RATIO = 6.0
-
-EUCKR_TABLE_SIZE = 2352
-
-# Char to FreqOrder table ,
-EUCKRCharToFreqOrder = ( \
- 13, 130, 120,1396, 481,1719,1720, 328, 609, 212,1721, 707, 400, 299,1722, 87,
-1397,1723, 104, 536,1117,1203,1724,1267, 685,1268, 508,1725,1726,1727,1728,1398,
-1399,1729,1730,1731, 141, 621, 326,1057, 368,1732, 267, 488, 20,1733,1269,1734,
- 945,1400,1735, 47, 904,1270,1736,1737, 773, 248,1738, 409, 313, 786, 429,1739,
- 116, 987, 813,1401, 683, 75,1204, 145,1740,1741,1742,1743, 16, 847, 667, 622,
- 708,1744,1745,1746, 966, 787, 304, 129,1747, 60, 820, 123, 676,1748,1749,1750,
-1751, 617,1752, 626,1753,1754,1755,1756, 653,1757,1758,1759,1760,1761,1762, 856,
- 344,1763,1764,1765,1766, 89, 401, 418, 806, 905, 848,1767,1768,1769, 946,1205,
- 709,1770,1118,1771, 241,1772,1773,1774,1271,1775, 569,1776, 999,1777,1778,1779,
-1780, 337, 751,1058, 28, 628, 254,1781, 177, 906, 270, 349, 891,1079,1782, 19,
-1783, 379,1784, 315,1785, 629, 754,1402, 559,1786, 636, 203,1206,1787, 710, 567,
-1788, 935, 814,1789,1790,1207, 766, 528,1791,1792,1208,1793,1794,1795,1796,1797,
-1403,1798,1799, 533,1059,1404,1405,1156,1406, 936, 884,1080,1800, 351,1801,1802,
-1803,1804,1805, 801,1806,1807,1808,1119,1809,1157, 714, 474,1407,1810, 298, 899,
- 885,1811,1120, 802,1158,1812, 892,1813,1814,1408, 659,1815,1816,1121,1817,1818,
-1819,1820,1821,1822, 319,1823, 594, 545,1824, 815, 937,1209,1825,1826, 573,1409,
-1022,1827,1210,1828,1829,1830,1831,1832,1833, 556, 722, 807,1122,1060,1834, 697,
-1835, 900, 557, 715,1836,1410, 540,1411, 752,1159, 294, 597,1211, 976, 803, 770,
-1412,1837,1838, 39, 794,1413, 358,1839, 371, 925,1840, 453, 661, 788, 531, 723,
- 544,1023,1081, 869, 91,1841, 392, 430, 790, 602,1414, 677,1082, 457,1415,1416,
-1842,1843, 475, 327,1024,1417, 795, 121,1844, 733, 403,1418,1845,1846,1847, 300,
- 119, 711,1212, 627,1848,1272, 207,1849,1850, 796,1213, 382,1851, 519,1852,1083,
- 893,1853,1854,1855, 367, 809, 487, 671,1856, 663,1857,1858, 956, 471, 306, 857,
-1859,1860,1160,1084,1861,1862,1863,1864,1865,1061,1866,1867,1868,1869,1870,1871,
- 282, 96, 574,1872, 502,1085,1873,1214,1874, 907,1875,1876, 827, 977,1419,1420,
-1421, 268,1877,1422,1878,1879,1880, 308,1881, 2, 537,1882,1883,1215,1884,1885,
- 127, 791,1886,1273,1423,1887, 34, 336, 404, 643,1888, 571, 654, 894, 840,1889,
- 0, 886,1274, 122, 575, 260, 908, 938,1890,1275, 410, 316,1891,1892, 100,1893,
-1894,1123, 48,1161,1124,1025,1895, 633, 901,1276,1896,1897, 115, 816,1898, 317,
-1899, 694,1900, 909, 734,1424, 572, 866,1425, 691, 85, 524,1010, 543, 394, 841,
-1901,1902,1903,1026,1904,1905,1906,1907,1908,1909, 30, 451, 651, 988, 310,1910,
-1911,1426, 810,1216, 93,1912,1913,1277,1217,1914, 858, 759, 45, 58, 181, 610,
- 269,1915,1916, 131,1062, 551, 443,1000, 821,1427, 957, 895,1086,1917,1918, 375,
-1919, 359,1920, 687,1921, 822,1922, 293,1923,1924, 40, 662, 118, 692, 29, 939,
- 887, 640, 482, 174,1925, 69,1162, 728,1428, 910,1926,1278,1218,1279, 386, 870,
- 217, 854,1163, 823,1927,1928,1929,1930, 834,1931, 78,1932, 859,1933,1063,1934,
-1935,1936,1937, 438,1164, 208, 595,1938,1939,1940,1941,1219,1125,1942, 280, 888,
-1429,1430,1220,1431,1943,1944,1945,1946,1947,1280, 150, 510,1432,1948,1949,1950,
-1951,1952,1953,1954,1011,1087,1955,1433,1043,1956, 881,1957, 614, 958,1064,1065,
-1221,1958, 638,1001, 860, 967, 896,1434, 989, 492, 553,1281,1165,1959,1282,1002,
-1283,1222,1960,1961,1962,1963, 36, 383, 228, 753, 247, 454,1964, 876, 678,1965,
-1966,1284, 126, 464, 490, 835, 136, 672, 529, 940,1088,1435, 473,1967,1968, 467,
- 50, 390, 227, 587, 279, 378, 598, 792, 968, 240, 151, 160, 849, 882,1126,1285,
- 639,1044, 133, 140, 288, 360, 811, 563,1027, 561, 142, 523,1969,1970,1971, 7,
- 103, 296, 439, 407, 506, 634, 990,1972,1973,1974,1975, 645,1976,1977,1978,1979,
-1980,1981, 236,1982,1436,1983,1984,1089, 192, 828, 618, 518,1166, 333,1127,1985,
- 818,1223,1986,1987,1988,1989,1990,1991,1992,1993, 342,1128,1286, 746, 842,1994,
-1995, 560, 223,1287, 98, 8, 189, 650, 978,1288,1996,1437,1997, 17, 345, 250,
- 423, 277, 234, 512, 226, 97, 289, 42, 167,1998, 201,1999,2000, 843, 836, 824,
- 532, 338, 783,1090, 182, 576, 436,1438,1439, 527, 500,2001, 947, 889,2002,2003,
-2004,2005, 262, 600, 314, 447,2006, 547,2007, 693, 738,1129,2008, 71,1440, 745,
- 619, 688,2009, 829,2010,2011, 147,2012, 33, 948,2013,2014, 74, 224,2015, 61,
- 191, 918, 399, 637,2016,1028,1130, 257, 902,2017,2018,2019,2020,2021,2022,2023,
-2024,2025,2026, 837,2027,2028,2029,2030, 179, 874, 591, 52, 724, 246,2031,2032,
-2033,2034,1167, 969,2035,1289, 630, 605, 911,1091,1168,2036,2037,2038,1441, 912,
-2039, 623,2040,2041, 253,1169,1290,2042,1442, 146, 620, 611, 577, 433,2043,1224,
- 719,1170, 959, 440, 437, 534, 84, 388, 480,1131, 159, 220, 198, 679,2044,1012,
- 819,1066,1443, 113,1225, 194, 318,1003,1029,2045,2046,2047,2048,1067,2049,2050,
-2051,2052,2053, 59, 913, 112,2054, 632,2055, 455, 144, 739,1291,2056, 273, 681,
- 499,2057, 448,2058,2059, 760,2060,2061, 970, 384, 169, 245,1132,2062,2063, 414,
-1444,2064,2065, 41, 235,2066, 157, 252, 877, 568, 919, 789, 580,2067, 725,2068,
-2069,1292,2070,2071,1445,2072,1446,2073,2074, 55, 588, 66,1447, 271,1092,2075,
-1226,2076, 960,1013, 372,2077,2078,2079,2080,2081,1293,2082,2083,2084,2085, 850,
-2086,2087,2088,2089,2090, 186,2091,1068, 180,2092,2093,2094, 109,1227, 522, 606,
-2095, 867,1448,1093, 991,1171, 926, 353,1133,2096, 581,2097,2098,2099,1294,1449,
-1450,2100, 596,1172,1014,1228,2101,1451,1295,1173,1229,2102,2103,1296,1134,1452,
- 949,1135,2104,2105,1094,1453,1454,1455,2106,1095,2107,2108,2109,2110,2111,2112,
-2113,2114,2115,2116,2117, 804,2118,2119,1230,1231, 805,1456, 405,1136,2120,2121,
-2122,2123,2124, 720, 701,1297, 992,1457, 927,1004,2125,2126,2127,2128,2129,2130,
- 22, 417,2131, 303,2132, 385,2133, 971, 520, 513,2134,1174, 73,1096, 231, 274,
- 962,1458, 673,2135,1459,2136, 152,1137,2137,2138,2139,2140,1005,1138,1460,1139,
-2141,2142,2143,2144, 11, 374, 844,2145, 154,1232, 46,1461,2146, 838, 830, 721,
-1233, 106,2147, 90, 428, 462, 578, 566,1175, 352,2148,2149, 538,1234, 124,1298,
-2150,1462, 761, 565,2151, 686,2152, 649,2153, 72, 173,2154, 460, 415,2155,1463,
-2156,1235, 305,2157,2158,2159,2160,2161,2162, 579,2163,2164,2165,2166,2167, 747,
-2168,2169,2170,2171,1464, 669,2172,2173,2174,2175,2176,1465,2177, 23, 530, 285,
-2178, 335, 729,2179, 397,2180,2181,2182,1030,2183,2184, 698,2185,2186, 325,2187,
-2188, 369,2189, 799,1097,1015, 348,2190,1069, 680,2191, 851,1466,2192,2193, 10,
-2194, 613, 424,2195, 979, 108, 449, 589, 27, 172, 81,1031, 80, 774, 281, 350,
-1032, 525, 301, 582,1176,2196, 674,1045,2197,2198,1467, 730, 762,2199,2200,2201,
-2202,1468,2203, 993,2204,2205, 266,1070, 963,1140,2206,2207,2208, 664,1098, 972,
-2209,2210,2211,1177,1469,1470, 871,2212,2213,2214,2215,2216,1471,2217,2218,2219,
-2220,2221,2222,2223,2224,2225,2226,2227,1472,1236,2228,2229,2230,2231,2232,2233,
-2234,2235,1299,2236,2237, 200,2238, 477, 373,2239,2240, 731, 825, 777,2241,2242,
-2243, 521, 486, 548,2244,2245,2246,1473,1300, 53, 549, 137, 875, 76, 158,2247,
-1301,1474, 469, 396,1016, 278, 712,2248, 321, 442, 503, 767, 744, 941,1237,1178,
-1475,2249, 82, 178,1141,1179, 973,2250,1302,2251, 297,2252,2253, 570,2254,2255,
-2256, 18, 450, 206,2257, 290, 292,1142,2258, 511, 162, 99, 346, 164, 735,2259,
-1476,1477, 4, 554, 343, 798,1099,2260,1100,2261, 43, 171,1303, 139, 215,2262,
-2263, 717, 775,2264,1033, 322, 216,2265, 831,2266, 149,2267,1304,2268,2269, 702,
-1238, 135, 845, 347, 309,2270, 484,2271, 878, 655, 238,1006,1478,2272, 67,2273,
- 295,2274,2275, 461,2276, 478, 942, 412,2277,1034,2278,2279,2280, 265,2281, 541,
-2282,2283,2284,2285,2286, 70, 852,1071,2287,2288,2289,2290, 21, 56, 509, 117,
- 432,2291,2292, 331, 980, 552,1101, 148, 284, 105, 393,1180,1239, 755,2293, 187,
-2294,1046,1479,2295, 340,2296, 63,1047, 230,2297,2298,1305, 763,1306, 101, 800,
- 808, 494,2299,2300,2301, 903,2302, 37,1072, 14, 5,2303, 79, 675,2304, 312,
-2305,2306,2307,2308,2309,1480, 6,1307,2310,2311,2312, 1, 470, 35, 24, 229,
-2313, 695, 210, 86, 778, 15, 784, 592, 779, 32, 77, 855, 964,2314, 259,2315,
- 501, 380,2316,2317, 83, 981, 153, 689,1308,1481,1482,1483,2318,2319, 716,1484,
-2320,2321,2322,2323,2324,2325,1485,2326,2327, 128, 57, 68, 261,1048, 211, 170,
-1240, 31,2328, 51, 435, 742,2329,2330,2331, 635,2332, 264, 456,2333,2334,2335,
- 425,2336,1486, 143, 507, 263, 943,2337, 363, 920,1487, 256,1488,1102, 243, 601,
-1489,2338,2339,2340,2341,2342,2343,2344, 861,2345,2346,2347,2348,2349,2350, 395,
-2351,1490,1491, 62, 535, 166, 225,2352,2353, 668, 419,1241, 138, 604, 928,2354,
-1181,2355,1492,1493,2356,2357,2358,1143,2359, 696,2360, 387, 307,1309, 682, 476,
-2361,2362, 332, 12, 222, 156,2363, 232,2364, 641, 276, 656, 517,1494,1495,1035,
- 416, 736,1496,2365,1017, 586,2366,2367,2368,1497,2369, 242,2370,2371,2372,1498,
-2373, 965, 713,2374,2375,2376,2377, 740, 982,1499, 944,1500,1007,2378,2379,1310,
-1501,2380,2381,2382, 785, 329,2383,2384,1502,2385,2386,2387, 932,2388,1503,2389,
-2390,2391,2392,1242,2393,2394,2395,2396,2397, 994, 950,2398,2399,2400,2401,1504,
-1311,2402,2403,2404,2405,1049, 749,2406,2407, 853, 718,1144,1312,2408,1182,1505,
-2409,2410, 255, 516, 479, 564, 550, 214,1506,1507,1313, 413, 239, 444, 339,1145,
-1036,1508,1509,1314,1037,1510,1315,2411,1511,2412,2413,2414, 176, 703, 497, 624,
- 593, 921, 302,2415, 341, 165,1103,1512,2416,1513,2417,2418,2419, 376,2420, 700,
-2421,2422,2423, 258, 768,1316,2424,1183,2425, 995, 608,2426,2427,2428,2429, 221,
-2430,2431,2432,2433,2434,2435,2436,2437, 195, 323, 726, 188, 897, 983,1317, 377,
- 644,1050, 879,2438, 452,2439,2440,2441,2442,2443,2444, 914,2445,2446,2447,2448,
- 915, 489,2449,1514,1184,2450,2451, 515, 64, 427, 495,2452, 583,2453, 483, 485,
-1038, 562, 213,1515, 748, 666,2454,2455,2456,2457, 334,2458, 780, 996,1008, 705,
-1243,2459,2460,2461,2462,2463, 114,2464, 493,1146, 366, 163,1516, 961,1104,2465,
- 291,2466,1318,1105,2467,1517, 365,2468, 355, 951,1244,2469,1319,2470, 631,2471,
-2472, 218,1320, 364, 320, 756,1518,1519,1321,1520,1322,2473,2474,2475,2476, 997,
-2477,2478,2479,2480, 665,1185,2481, 916,1521,2482,2483,2484, 584, 684,2485,2486,
- 797,2487,1051,1186,2488,2489,2490,1522,2491,2492, 370,2493,1039,1187, 65,2494,
- 434, 205, 463,1188,2495, 125, 812, 391, 402, 826, 699, 286, 398, 155, 781, 771,
- 585,2496, 590, 505,1073,2497, 599, 244, 219, 917,1018, 952, 646,1523,2498,1323,
-2499,2500, 49, 984, 354, 741,2501, 625,2502,1324,2503,1019, 190, 357, 757, 491,
- 95, 782, 868,2504,2505,2506,2507,2508,2509, 134,1524,1074, 422,1525, 898,2510,
- 161,2511,2512,2513,2514, 769,2515,1526,2516,2517, 411,1325,2518, 472,1527,2519,
-2520,2521,2522,2523,2524, 985,2525,2526,2527,2528,2529,2530, 764,2531,1245,2532,
-2533, 25, 204, 311,2534, 496,2535,1052,2536,2537,2538,2539,2540,2541,2542, 199,
- 704, 504, 468, 758, 657,1528, 196, 44, 839,1246, 272, 750,2543, 765, 862,2544,
-2545,1326,2546, 132, 615, 933,2547, 732,2548,2549,2550,1189,1529,2551, 283,1247,
-1053, 607, 929,2552,2553,2554, 930, 183, 872, 616,1040,1147,2555,1148,1020, 441,
- 249,1075,2556,2557,2558, 466, 743,2559,2560,2561, 92, 514, 426, 420, 526,2562,
-2563,2564,2565,2566,2567,2568, 185,2569,2570,2571,2572, 776,1530, 658,2573, 362,
-2574, 361, 922,1076, 793,2575,2576,2577,2578,2579,2580,1531, 251,2581,2582,2583,
-2584,1532, 54, 612, 237,1327,2585,2586, 275, 408, 647, 111,2587,1533,1106, 465,
- 3, 458, 9, 38,2588, 107, 110, 890, 209, 26, 737, 498,2589,1534,2590, 431,
- 202, 88,1535, 356, 287,1107, 660,1149,2591, 381,1536, 986,1150, 445,1248,1151,
- 974,2592,2593, 846,2594, 446, 953, 184,1249,1250, 727,2595, 923, 193, 883,2596,
-2597,2598, 102, 324, 539, 817,2599, 421,1041,2600, 832,2601, 94, 175, 197, 406,
-2602, 459,2603,2604,2605,2606,2607, 330, 555,2608,2609,2610, 706,1108, 389,2611,
-2612,2613,2614, 233,2615, 833, 558, 931, 954,1251,2616,2617,1537, 546,2618,2619,
-1009,2620,2621,2622,1538, 690,1328,2623, 955,2624,1539,2625,2626, 772,2627,2628,
-2629,2630,2631, 924, 648, 863, 603,2632,2633, 934,1540, 864, 865,2634, 642,1042,
- 670,1190,2635,2636,2637,2638, 168,2639, 652, 873, 542,1054,1541,2640,2641,2642, # 512, 256
-#Everything below is of no interest for detection purpose
-2643,2644,2645,2646,2647,2648,2649,2650,2651,2652,2653,2654,2655,2656,2657,2658,
-2659,2660,2661,2662,2663,2664,2665,2666,2667,2668,2669,2670,2671,2672,2673,2674,
-2675,2676,2677,2678,2679,2680,2681,2682,2683,2684,2685,2686,2687,2688,2689,2690,
-2691,2692,2693,2694,2695,2696,2697,2698,2699,1542, 880,2700,2701,2702,2703,2704,
-2705,2706,2707,2708,2709,2710,2711,2712,2713,2714,2715,2716,2717,2718,2719,2720,
-2721,2722,2723,2724,2725,1543,2726,2727,2728,2729,2730,2731,2732,1544,2733,2734,
-2735,2736,2737,2738,2739,2740,2741,2742,2743,2744,2745,2746,2747,2748,2749,2750,
-2751,2752,2753,2754,1545,2755,2756,2757,2758,2759,2760,2761,2762,2763,2764,2765,
-2766,1546,2767,1547,2768,2769,2770,2771,2772,2773,2774,2775,2776,2777,2778,2779,
-2780,2781,2782,2783,2784,2785,2786,1548,2787,2788,2789,1109,2790,2791,2792,2793,
-2794,2795,2796,2797,2798,2799,2800,2801,2802,2803,2804,2805,2806,2807,2808,2809,
-2810,2811,2812,1329,2813,2814,2815,2816,2817,2818,2819,2820,2821,2822,2823,2824,
-2825,2826,2827,2828,2829,2830,2831,2832,2833,2834,2835,2836,2837,2838,2839,2840,
-2841,2842,2843,2844,2845,2846,2847,2848,2849,2850,2851,2852,2853,2854,2855,2856,
-1549,2857,2858,2859,2860,1550,2861,2862,1551,2863,2864,2865,2866,2867,2868,2869,
-2870,2871,2872,2873,2874,1110,1330,2875,2876,2877,2878,2879,2880,2881,2882,2883,
-2884,2885,2886,2887,2888,2889,2890,2891,2892,2893,2894,2895,2896,2897,2898,2899,
-2900,2901,2902,2903,2904,2905,2906,2907,2908,2909,2910,2911,2912,2913,2914,2915,
-2916,2917,2918,2919,2920,2921,2922,2923,2924,2925,2926,2927,2928,2929,2930,1331,
-2931,2932,2933,2934,2935,2936,2937,2938,2939,2940,2941,2942,2943,1552,2944,2945,
-2946,2947,2948,2949,2950,2951,2952,2953,2954,2955,2956,2957,2958,2959,2960,2961,
-2962,2963,2964,1252,2965,2966,2967,2968,2969,2970,2971,2972,2973,2974,2975,2976,
-2977,2978,2979,2980,2981,2982,2983,2984,2985,2986,2987,2988,2989,2990,2991,2992,
-2993,2994,2995,2996,2997,2998,2999,3000,3001,3002,3003,3004,3005,3006,3007,3008,
-3009,3010,3011,3012,1553,3013,3014,3015,3016,3017,1554,3018,1332,3019,3020,3021,
-3022,3023,3024,3025,3026,3027,3028,3029,3030,3031,3032,3033,3034,3035,3036,3037,
-3038,3039,3040,3041,3042,3043,3044,3045,3046,3047,3048,3049,3050,1555,3051,3052,
-3053,1556,1557,3054,3055,3056,3057,3058,3059,3060,3061,3062,3063,3064,3065,3066,
-3067,1558,3068,3069,3070,3071,3072,3073,3074,3075,3076,1559,3077,3078,3079,3080,
-3081,3082,3083,1253,3084,3085,3086,3087,3088,3089,3090,3091,3092,3093,3094,3095,
-3096,3097,3098,3099,3100,3101,3102,3103,3104,3105,3106,3107,3108,1152,3109,3110,
-3111,3112,3113,1560,3114,3115,3116,3117,1111,3118,3119,3120,3121,3122,3123,3124,
-3125,3126,3127,3128,3129,3130,3131,3132,3133,3134,3135,3136,3137,3138,3139,3140,
-3141,3142,3143,3144,3145,3146,3147,3148,3149,3150,3151,3152,3153,3154,3155,3156,
-3157,3158,3159,3160,3161,3162,3163,3164,3165,3166,3167,3168,3169,3170,3171,3172,
-3173,3174,3175,3176,1333,3177,3178,3179,3180,3181,3182,3183,3184,3185,3186,3187,
-3188,3189,1561,3190,3191,1334,3192,3193,3194,3195,3196,3197,3198,3199,3200,3201,
-3202,3203,3204,3205,3206,3207,3208,3209,3210,3211,3212,3213,3214,3215,3216,3217,
-3218,3219,3220,3221,3222,3223,3224,3225,3226,3227,3228,3229,3230,3231,3232,3233,
-3234,1562,3235,3236,3237,3238,3239,3240,3241,3242,3243,3244,3245,3246,3247,3248,
-3249,3250,3251,3252,3253,3254,3255,3256,3257,3258,3259,3260,3261,3262,3263,3264,
-3265,3266,3267,3268,3269,3270,3271,3272,3273,3274,3275,3276,3277,1563,3278,3279,
-3280,3281,3282,3283,3284,3285,3286,3287,3288,3289,3290,3291,3292,3293,3294,3295,
-3296,3297,3298,3299,3300,3301,3302,3303,3304,3305,3306,3307,3308,3309,3310,3311,
-3312,3313,3314,3315,3316,3317,3318,3319,3320,3321,3322,3323,3324,3325,3326,3327,
-3328,3329,3330,3331,3332,3333,3334,3335,3336,3337,3338,3339,3340,3341,3342,3343,
-3344,3345,3346,3347,3348,3349,3350,3351,3352,3353,3354,3355,3356,3357,3358,3359,
-3360,3361,3362,3363,3364,1335,3365,3366,3367,3368,3369,3370,3371,3372,3373,3374,
-3375,3376,3377,3378,3379,3380,3381,3382,3383,3384,3385,3386,3387,1336,3388,3389,
-3390,3391,3392,3393,3394,3395,3396,3397,3398,3399,3400,3401,3402,3403,3404,3405,
-3406,3407,3408,3409,3410,3411,3412,3413,3414,1337,3415,3416,3417,3418,3419,1338,
-3420,3421,3422,1564,1565,3423,3424,3425,3426,3427,3428,3429,3430,3431,1254,3432,
-3433,3434,1339,3435,3436,3437,3438,3439,1566,3440,3441,3442,3443,3444,3445,3446,
-3447,3448,3449,3450,3451,3452,3453,3454,1255,3455,3456,3457,3458,3459,1567,1191,
-3460,1568,1569,3461,3462,3463,1570,3464,3465,3466,3467,3468,1571,3469,3470,3471,
-3472,3473,1572,3474,3475,3476,3477,3478,3479,3480,3481,3482,3483,3484,3485,3486,
-1340,3487,3488,3489,3490,3491,3492,1021,3493,3494,3495,3496,3497,3498,1573,3499,
-1341,3500,3501,3502,3503,3504,3505,3506,3507,3508,3509,3510,3511,1342,3512,3513,
-3514,3515,3516,1574,1343,3517,3518,3519,1575,3520,1576,3521,3522,3523,3524,3525,
-3526,3527,3528,3529,3530,3531,3532,3533,3534,3535,3536,3537,3538,3539,3540,3541,
-3542,3543,3544,3545,3546,3547,3548,3549,3550,3551,3552,3553,3554,3555,3556,3557,
-3558,3559,3560,3561,3562,3563,3564,3565,3566,3567,3568,3569,3570,3571,3572,3573,
-3574,3575,3576,3577,3578,3579,3580,1577,3581,3582,1578,3583,3584,3585,3586,3587,
-3588,3589,3590,3591,3592,3593,3594,3595,3596,3597,3598,3599,3600,3601,3602,3603,
-3604,1579,3605,3606,3607,3608,3609,3610,3611,3612,3613,3614,3615,3616,3617,3618,
-3619,3620,3621,3622,3623,3624,3625,3626,3627,3628,3629,1580,3630,3631,1581,3632,
-3633,3634,3635,3636,3637,3638,3639,3640,3641,3642,3643,3644,3645,3646,3647,3648,
-3649,3650,3651,3652,3653,3654,3655,3656,1582,3657,3658,3659,3660,3661,3662,3663,
-3664,3665,3666,3667,3668,3669,3670,3671,3672,3673,3674,3675,3676,3677,3678,3679,
-3680,3681,3682,3683,3684,3685,3686,3687,3688,3689,3690,3691,3692,3693,3694,3695,
-3696,3697,3698,3699,3700,1192,3701,3702,3703,3704,1256,3705,3706,3707,3708,1583,
-1257,3709,3710,3711,3712,3713,3714,3715,3716,1584,3717,3718,3719,3720,3721,3722,
-3723,3724,3725,3726,3727,3728,3729,3730,3731,3732,3733,3734,3735,3736,3737,3738,
-3739,3740,3741,3742,3743,3744,3745,1344,3746,3747,3748,3749,3750,3751,3752,3753,
-3754,3755,3756,1585,3757,3758,3759,3760,3761,3762,3763,3764,3765,3766,1586,3767,
-3768,3769,3770,3771,3772,3773,3774,3775,3776,3777,3778,1345,3779,3780,3781,3782,
-3783,3784,3785,3786,3787,3788,3789,3790,3791,3792,3793,3794,3795,1346,1587,3796,
-3797,1588,3798,3799,3800,3801,3802,3803,3804,3805,3806,1347,3807,3808,3809,3810,
-3811,1589,3812,3813,3814,3815,3816,3817,3818,3819,3820,3821,1590,3822,3823,1591,
-1348,3824,3825,3826,3827,3828,3829,3830,1592,3831,3832,1593,3833,3834,3835,3836,
-3837,3838,3839,3840,3841,3842,3843,3844,1349,3845,3846,3847,3848,3849,3850,3851,
-3852,3853,3854,3855,3856,3857,3858,1594,3859,3860,3861,3862,3863,3864,3865,3866,
-3867,3868,3869,1595,3870,3871,3872,3873,1596,3874,3875,3876,3877,3878,3879,3880,
-3881,3882,3883,3884,3885,3886,1597,3887,3888,3889,3890,3891,3892,3893,3894,3895,
-1598,3896,3897,3898,1599,1600,3899,1350,3900,1351,3901,3902,1352,3903,3904,3905,
-3906,3907,3908,3909,3910,3911,3912,3913,3914,3915,3916,3917,3918,3919,3920,3921,
-3922,3923,3924,1258,3925,3926,3927,3928,3929,3930,3931,1193,3932,1601,3933,3934,
-3935,3936,3937,3938,3939,3940,3941,3942,3943,1602,3944,3945,3946,3947,3948,1603,
-3949,3950,3951,3952,3953,3954,3955,3956,3957,3958,3959,3960,3961,3962,3963,3964,
-3965,1604,3966,3967,3968,3969,3970,3971,3972,3973,3974,3975,3976,3977,1353,3978,
-3979,3980,3981,3982,3983,3984,3985,3986,3987,3988,3989,3990,3991,1354,3992,3993,
-3994,3995,3996,3997,3998,3999,4000,4001,4002,4003,4004,4005,4006,4007,4008,4009,
-4010,4011,4012,4013,4014,4015,4016,4017,4018,4019,4020,4021,4022,4023,1355,4024,
-4025,4026,4027,4028,4029,4030,4031,4032,4033,4034,4035,4036,4037,4038,4039,4040,
-1605,4041,4042,4043,4044,4045,4046,4047,4048,4049,4050,4051,4052,4053,4054,4055,
-4056,4057,4058,4059,4060,1606,4061,4062,4063,4064,1607,4065,4066,4067,4068,4069,
-4070,4071,4072,4073,4074,4075,4076,1194,4077,4078,1608,4079,4080,4081,4082,4083,
-4084,4085,4086,4087,1609,4088,4089,4090,4091,4092,4093,4094,4095,4096,4097,4098,
-4099,4100,4101,4102,4103,4104,4105,4106,4107,4108,1259,4109,4110,4111,4112,4113,
-4114,4115,4116,4117,4118,4119,4120,4121,4122,4123,4124,1195,4125,4126,4127,1610,
-4128,4129,4130,4131,4132,4133,4134,4135,4136,4137,1356,4138,4139,4140,4141,4142,
-4143,4144,1611,4145,4146,4147,4148,4149,4150,4151,4152,4153,4154,4155,4156,4157,
-4158,4159,4160,4161,4162,4163,4164,4165,4166,4167,4168,4169,4170,4171,4172,4173,
-4174,4175,4176,4177,4178,4179,4180,4181,4182,4183,4184,4185,4186,4187,4188,4189,
-4190,4191,4192,4193,4194,4195,4196,4197,4198,4199,4200,4201,4202,4203,4204,4205,
-4206,4207,4208,4209,4210,4211,4212,4213,4214,4215,4216,4217,4218,4219,1612,4220,
-4221,4222,4223,4224,4225,4226,4227,1357,4228,1613,4229,4230,4231,4232,4233,4234,
-4235,4236,4237,4238,4239,4240,4241,4242,4243,1614,4244,4245,4246,4247,4248,4249,
-4250,4251,4252,4253,4254,4255,4256,4257,4258,4259,4260,4261,4262,4263,4264,4265,
-4266,4267,4268,4269,4270,1196,1358,4271,4272,4273,4274,4275,4276,4277,4278,4279,
-4280,4281,4282,4283,4284,4285,4286,4287,1615,4288,4289,4290,4291,4292,4293,4294,
-4295,4296,4297,4298,4299,4300,4301,4302,4303,4304,4305,4306,4307,4308,4309,4310,
-4311,4312,4313,4314,4315,4316,4317,4318,4319,4320,4321,4322,4323,4324,4325,4326,
-4327,4328,4329,4330,4331,4332,4333,4334,1616,4335,4336,4337,4338,4339,4340,4341,
-4342,4343,4344,4345,4346,4347,4348,4349,4350,4351,4352,4353,4354,4355,4356,4357,
-4358,4359,4360,1617,4361,4362,4363,4364,4365,1618,4366,4367,4368,4369,4370,4371,
-4372,4373,4374,4375,4376,4377,4378,4379,4380,4381,4382,4383,4384,4385,4386,4387,
-4388,4389,4390,4391,4392,4393,4394,4395,4396,4397,4398,4399,4400,4401,4402,4403,
-4404,4405,4406,4407,4408,4409,4410,4411,4412,4413,4414,4415,4416,1619,4417,4418,
-4419,4420,4421,4422,4423,4424,4425,1112,4426,4427,4428,4429,4430,1620,4431,4432,
-4433,4434,4435,4436,4437,4438,4439,4440,4441,4442,1260,1261,4443,4444,4445,4446,
-4447,4448,4449,4450,4451,4452,4453,4454,4455,1359,4456,4457,4458,4459,4460,4461,
-4462,4463,4464,4465,1621,4466,4467,4468,4469,4470,4471,4472,4473,4474,4475,4476,
-4477,4478,4479,4480,4481,4482,4483,4484,4485,4486,4487,4488,4489,1055,4490,4491,
-4492,4493,4494,4495,4496,4497,4498,4499,4500,4501,4502,4503,4504,4505,4506,4507,
-4508,4509,4510,4511,4512,4513,4514,4515,4516,4517,4518,1622,4519,4520,4521,1623,
-4522,4523,4524,4525,4526,4527,4528,4529,4530,4531,4532,4533,4534,4535,1360,4536,
-4537,4538,4539,4540,4541,4542,4543, 975,4544,4545,4546,4547,4548,4549,4550,4551,
-4552,4553,4554,4555,4556,4557,4558,4559,4560,4561,4562,4563,4564,4565,4566,4567,
-4568,4569,4570,4571,1624,4572,4573,4574,4575,4576,1625,4577,4578,4579,4580,4581,
-4582,4583,4584,1626,4585,4586,4587,4588,4589,4590,4591,4592,4593,4594,4595,1627,
-4596,4597,4598,4599,4600,4601,4602,4603,4604,4605,4606,4607,4608,4609,4610,4611,
-4612,4613,4614,4615,1628,4616,4617,4618,4619,4620,4621,4622,4623,4624,4625,4626,
-4627,4628,4629,4630,4631,4632,4633,4634,4635,4636,4637,4638,4639,4640,4641,4642,
-4643,4644,4645,4646,4647,4648,4649,1361,4650,4651,4652,4653,4654,4655,4656,4657,
-4658,4659,4660,4661,1362,4662,4663,4664,4665,4666,4667,4668,4669,4670,4671,4672,
-4673,4674,4675,4676,4677,4678,4679,4680,4681,4682,1629,4683,4684,4685,4686,4687,
-1630,4688,4689,4690,4691,1153,4692,4693,4694,1113,4695,4696,4697,4698,4699,4700,
-4701,4702,4703,4704,4705,4706,4707,4708,4709,4710,4711,1197,4712,4713,4714,4715,
-4716,4717,4718,4719,4720,4721,4722,4723,4724,4725,4726,4727,4728,4729,4730,4731,
-4732,4733,4734,4735,1631,4736,1632,4737,4738,4739,4740,4741,4742,4743,4744,1633,
-4745,4746,4747,4748,4749,1262,4750,4751,4752,4753,4754,1363,4755,4756,4757,4758,
-4759,4760,4761,4762,4763,4764,4765,4766,4767,4768,1634,4769,4770,4771,4772,4773,
-4774,4775,4776,4777,4778,1635,4779,4780,4781,4782,4783,4784,4785,4786,4787,4788,
-4789,1636,4790,4791,4792,4793,4794,4795,4796,4797,4798,4799,4800,4801,4802,4803,
-4804,4805,4806,1637,4807,4808,4809,1638,4810,4811,4812,4813,4814,4815,4816,4817,
-4818,1639,4819,4820,4821,4822,4823,4824,4825,4826,4827,4828,4829,4830,4831,4832,
-4833,1077,4834,4835,4836,4837,4838,4839,4840,4841,4842,4843,4844,4845,4846,4847,
-4848,4849,4850,4851,4852,4853,4854,4855,4856,4857,4858,4859,4860,4861,4862,4863,
-4864,4865,4866,4867,4868,4869,4870,4871,4872,4873,4874,4875,4876,4877,4878,4879,
-4880,4881,4882,4883,1640,4884,4885,1641,4886,4887,4888,4889,4890,4891,4892,4893,
-4894,4895,4896,4897,4898,4899,4900,4901,4902,4903,4904,4905,4906,4907,4908,4909,
-4910,4911,1642,4912,4913,4914,1364,4915,4916,4917,4918,4919,4920,4921,4922,4923,
-4924,4925,4926,4927,4928,4929,4930,4931,1643,4932,4933,4934,4935,4936,4937,4938,
-4939,4940,4941,4942,4943,4944,4945,4946,4947,4948,4949,4950,4951,4952,4953,4954,
-4955,4956,4957,4958,4959,4960,4961,4962,4963,4964,4965,4966,4967,4968,4969,4970,
-4971,4972,4973,4974,4975,4976,4977,4978,4979,4980,1644,4981,4982,4983,4984,1645,
-4985,4986,1646,4987,4988,4989,4990,4991,4992,4993,4994,4995,4996,4997,4998,4999,
-5000,5001,5002,5003,5004,5005,1647,5006,1648,5007,5008,5009,5010,5011,5012,1078,
-5013,5014,5015,5016,5017,5018,5019,5020,5021,5022,5023,5024,5025,5026,5027,5028,
-1365,5029,5030,5031,5032,5033,5034,5035,5036,5037,5038,5039,1649,5040,5041,5042,
-5043,5044,5045,1366,5046,5047,5048,5049,5050,5051,5052,5053,5054,5055,1650,5056,
-5057,5058,5059,5060,5061,5062,5063,5064,5065,5066,5067,5068,5069,5070,5071,5072,
-5073,5074,5075,5076,5077,1651,5078,5079,5080,5081,5082,5083,5084,5085,5086,5087,
-5088,5089,5090,5091,5092,5093,5094,5095,5096,5097,5098,5099,5100,5101,5102,5103,
-5104,5105,5106,5107,5108,5109,5110,1652,5111,5112,5113,5114,5115,5116,5117,5118,
-1367,5119,5120,5121,5122,5123,5124,5125,5126,5127,5128,5129,1653,5130,5131,5132,
-5133,5134,5135,5136,5137,5138,5139,5140,5141,5142,5143,5144,5145,5146,5147,5148,
-5149,1368,5150,1654,5151,1369,5152,5153,5154,5155,5156,5157,5158,5159,5160,5161,
-5162,5163,5164,5165,5166,5167,5168,5169,5170,5171,5172,5173,5174,5175,5176,5177,
-5178,1370,5179,5180,5181,5182,5183,5184,5185,5186,5187,5188,5189,5190,5191,5192,
-5193,5194,5195,5196,5197,5198,1655,5199,5200,5201,5202,1656,5203,5204,5205,5206,
-1371,5207,1372,5208,5209,5210,5211,1373,5212,5213,1374,5214,5215,5216,5217,5218,
-5219,5220,5221,5222,5223,5224,5225,5226,5227,5228,5229,5230,5231,5232,5233,5234,
-5235,5236,5237,5238,5239,5240,5241,5242,5243,5244,5245,5246,5247,1657,5248,5249,
-5250,5251,1658,1263,5252,5253,5254,5255,5256,1375,5257,5258,5259,5260,5261,5262,
-5263,5264,5265,5266,5267,5268,5269,5270,5271,5272,5273,5274,5275,5276,5277,5278,
-5279,5280,5281,5282,5283,1659,5284,5285,5286,5287,5288,5289,5290,5291,5292,5293,
-5294,5295,5296,5297,5298,5299,5300,1660,5301,5302,5303,5304,5305,5306,5307,5308,
-5309,5310,5311,5312,5313,5314,5315,5316,5317,5318,5319,5320,5321,1376,5322,5323,
-5324,5325,5326,5327,5328,5329,5330,5331,5332,5333,1198,5334,5335,5336,5337,5338,
-5339,5340,5341,5342,5343,1661,5344,5345,5346,5347,5348,5349,5350,5351,5352,5353,
-5354,5355,5356,5357,5358,5359,5360,5361,5362,5363,5364,5365,5366,5367,5368,5369,
-5370,5371,5372,5373,5374,5375,5376,5377,5378,5379,5380,5381,5382,5383,5384,5385,
-5386,5387,5388,5389,5390,5391,5392,5393,5394,5395,5396,5397,5398,1264,5399,5400,
-5401,5402,5403,5404,5405,5406,5407,5408,5409,5410,5411,5412,1662,5413,5414,5415,
-5416,1663,5417,5418,5419,5420,5421,5422,5423,5424,5425,5426,5427,5428,5429,5430,
-5431,5432,5433,5434,5435,5436,5437,5438,1664,5439,5440,5441,5442,5443,5444,5445,
-5446,5447,5448,5449,5450,5451,5452,5453,5454,5455,5456,5457,5458,5459,5460,5461,
-5462,5463,5464,5465,5466,5467,5468,5469,5470,5471,5472,5473,5474,5475,5476,5477,
-5478,1154,5479,5480,5481,5482,5483,5484,5485,1665,5486,5487,5488,5489,5490,5491,
-5492,5493,5494,5495,5496,5497,5498,5499,5500,5501,5502,5503,5504,5505,5506,5507,
-5508,5509,5510,5511,5512,5513,5514,5515,5516,5517,5518,5519,5520,5521,5522,5523,
-5524,5525,5526,5527,5528,5529,5530,5531,5532,5533,5534,5535,5536,5537,5538,5539,
-5540,5541,5542,5543,5544,5545,5546,5547,5548,1377,5549,5550,5551,5552,5553,5554,
-5555,5556,5557,5558,5559,5560,5561,5562,5563,5564,5565,5566,5567,5568,5569,5570,
-1114,5571,5572,5573,5574,5575,5576,5577,5578,5579,5580,5581,5582,5583,5584,5585,
-5586,5587,5588,5589,5590,5591,5592,1378,5593,5594,5595,5596,5597,5598,5599,5600,
-5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,5613,5614,1379,5615,
-5616,5617,5618,5619,5620,5621,5622,5623,5624,5625,5626,5627,5628,5629,5630,5631,
-5632,5633,5634,1380,5635,5636,5637,5638,5639,5640,5641,5642,5643,5644,5645,5646,
-5647,5648,5649,1381,1056,5650,5651,5652,5653,5654,5655,5656,5657,5658,5659,5660,
-1666,5661,5662,5663,5664,5665,5666,5667,5668,1667,5669,1668,5670,5671,5672,5673,
-5674,5675,5676,5677,5678,1155,5679,5680,5681,5682,5683,5684,5685,5686,5687,5688,
-5689,5690,5691,5692,5693,5694,5695,5696,5697,5698,1669,5699,5700,5701,5702,5703,
-5704,5705,1670,5706,5707,5708,5709,5710,1671,5711,5712,5713,5714,1382,5715,5716,
-5717,5718,5719,5720,5721,5722,5723,5724,5725,1672,5726,5727,1673,1674,5728,5729,
-5730,5731,5732,5733,5734,5735,5736,1675,5737,5738,5739,5740,5741,5742,5743,5744,
-1676,5745,5746,5747,5748,5749,5750,5751,1383,5752,5753,5754,5755,5756,5757,5758,
-5759,5760,5761,5762,5763,5764,5765,5766,5767,5768,1677,5769,5770,5771,5772,5773,
-1678,5774,5775,5776, 998,5777,5778,5779,5780,5781,5782,5783,5784,5785,1384,5786,
-5787,5788,5789,5790,5791,5792,5793,5794,5795,5796,5797,5798,5799,5800,1679,5801,
-5802,5803,1115,1116,5804,5805,5806,5807,5808,5809,5810,5811,5812,5813,5814,5815,
-5816,5817,5818,5819,5820,5821,5822,5823,5824,5825,5826,5827,5828,5829,5830,5831,
-5832,5833,5834,5835,5836,5837,5838,5839,5840,5841,5842,5843,5844,5845,5846,5847,
-5848,5849,5850,5851,5852,5853,5854,5855,1680,5856,5857,5858,5859,5860,5861,5862,
-5863,5864,1681,5865,5866,5867,1682,5868,5869,5870,5871,5872,5873,5874,5875,5876,
-5877,5878,5879,1683,5880,1684,5881,5882,5883,5884,1685,5885,5886,5887,5888,5889,
-5890,5891,5892,5893,5894,5895,5896,5897,5898,5899,5900,5901,5902,5903,5904,5905,
-5906,5907,1686,5908,5909,5910,5911,5912,5913,5914,5915,5916,5917,5918,5919,5920,
-5921,5922,5923,5924,5925,5926,5927,5928,5929,5930,5931,5932,5933,5934,5935,1687,
-5936,5937,5938,5939,5940,5941,5942,5943,5944,5945,5946,5947,5948,5949,5950,5951,
-5952,1688,1689,5953,1199,5954,5955,5956,5957,5958,5959,5960,5961,1690,5962,5963,
-5964,5965,5966,5967,5968,5969,5970,5971,5972,5973,5974,5975,5976,5977,5978,5979,
-5980,5981,1385,5982,1386,5983,5984,5985,5986,5987,5988,5989,5990,5991,5992,5993,
-5994,5995,5996,5997,5998,5999,6000,6001,6002,6003,6004,6005,6006,6007,6008,6009,
-6010,6011,6012,6013,6014,6015,6016,6017,6018,6019,6020,6021,6022,6023,6024,6025,
-6026,6027,1265,6028,6029,1691,6030,6031,6032,6033,6034,6035,6036,6037,6038,6039,
-6040,6041,6042,6043,6044,6045,6046,6047,6048,6049,6050,6051,6052,6053,6054,6055,
-6056,6057,6058,6059,6060,6061,6062,6063,6064,6065,6066,6067,6068,6069,6070,6071,
-6072,6073,6074,6075,6076,6077,6078,6079,6080,6081,6082,6083,6084,1692,6085,6086,
-6087,6088,6089,6090,6091,6092,6093,6094,6095,6096,6097,6098,6099,6100,6101,6102,
-6103,6104,6105,6106,6107,6108,6109,6110,6111,6112,6113,6114,6115,6116,6117,6118,
-6119,6120,6121,6122,6123,6124,6125,6126,6127,6128,6129,6130,6131,1693,6132,6133,
-6134,6135,6136,1694,6137,6138,6139,6140,6141,1695,6142,6143,6144,6145,6146,6147,
-6148,6149,6150,6151,6152,6153,6154,6155,6156,6157,6158,6159,6160,6161,6162,6163,
-6164,6165,6166,6167,6168,6169,6170,6171,6172,6173,6174,6175,6176,6177,6178,6179,
-6180,6181,6182,6183,6184,6185,1696,6186,6187,6188,6189,6190,6191,6192,6193,6194,
-6195,6196,6197,6198,6199,6200,6201,6202,6203,6204,6205,6206,6207,6208,6209,6210,
-6211,6212,6213,6214,6215,6216,6217,6218,6219,1697,6220,6221,6222,6223,6224,6225,
-6226,6227,6228,6229,6230,6231,6232,6233,6234,6235,6236,6237,6238,6239,6240,6241,
-6242,6243,6244,6245,6246,6247,6248,6249,6250,6251,6252,6253,1698,6254,6255,6256,
-6257,6258,6259,6260,6261,6262,6263,1200,6264,6265,6266,6267,6268,6269,6270,6271, #1024
-6272,6273,6274,6275,6276,6277,6278,6279,6280,6281,6282,6283,6284,6285,6286,6287,
-6288,6289,6290,6291,6292,6293,6294,6295,6296,6297,6298,6299,6300,6301,6302,1699,
-6303,6304,1700,6305,6306,6307,6308,6309,6310,6311,6312,6313,6314,6315,6316,6317,
-6318,6319,6320,6321,6322,6323,6324,6325,6326,6327,6328,6329,6330,6331,6332,6333,
-6334,6335,6336,6337,6338,6339,1701,6340,6341,6342,6343,6344,1387,6345,6346,6347,
-6348,6349,6350,6351,6352,6353,6354,6355,6356,6357,6358,6359,6360,6361,6362,6363,
-6364,6365,6366,6367,6368,6369,6370,6371,6372,6373,6374,6375,6376,6377,6378,6379,
-6380,6381,6382,6383,6384,6385,6386,6387,6388,6389,6390,6391,6392,6393,6394,6395,
-6396,6397,6398,6399,6400,6401,6402,6403,6404,6405,6406,6407,6408,6409,6410,6411,
-6412,6413,1702,6414,6415,6416,6417,6418,6419,6420,6421,6422,1703,6423,6424,6425,
-6426,6427,6428,6429,6430,6431,6432,6433,6434,6435,6436,6437,6438,1704,6439,6440,
-6441,6442,6443,6444,6445,6446,6447,6448,6449,6450,6451,6452,6453,6454,6455,6456,
-6457,6458,6459,6460,6461,6462,6463,6464,6465,6466,6467,6468,6469,6470,6471,6472,
-6473,6474,6475,6476,6477,6478,6479,6480,6481,6482,6483,6484,6485,6486,6487,6488,
-6489,6490,6491,6492,6493,6494,6495,6496,6497,6498,6499,6500,6501,6502,6503,1266,
-6504,6505,6506,6507,6508,6509,6510,6511,6512,6513,6514,6515,6516,6517,6518,6519,
-6520,6521,6522,6523,6524,6525,6526,6527,6528,6529,6530,6531,6532,6533,6534,6535,
-6536,6537,6538,6539,6540,6541,6542,6543,6544,6545,6546,6547,6548,6549,6550,6551,
-1705,1706,6552,6553,6554,6555,6556,6557,6558,6559,6560,6561,6562,6563,6564,6565,
-6566,6567,6568,6569,6570,6571,6572,6573,6574,6575,6576,6577,6578,6579,6580,6581,
-6582,6583,6584,6585,6586,6587,6588,6589,6590,6591,6592,6593,6594,6595,6596,6597,
-6598,6599,6600,6601,6602,6603,6604,6605,6606,6607,6608,6609,6610,6611,6612,6613,
-6614,6615,6616,6617,6618,6619,6620,6621,6622,6623,6624,6625,6626,6627,6628,6629,
-6630,6631,6632,6633,6634,6635,6636,6637,1388,6638,6639,6640,6641,6642,6643,6644,
-1707,6645,6646,6647,6648,6649,6650,6651,6652,6653,6654,6655,6656,6657,6658,6659,
-6660,6661,6662,6663,1708,6664,6665,6666,6667,6668,6669,6670,6671,6672,6673,6674,
-1201,6675,6676,6677,6678,6679,6680,6681,6682,6683,6684,6685,6686,6687,6688,6689,
-6690,6691,6692,6693,6694,6695,6696,6697,6698,6699,6700,6701,6702,6703,6704,6705,
-6706,6707,6708,6709,6710,6711,6712,6713,6714,6715,6716,6717,6718,6719,6720,6721,
-6722,6723,6724,6725,1389,6726,6727,6728,6729,6730,6731,6732,6733,6734,6735,6736,
-1390,1709,6737,6738,6739,6740,6741,6742,1710,6743,6744,6745,6746,1391,6747,6748,
-6749,6750,6751,6752,6753,6754,6755,6756,6757,1392,6758,6759,6760,6761,6762,6763,
-6764,6765,6766,6767,6768,6769,6770,6771,6772,6773,6774,6775,6776,6777,6778,6779,
-6780,1202,6781,6782,6783,6784,6785,6786,6787,6788,6789,6790,6791,6792,6793,6794,
-6795,6796,6797,6798,6799,6800,6801,6802,6803,6804,6805,6806,6807,6808,6809,1711,
-6810,6811,6812,6813,6814,6815,6816,6817,6818,6819,6820,6821,6822,6823,6824,6825,
-6826,6827,6828,6829,6830,6831,6832,6833,6834,6835,6836,1393,6837,6838,6839,6840,
-6841,6842,6843,6844,6845,6846,6847,6848,6849,6850,6851,6852,6853,6854,6855,6856,
-6857,6858,6859,6860,6861,6862,6863,6864,6865,6866,6867,6868,6869,6870,6871,6872,
-6873,6874,6875,6876,6877,6878,6879,6880,6881,6882,6883,6884,6885,6886,6887,6888,
-6889,6890,6891,6892,6893,6894,6895,6896,6897,6898,6899,6900,6901,6902,1712,6903,
-6904,6905,6906,6907,6908,6909,6910,1713,6911,6912,6913,6914,6915,6916,6917,6918,
-6919,6920,6921,6922,6923,6924,6925,6926,6927,6928,6929,6930,6931,6932,6933,6934,
-6935,6936,6937,6938,6939,6940,6941,6942,6943,6944,6945,6946,6947,6948,6949,6950,
-6951,6952,6953,6954,6955,6956,6957,6958,6959,6960,6961,6962,6963,6964,6965,6966,
-6967,6968,6969,6970,6971,6972,6973,6974,1714,6975,6976,6977,6978,6979,6980,6981,
-6982,6983,6984,6985,6986,6987,6988,1394,6989,6990,6991,6992,6993,6994,6995,6996,
-6997,6998,6999,7000,1715,7001,7002,7003,7004,7005,7006,7007,7008,7009,7010,7011,
-7012,7013,7014,7015,7016,7017,7018,7019,7020,7021,7022,7023,7024,7025,7026,7027,
-7028,1716,7029,7030,7031,7032,7033,7034,7035,7036,7037,7038,7039,7040,7041,7042,
-7043,7044,7045,7046,7047,7048,7049,7050,7051,7052,7053,7054,7055,7056,7057,7058,
-7059,7060,7061,7062,7063,7064,7065,7066,7067,7068,7069,7070,7071,7072,7073,7074,
-7075,7076,7077,7078,7079,7080,7081,7082,7083,7084,7085,7086,7087,7088,7089,7090,
-7091,7092,7093,7094,7095,7096,7097,7098,7099,7100,7101,7102,7103,7104,7105,7106,
-7107,7108,7109,7110,7111,7112,7113,7114,7115,7116,7117,7118,7119,7120,7121,7122,
-7123,7124,7125,7126,7127,7128,7129,7130,7131,7132,7133,7134,7135,7136,7137,7138,
-7139,7140,7141,7142,7143,7144,7145,7146,7147,7148,7149,7150,7151,7152,7153,7154,
-7155,7156,7157,7158,7159,7160,7161,7162,7163,7164,7165,7166,7167,7168,7169,7170,
-7171,7172,7173,7174,7175,7176,7177,7178,7179,7180,7181,7182,7183,7184,7185,7186,
-7187,7188,7189,7190,7191,7192,7193,7194,7195,7196,7197,7198,7199,7200,7201,7202,
-7203,7204,7205,7206,7207,1395,7208,7209,7210,7211,7212,7213,1717,7214,7215,7216,
-7217,7218,7219,7220,7221,7222,7223,7224,7225,7226,7227,7228,7229,7230,7231,7232,
-7233,7234,7235,7236,7237,7238,7239,7240,7241,7242,7243,7244,7245,7246,7247,7248,
-7249,7250,7251,7252,7253,7254,7255,7256,7257,7258,7259,7260,7261,7262,7263,7264,
-7265,7266,7267,7268,7269,7270,7271,7272,7273,7274,7275,7276,7277,7278,7279,7280,
-7281,7282,7283,7284,7285,7286,7287,7288,7289,7290,7291,7292,7293,7294,7295,7296,
-7297,7298,7299,7300,7301,7302,7303,7304,7305,7306,7307,7308,7309,7310,7311,7312,
-7313,1718,7314,7315,7316,7317,7318,7319,7320,7321,7322,7323,7324,7325,7326,7327,
-7328,7329,7330,7331,7332,7333,7334,7335,7336,7337,7338,7339,7340,7341,7342,7343,
-7344,7345,7346,7347,7348,7349,7350,7351,7352,7353,7354,7355,7356,7357,7358,7359,
-7360,7361,7362,7363,7364,7365,7366,7367,7368,7369,7370,7371,7372,7373,7374,7375,
-7376,7377,7378,7379,7380,7381,7382,7383,7384,7385,7386,7387,7388,7389,7390,7391,
-7392,7393,7394,7395,7396,7397,7398,7399,7400,7401,7402,7403,7404,7405,7406,7407,
-7408,7409,7410,7411,7412,7413,7414,7415,7416,7417,7418,7419,7420,7421,7422,7423,
-7424,7425,7426,7427,7428,7429,7430,7431,7432,7433,7434,7435,7436,7437,7438,7439,
-7440,7441,7442,7443,7444,7445,7446,7447,7448,7449,7450,7451,7452,7453,7454,7455,
-7456,7457,7458,7459,7460,7461,7462,7463,7464,7465,7466,7467,7468,7469,7470,7471,
-7472,7473,7474,7475,7476,7477,7478,7479,7480,7481,7482,7483,7484,7485,7486,7487,
-7488,7489,7490,7491,7492,7493,7494,7495,7496,7497,7498,7499,7500,7501,7502,7503,
-7504,7505,7506,7507,7508,7509,7510,7511,7512,7513,7514,7515,7516,7517,7518,7519,
-7520,7521,7522,7523,7524,7525,7526,7527,7528,7529,7530,7531,7532,7533,7534,7535,
-7536,7537,7538,7539,7540,7541,7542,7543,7544,7545,7546,7547,7548,7549,7550,7551,
-7552,7553,7554,7555,7556,7557,7558,7559,7560,7561,7562,7563,7564,7565,7566,7567,
-7568,7569,7570,7571,7572,7573,7574,7575,7576,7577,7578,7579,7580,7581,7582,7583,
-7584,7585,7586,7587,7588,7589,7590,7591,7592,7593,7594,7595,7596,7597,7598,7599,
-7600,7601,7602,7603,7604,7605,7606,7607,7608,7609,7610,7611,7612,7613,7614,7615,
-7616,7617,7618,7619,7620,7621,7622,7623,7624,7625,7626,7627,7628,7629,7630,7631,
-7632,7633,7634,7635,7636,7637,7638,7639,7640,7641,7642,7643,7644,7645,7646,7647,
-7648,7649,7650,7651,7652,7653,7654,7655,7656,7657,7658,7659,7660,7661,7662,7663,
-7664,7665,7666,7667,7668,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,
-7680,7681,7682,7683,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,
-7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,
-7712,7713,7714,7715,7716,7717,7718,7719,7720,7721,7722,7723,7724,7725,7726,7727,
-7728,7729,7730,7731,7732,7733,7734,7735,7736,7737,7738,7739,7740,7741,7742,7743,
-7744,7745,7746,7747,7748,7749,7750,7751,7752,7753,7754,7755,7756,7757,7758,7759,
-7760,7761,7762,7763,7764,7765,7766,7767,7768,7769,7770,7771,7772,7773,7774,7775,
-7776,7777,7778,7779,7780,7781,7782,7783,7784,7785,7786,7787,7788,7789,7790,7791,
-7792,7793,7794,7795,7796,7797,7798,7799,7800,7801,7802,7803,7804,7805,7806,7807,
-7808,7809,7810,7811,7812,7813,7814,7815,7816,7817,7818,7819,7820,7821,7822,7823,
-7824,7825,7826,7827,7828,7829,7830,7831,7832,7833,7834,7835,7836,7837,7838,7839,
-7840,7841,7842,7843,7844,7845,7846,7847,7848,7849,7850,7851,7852,7853,7854,7855,
-7856,7857,7858,7859,7860,7861,7862,7863,7864,7865,7866,7867,7868,7869,7870,7871,
-7872,7873,7874,7875,7876,7877,7878,7879,7880,7881,7882,7883,7884,7885,7886,7887,
-7888,7889,7890,7891,7892,7893,7894,7895,7896,7897,7898,7899,7900,7901,7902,7903,
-7904,7905,7906,7907,7908,7909,7910,7911,7912,7913,7914,7915,7916,7917,7918,7919,
-7920,7921,7922,7923,7924,7925,7926,7927,7928,7929,7930,7931,7932,7933,7934,7935,
-7936,7937,7938,7939,7940,7941,7942,7943,7944,7945,7946,7947,7948,7949,7950,7951,
-7952,7953,7954,7955,7956,7957,7958,7959,7960,7961,7962,7963,7964,7965,7966,7967,
-7968,7969,7970,7971,7972,7973,7974,7975,7976,7977,7978,7979,7980,7981,7982,7983,
-7984,7985,7986,7987,7988,7989,7990,7991,7992,7993,7994,7995,7996,7997,7998,7999,
-8000,8001,8002,8003,8004,8005,8006,8007,8008,8009,8010,8011,8012,8013,8014,8015,
-8016,8017,8018,8019,8020,8021,8022,8023,8024,8025,8026,8027,8028,8029,8030,8031,
-8032,8033,8034,8035,8036,8037,8038,8039,8040,8041,8042,8043,8044,8045,8046,8047,
-8048,8049,8050,8051,8052,8053,8054,8055,8056,8057,8058,8059,8060,8061,8062,8063,
-8064,8065,8066,8067,8068,8069,8070,8071,8072,8073,8074,8075,8076,8077,8078,8079,
-8080,8081,8082,8083,8084,8085,8086,8087,8088,8089,8090,8091,8092,8093,8094,8095,
-8096,8097,8098,8099,8100,8101,8102,8103,8104,8105,8106,8107,8108,8109,8110,8111,
-8112,8113,8114,8115,8116,8117,8118,8119,8120,8121,8122,8123,8124,8125,8126,8127,
-8128,8129,8130,8131,8132,8133,8134,8135,8136,8137,8138,8139,8140,8141,8142,8143,
-8144,8145,8146,8147,8148,8149,8150,8151,8152,8153,8154,8155,8156,8157,8158,8159,
-8160,8161,8162,8163,8164,8165,8166,8167,8168,8169,8170,8171,8172,8173,8174,8175,
-8176,8177,8178,8179,8180,8181,8182,8183,8184,8185,8186,8187,8188,8189,8190,8191,
-8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8203,8204,8205,8206,8207,
-8208,8209,8210,8211,8212,8213,8214,8215,8216,8217,8218,8219,8220,8221,8222,8223,
-8224,8225,8226,8227,8228,8229,8230,8231,8232,8233,8234,8235,8236,8237,8238,8239,
-8240,8241,8242,8243,8244,8245,8246,8247,8248,8249,8250,8251,8252,8253,8254,8255,
-8256,8257,8258,8259,8260,8261,8262,8263,8264,8265,8266,8267,8268,8269,8270,8271,
-8272,8273,8274,8275,8276,8277,8278,8279,8280,8281,8282,8283,8284,8285,8286,8287,
-8288,8289,8290,8291,8292,8293,8294,8295,8296,8297,8298,8299,8300,8301,8302,8303,
-8304,8305,8306,8307,8308,8309,8310,8311,8312,8313,8314,8315,8316,8317,8318,8319,
-8320,8321,8322,8323,8324,8325,8326,8327,8328,8329,8330,8331,8332,8333,8334,8335,
-8336,8337,8338,8339,8340,8341,8342,8343,8344,8345,8346,8347,8348,8349,8350,8351,
-8352,8353,8354,8355,8356,8357,8358,8359,8360,8361,8362,8363,8364,8365,8366,8367,
-8368,8369,8370,8371,8372,8373,8374,8375,8376,8377,8378,8379,8380,8381,8382,8383,
-8384,8385,8386,8387,8388,8389,8390,8391,8392,8393,8394,8395,8396,8397,8398,8399,
-8400,8401,8402,8403,8404,8405,8406,8407,8408,8409,8410,8411,8412,8413,8414,8415,
-8416,8417,8418,8419,8420,8421,8422,8423,8424,8425,8426,8427,8428,8429,8430,8431,
-8432,8433,8434,8435,8436,8437,8438,8439,8440,8441,8442,8443,8444,8445,8446,8447,
-8448,8449,8450,8451,8452,8453,8454,8455,8456,8457,8458,8459,8460,8461,8462,8463,
-8464,8465,8466,8467,8468,8469,8470,8471,8472,8473,8474,8475,8476,8477,8478,8479,
-8480,8481,8482,8483,8484,8485,8486,8487,8488,8489,8490,8491,8492,8493,8494,8495,
-8496,8497,8498,8499,8500,8501,8502,8503,8504,8505,8506,8507,8508,8509,8510,8511,
-8512,8513,8514,8515,8516,8517,8518,8519,8520,8521,8522,8523,8524,8525,8526,8527,
-8528,8529,8530,8531,8532,8533,8534,8535,8536,8537,8538,8539,8540,8541,8542,8543,
-8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,8554,8555,8556,8557,8558,8559,
-8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,8570,8571,8572,8573,8574,8575,
-8576,8577,8578,8579,8580,8581,8582,8583,8584,8585,8586,8587,8588,8589,8590,8591,
-8592,8593,8594,8595,8596,8597,8598,8599,8600,8601,8602,8603,8604,8605,8606,8607,
-8608,8609,8610,8611,8612,8613,8614,8615,8616,8617,8618,8619,8620,8621,8622,8623,
-8624,8625,8626,8627,8628,8629,8630,8631,8632,8633,8634,8635,8636,8637,8638,8639,
-8640,8641,8642,8643,8644,8645,8646,8647,8648,8649,8650,8651,8652,8653,8654,8655,
-8656,8657,8658,8659,8660,8661,8662,8663,8664,8665,8666,8667,8668,8669,8670,8671,
-8672,8673,8674,8675,8676,8677,8678,8679,8680,8681,8682,8683,8684,8685,8686,8687,
-8688,8689,8690,8691,8692,8693,8694,8695,8696,8697,8698,8699,8700,8701,8702,8703,
-8704,8705,8706,8707,8708,8709,8710,8711,8712,8713,8714,8715,8716,8717,8718,8719,
-8720,8721,8722,8723,8724,8725,8726,8727,8728,8729,8730,8731,8732,8733,8734,8735,
-8736,8737,8738,8739,8740,8741)
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/euckrprober.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/euckrprober.py
deleted file mode 100644
index bd697eb..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/euckrprober.py
+++ /dev/null
@@ -1,41 +0,0 @@
-######################## BEGIN LICENSE BLOCK ########################
-# The Original Code is mozilla.org code.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 1998
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-# Mark Pilgrim - port to Python
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301 USA
-######################### END LICENSE BLOCK #########################
-
-from mbcharsetprober import MultiByteCharSetProber
-from codingstatemachine import CodingStateMachine
-from chardistribution import EUCKRDistributionAnalysis
-from mbcssm import EUCKRSMModel
-
-class EUCKRProber(MultiByteCharSetProber):
- def __init__(self):
- MultiByteCharSetProber.__init__(self)
- self._mCodingSM = CodingStateMachine(EUCKRSMModel)
- self._mDistributionAnalyzer = EUCKRDistributionAnalysis()
- self.reset()
-
- def get_charset_name(self):
- return "EUC-KR"
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/euctwfreq.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/euctwfreq.py
deleted file mode 100644
index c057209..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/euctwfreq.py
+++ /dev/null
@@ -1,426 +0,0 @@
-######################## BEGIN LICENSE BLOCK ########################
-# The Original Code is Mozilla Communicator client code.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 1998
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-# Mark Pilgrim - port to Python
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301 USA
-######################### END LICENSE BLOCK #########################
-
-# EUCTW frequency table
-# Converted from big5 work
-# by Taiwan's Mandarin Promotion Council
-#
-
-# 128 --> 0.42261
-# 256 --> 0.57851
-# 512 --> 0.74851
-# 1024 --> 0.89384
-# 2048 --> 0.97583
-#
-# Idea Distribution Ratio = 0.74851/(1-0.74851) =2.98
-# Random Distribution Ration = 512/(5401-512)=0.105
-#
-# Typical Distribution Ratio about 25% of Ideal one, still much higher than RDR
-
-EUCTW_TYPICAL_DISTRIBUTION_RATIO = 0.75
-
-# Char to FreqOrder table ,
-EUCTW_TABLE_SIZE = 8102
-
-EUCTWCharToFreqOrder = ( \
- 1,1800,1506, 255,1431, 198, 9, 82, 6,7310, 177, 202,3615,1256,2808, 110, # 2742
-3735, 33,3241, 261, 76, 44,2113, 16,2931,2184,1176, 659,3868, 26,3404,2643, # 2758
-1198,3869,3313,4060, 410,2211, 302, 590, 361,1963, 8, 204, 58,4296,7311,1931, # 2774
- 63,7312,7313, 317,1614, 75, 222, 159,4061,2412,1480,7314,3500,3068, 224,2809, # 2790
-3616, 3, 10,3870,1471, 29,2774,1135,2852,1939, 873, 130,3242,1123, 312,7315, # 2806
-4297,2051, 507, 252, 682,7316, 142,1914, 124, 206,2932, 34,3501,3173, 64, 604, # 2822
-7317,2494,1976,1977, 155,1990, 645, 641,1606,7318,3405, 337, 72, 406,7319, 80, # 2838
- 630, 238,3174,1509, 263, 939,1092,2644, 756,1440,1094,3406, 449, 69,2969, 591, # 2854
- 179,2095, 471, 115,2034,1843, 60, 50,2970, 134, 806,1868, 734,2035,3407, 180, # 2870
- 995,1607, 156, 537,2893, 688,7320, 319,1305, 779,2144, 514,2374, 298,4298, 359, # 2886
-2495, 90,2707,1338, 663, 11, 906,1099,2545, 20,2436, 182, 532,1716,7321, 732, # 2902
-1376,4062,1311,1420,3175, 25,2312,1056, 113, 399, 382,1949, 242,3408,2467, 529, # 2918
-3243, 475,1447,3617,7322, 117, 21, 656, 810,1297,2295,2329,3502,7323, 126,4063, # 2934
- 706, 456, 150, 613,4299, 71,1118,2036,4064, 145,3069, 85, 835, 486,2114,1246, # 2950
-1426, 428, 727,1285,1015, 800, 106, 623, 303,1281,7324,2127,2354, 347,3736, 221, # 2966
-3503,3110,7325,1955,1153,4065, 83, 296,1199,3070, 192, 624, 93,7326, 822,1897, # 2982
-2810,3111, 795,2064, 991,1554,1542,1592, 27, 43,2853, 859, 139,1456, 860,4300, # 2998
- 437, 712,3871, 164,2392,3112, 695, 211,3017,2096, 195,3872,1608,3504,3505,3618, # 3014
-3873, 234, 811,2971,2097,3874,2229,1441,3506,1615,2375, 668,2076,1638, 305, 228, # 3030
-1664,4301, 467, 415,7327, 262,2098,1593, 239, 108, 300, 200,1033, 512,1247,2077, # 3046
-7328,7329,2173,3176,3619,2673, 593, 845,1062,3244, 88,1723,2037,3875,1950, 212, # 3062
- 266, 152, 149, 468,1898,4066,4302, 77, 187,7330,3018, 37, 5,2972,7331,3876, # 3078
-7332,7333, 39,2517,4303,2894,3177,2078, 55, 148, 74,4304, 545, 483,1474,1029, # 3094
-1665, 217,1869,1531,3113,1104,2645,4067, 24, 172,3507, 900,3877,3508,3509,4305, # 3110
- 32,1408,2811,1312, 329, 487,2355,2247,2708, 784,2674, 4,3019,3314,1427,1788, # 3126
- 188, 109, 499,7334,3620,1717,1789, 888,1217,3020,4306,7335,3510,7336,3315,1520, # 3142
-3621,3878, 196,1034, 775,7337,7338, 929,1815, 249, 439, 38,7339,1063,7340, 794, # 3158
-3879,1435,2296, 46, 178,3245,2065,7341,2376,7342, 214,1709,4307, 804, 35, 707, # 3174
- 324,3622,1601,2546, 140, 459,4068,7343,7344,1365, 839, 272, 978,2257,2572,3409, # 3190
-2128,1363,3623,1423, 697, 100,3071, 48, 70,1231, 495,3114,2193,7345,1294,7346, # 3206
-2079, 462, 586,1042,3246, 853, 256, 988, 185,2377,3410,1698, 434,1084,7347,3411, # 3222
- 314,2615,2775,4308,2330,2331, 569,2280, 637,1816,2518, 757,1162,1878,1616,3412, # 3238
- 287,1577,2115, 768,4309,1671,2854,3511,2519,1321,3737, 909,2413,7348,4069, 933, # 3254
-3738,7349,2052,2356,1222,4310, 765,2414,1322, 786,4311,7350,1919,1462,1677,2895, # 3270
-1699,7351,4312,1424,2437,3115,3624,2590,3316,1774,1940,3413,3880,4070, 309,1369, # 3286
-1130,2812, 364,2230,1653,1299,3881,3512,3882,3883,2646, 525,1085,3021, 902,2000, # 3302
-1475, 964,4313, 421,1844,1415,1057,2281, 940,1364,3116, 376,4314,4315,1381, 7, # 3318
-2520, 983,2378, 336,1710,2675,1845, 321,3414, 559,1131,3022,2742,1808,1132,1313, # 3334
- 265,1481,1857,7352, 352,1203,2813,3247, 167,1089, 420,2814, 776, 792,1724,3513, # 3350
-4071,2438,3248,7353,4072,7354, 446, 229, 333,2743, 901,3739,1200,1557,4316,2647, # 3366
-1920, 395,2744,2676,3740,4073,1835, 125, 916,3178,2616,4317,7355,7356,3741,7357, # 3382
-7358,7359,4318,3117,3625,1133,2547,1757,3415,1510,2313,1409,3514,7360,2145, 438, # 3398
-2591,2896,2379,3317,1068, 958,3023, 461, 311,2855,2677,4074,1915,3179,4075,1978, # 3414
- 383, 750,2745,2617,4076, 274, 539, 385,1278,1442,7361,1154,1964, 384, 561, 210, # 3430
- 98,1295,2548,3515,7362,1711,2415,1482,3416,3884,2897,1257, 129,7363,3742, 642, # 3446
- 523,2776,2777,2648,7364, 141,2231,1333, 68, 176, 441, 876, 907,4077, 603,2592, # 3462
- 710, 171,3417, 404, 549, 18,3118,2393,1410,3626,1666,7365,3516,4319,2898,4320, # 3478
-7366,2973, 368,7367, 146, 366, 99, 871,3627,1543, 748, 807,1586,1185, 22,2258, # 3494
- 379,3743,3180,7368,3181, 505,1941,2618,1991,1382,2314,7369, 380,2357, 218, 702, # 3510
-1817,1248,3418,3024,3517,3318,3249,7370,2974,3628, 930,3250,3744,7371, 59,7372, # 3526
- 585, 601,4078, 497,3419,1112,1314,4321,1801,7373,1223,1472,2174,7374, 749,1836, # 3542
- 690,1899,3745,1772,3885,1476, 429,1043,1790,2232,2116, 917,4079, 447,1086,1629, # 3558
-7375, 556,7376,7377,2020,1654, 844,1090, 105, 550, 966,1758,2815,1008,1782, 686, # 3574
-1095,7378,2282, 793,1602,7379,3518,2593,4322,4080,2933,2297,4323,3746, 980,2496, # 3590
- 544, 353, 527,4324, 908,2678,2899,7380, 381,2619,1942,1348,7381,1341,1252, 560, # 3606
-3072,7382,3420,2856,7383,2053, 973, 886,2080, 143,4325,7384,7385, 157,3886, 496, # 3622
-4081, 57, 840, 540,2038,4326,4327,3421,2117,1445, 970,2259,1748,1965,2081,4082, # 3638
-3119,1234,1775,3251,2816,3629, 773,1206,2129,1066,2039,1326,3887,1738,1725,4083, # 3654
- 279,3120, 51,1544,2594, 423,1578,2130,2066, 173,4328,1879,7386,7387,1583, 264, # 3670
- 610,3630,4329,2439, 280, 154,7388,7389,7390,1739, 338,1282,3073, 693,2857,1411, # 3686
-1074,3747,2440,7391,4330,7392,7393,1240, 952,2394,7394,2900,1538,2679, 685,1483, # 3702
-4084,2468,1436, 953,4085,2054,4331, 671,2395, 79,4086,2441,3252, 608, 567,2680, # 3718
-3422,4087,4088,1691, 393,1261,1791,2396,7395,4332,7396,7397,7398,7399,1383,1672, # 3734
-3748,3182,1464, 522,1119, 661,1150, 216, 675,4333,3888,1432,3519, 609,4334,2681, # 3750
-2397,7400,7401,7402,4089,3025, 0,7403,2469, 315, 231,2442, 301,3319,4335,2380, # 3766
-7404, 233,4090,3631,1818,4336,4337,7405, 96,1776,1315,2082,7406, 257,7407,1809, # 3782
-3632,2709,1139,1819,4091,2021,1124,2163,2778,1777,2649,7408,3074, 363,1655,3183, # 3798
-7409,2975,7410,7411,7412,3889,1567,3890, 718, 103,3184, 849,1443, 341,3320,2934, # 3814
-1484,7413,1712, 127, 67, 339,4092,2398, 679,1412, 821,7414,7415, 834, 738, 351, # 3830
-2976,2146, 846, 235,1497,1880, 418,1992,3749,2710, 186,1100,2147,2746,3520,1545, # 3846
-1355,2935,2858,1377, 583,3891,4093,2573,2977,7416,1298,3633,1078,2549,3634,2358, # 3862
- 78,3750,3751, 267,1289,2099,2001,1594,4094, 348, 369,1274,2194,2175,1837,4338, # 3878
-1820,2817,3635,2747,2283,2002,4339,2936,2748, 144,3321, 882,4340,3892,2749,3423, # 3894
-4341,2901,7417,4095,1726, 320,7418,3893,3026, 788,2978,7419,2818,1773,1327,2859, # 3910
-3894,2819,7420,1306,4342,2003,1700,3752,3521,2359,2650, 787,2022, 506, 824,3636, # 3926
- 534, 323,4343,1044,3322,2023,1900, 946,3424,7421,1778,1500,1678,7422,1881,4344, # 3942
- 165, 243,4345,3637,2521, 123, 683,4096, 764,4346, 36,3895,1792, 589,2902, 816, # 3958
- 626,1667,3027,2233,1639,1555,1622,3753,3896,7423,3897,2860,1370,1228,1932, 891, # 3974
-2083,2903, 304,4097,7424, 292,2979,2711,3522, 691,2100,4098,1115,4347, 118, 662, # 3990
-7425, 611,1156, 854,2381,1316,2861, 2, 386, 515,2904,7426,7427,3253, 868,2234, # 4006
-1486, 855,2651, 785,2212,3028,7428,1040,3185,3523,7429,3121, 448,7430,1525,7431, # 4022
-2164,4348,7432,3754,7433,4099,2820,3524,3122, 503, 818,3898,3123,1568, 814, 676, # 4038
-1444, 306,1749,7434,3755,1416,1030, 197,1428, 805,2821,1501,4349,7435,7436,7437, # 4054
-1993,7438,4350,7439,7440,2195, 13,2779,3638,2980,3124,1229,1916,7441,3756,2131, # 4070
-7442,4100,4351,2399,3525,7443,2213,1511,1727,1120,7444,7445, 646,3757,2443, 307, # 4086
-7446,7447,1595,3186,7448,7449,7450,3639,1113,1356,3899,1465,2522,2523,7451, 519, # 4102
-7452, 128,2132, 92,2284,1979,7453,3900,1512, 342,3125,2196,7454,2780,2214,1980, # 4118
-3323,7455, 290,1656,1317, 789, 827,2360,7456,3758,4352, 562, 581,3901,7457, 401, # 4134
-4353,2248, 94,4354,1399,2781,7458,1463,2024,4355,3187,1943,7459, 828,1105,4101, # 4150
-1262,1394,7460,4102, 605,4356,7461,1783,2862,7462,2822, 819,2101, 578,2197,2937, # 4166
-7463,1502, 436,3254,4103,3255,2823,3902,2905,3425,3426,7464,2712,2315,7465,7466, # 4182
-2332,2067, 23,4357, 193, 826,3759,2102, 699,1630,4104,3075, 390,1793,1064,3526, # 4198
-7467,1579,3076,3077,1400,7468,4105,1838,1640,2863,7469,4358,4359, 137,4106, 598, # 4214
-3078,1966, 780, 104, 974,2938,7470, 278, 899, 253, 402, 572, 504, 493,1339,7471, # 4230
-3903,1275,4360,2574,2550,7472,3640,3029,3079,2249, 565,1334,2713, 863, 41,7473, # 4246
-7474,4361,7475,1657,2333, 19, 463,2750,4107, 606,7476,2981,3256,1087,2084,1323, # 4262
-2652,2982,7477,1631,1623,1750,4108,2682,7478,2864, 791,2714,2653,2334, 232,2416, # 4278
-7479,2983,1498,7480,2654,2620, 755,1366,3641,3257,3126,2025,1609, 119,1917,3427, # 4294
- 862,1026,4109,7481,3904,3760,4362,3905,4363,2260,1951,2470,7482,1125, 817,4110, # 4310
-4111,3906,1513,1766,2040,1487,4112,3030,3258,2824,3761,3127,7483,7484,1507,7485, # 4326
-2683, 733, 40,1632,1106,2865, 345,4113, 841,2524, 230,4364,2984,1846,3259,3428, # 4342
-7486,1263, 986,3429,7487, 735, 879, 254,1137, 857, 622,1300,1180,1388,1562,3907, # 4358
-3908,2939, 967,2751,2655,1349, 592,2133,1692,3324,2985,1994,4114,1679,3909,1901, # 4374
-2185,7488, 739,3642,2715,1296,1290,7489,4115,2198,2199,1921,1563,2595,2551,1870, # 4390
-2752,2986,7490, 435,7491, 343,1108, 596, 17,1751,4365,2235,3430,3643,7492,4366, # 4406
- 294,3527,2940,1693, 477, 979, 281,2041,3528, 643,2042,3644,2621,2782,2261,1031, # 4422
-2335,2134,2298,3529,4367, 367,1249,2552,7493,3530,7494,4368,1283,3325,2004, 240, # 4438
-1762,3326,4369,4370, 836,1069,3128, 474,7495,2148,2525, 268,3531,7496,3188,1521, # 4454
-1284,7497,1658,1546,4116,7498,3532,3533,7499,4117,3327,2684,1685,4118, 961,1673, # 4470
-2622, 190,2005,2200,3762,4371,4372,7500, 570,2497,3645,1490,7501,4373,2623,3260, # 4486
-1956,4374, 584,1514, 396,1045,1944,7502,4375,1967,2444,7503,7504,4376,3910, 619, # 4502
-7505,3129,3261, 215,2006,2783,2553,3189,4377,3190,4378, 763,4119,3763,4379,7506, # 4518
-7507,1957,1767,2941,3328,3646,1174, 452,1477,4380,3329,3130,7508,2825,1253,2382, # 4534
-2186,1091,2285,4120, 492,7509, 638,1169,1824,2135,1752,3911, 648, 926,1021,1324, # 4550
-4381, 520,4382, 997, 847,1007, 892,4383,3764,2262,1871,3647,7510,2400,1784,4384, # 4566
-1952,2942,3080,3191,1728,4121,2043,3648,4385,2007,1701,3131,1551, 30,2263,4122, # 4582
-7511,2026,4386,3534,7512, 501,7513,4123, 594,3431,2165,1821,3535,3432,3536,3192, # 4598
- 829,2826,4124,7514,1680,3132,1225,4125,7515,3262,4387,4126,3133,2336,7516,4388, # 4614
-4127,7517,3912,3913,7518,1847,2383,2596,3330,7519,4389, 374,3914, 652,4128,4129, # 4630
- 375,1140, 798,7520,7521,7522,2361,4390,2264, 546,1659, 138,3031,2445,4391,7523, # 4646
-2250, 612,1848, 910, 796,3765,1740,1371, 825,3766,3767,7524,2906,2554,7525, 692, # 4662
- 444,3032,2624, 801,4392,4130,7526,1491, 244,1053,3033,4131,4132, 340,7527,3915, # 4678
-1041,2987, 293,1168, 87,1357,7528,1539, 959,7529,2236, 721, 694,4133,3768, 219, # 4694
-1478, 644,1417,3331,2656,1413,1401,1335,1389,3916,7530,7531,2988,2362,3134,1825, # 4710
- 730,1515, 184,2827, 66,4393,7532,1660,2943, 246,3332, 378,1457, 226,3433, 975, # 4726
-3917,2944,1264,3537, 674, 696,7533, 163,7534,1141,2417,2166, 713,3538,3333,4394, # 4742
-3918,7535,7536,1186, 15,7537,1079,1070,7538,1522,3193,3539, 276,1050,2716, 758, # 4758
-1126, 653,2945,3263,7539,2337, 889,3540,3919,3081,2989, 903,1250,4395,3920,3434, # 4774
-3541,1342,1681,1718, 766,3264, 286, 89,2946,3649,7540,1713,7541,2597,3334,2990, # 4790
-7542,2947,2215,3194,2866,7543,4396,2498,2526, 181, 387,1075,3921, 731,2187,3335, # 4806
-7544,3265, 310, 313,3435,2299, 770,4134, 54,3034, 189,4397,3082,3769,3922,7545, # 4822
-1230,1617,1849, 355,3542,4135,4398,3336, 111,4136,3650,1350,3135,3436,3035,4137, # 4838
-2149,3266,3543,7546,2784,3923,3924,2991, 722,2008,7547,1071, 247,1207,2338,2471, # 4854
-1378,4399,2009, 864,1437,1214,4400, 373,3770,1142,2216, 667,4401, 442,2753,2555, # 4870
-3771,3925,1968,4138,3267,1839, 837, 170,1107, 934,1336,1882,7548,7549,2118,4139, # 4886
-2828, 743,1569,7550,4402,4140, 582,2384,1418,3437,7551,1802,7552, 357,1395,1729, # 4902
-3651,3268,2418,1564,2237,7553,3083,3772,1633,4403,1114,2085,4141,1532,7554, 482, # 4918
-2446,4404,7555,7556,1492, 833,1466,7557,2717,3544,1641,2829,7558,1526,1272,3652, # 4934
-4142,1686,1794, 416,2556,1902,1953,1803,7559,3773,2785,3774,1159,2316,7560,2867, # 4950
-4405,1610,1584,3036,2419,2754, 443,3269,1163,3136,7561,7562,3926,7563,4143,2499, # 4966
-3037,4406,3927,3137,2103,1647,3545,2010,1872,4144,7564,4145, 431,3438,7565, 250, # 4982
- 97, 81,4146,7566,1648,1850,1558, 160, 848,7567, 866, 740,1694,7568,2201,2830, # 4998
-3195,4147,4407,3653,1687, 950,2472, 426, 469,3196,3654,3655,3928,7569,7570,1188, # 5014
- 424,1995, 861,3546,4148,3775,2202,2685, 168,1235,3547,4149,7571,2086,1674,4408, # 5030
-3337,3270, 220,2557,1009,7572,3776, 670,2992, 332,1208, 717,7573,7574,3548,2447, # 5046
-3929,3338,7575, 513,7576,1209,2868,3339,3138,4409,1080,7577,7578,7579,7580,2527, # 5062
-3656,3549, 815,1587,3930,3931,7581,3550,3439,3777,1254,4410,1328,3038,1390,3932, # 5078
-1741,3933,3778,3934,7582, 236,3779,2448,3271,7583,7584,3657,3780,1273,3781,4411, # 5094
-7585, 308,7586,4412, 245,4413,1851,2473,1307,2575, 430, 715,2136,2449,7587, 270, # 5110
- 199,2869,3935,7588,3551,2718,1753, 761,1754, 725,1661,1840,4414,3440,3658,7589, # 5126
-7590, 587, 14,3272, 227,2598, 326, 480,2265, 943,2755,3552, 291, 650,1883,7591, # 5142
-1702,1226, 102,1547, 62,3441, 904,4415,3442,1164,4150,7592,7593,1224,1548,2756, # 5158
- 391, 498,1493,7594,1386,1419,7595,2055,1177,4416, 813, 880,1081,2363, 566,1145, # 5174
-4417,2286,1001,1035,2558,2599,2238, 394,1286,7596,7597,2068,7598, 86,1494,1730, # 5190
-3936, 491,1588, 745, 897,2948, 843,3340,3937,2757,2870,3273,1768, 998,2217,2069, # 5206
- 397,1826,1195,1969,3659,2993,3341, 284,7599,3782,2500,2137,2119,1903,7600,3938, # 5222
-2150,3939,4151,1036,3443,1904, 114,2559,4152, 209,1527,7601,7602,2949,2831,2625, # 5238
-2385,2719,3139, 812,2560,7603,3274,7604,1559, 737,1884,3660,1210, 885, 28,2686, # 5254
-3553,3783,7605,4153,1004,1779,4418,7606, 346,1981,2218,2687,4419,3784,1742, 797, # 5270
-1642,3940,1933,1072,1384,2151, 896,3941,3275,3661,3197,2871,3554,7607,2561,1958, # 5286
-4420,2450,1785,7608,7609,7610,3942,4154,1005,1308,3662,4155,2720,4421,4422,1528, # 5302
-2600, 161,1178,4156,1982, 987,4423,1101,4157, 631,3943,1157,3198,2420,1343,1241, # 5318
-1016,2239,2562, 372, 877,2339,2501,1160, 555,1934, 911,3944,7611, 466,1170, 169, # 5334
-1051,2907,2688,3663,2474,2994,1182,2011,2563,1251,2626,7612, 992,2340,3444,1540, # 5350
-2721,1201,2070,2401,1996,2475,7613,4424, 528,1922,2188,1503,1873,1570,2364,3342, # 5366
-3276,7614, 557,1073,7615,1827,3445,2087,2266,3140,3039,3084, 767,3085,2786,4425, # 5382
-1006,4158,4426,2341,1267,2176,3664,3199, 778,3945,3200,2722,1597,2657,7616,4427, # 5398
-7617,3446,7618,7619,7620,3277,2689,1433,3278, 131, 95,1504,3946, 723,4159,3141, # 5414
-1841,3555,2758,2189,3947,2027,2104,3665,7621,2995,3948,1218,7622,3343,3201,3949, # 5430
-4160,2576, 248,1634,3785, 912,7623,2832,3666,3040,3786, 654, 53,7624,2996,7625, # 5446
-1688,4428, 777,3447,1032,3950,1425,7626, 191, 820,2120,2833, 971,4429, 931,3202, # 5462
- 135, 664, 783,3787,1997, 772,2908,1935,3951,3788,4430,2909,3203, 282,2723, 640, # 5478
-1372,3448,1127, 922, 325,3344,7627,7628, 711,2044,7629,7630,3952,2219,2787,1936, # 5494
-3953,3345,2220,2251,3789,2300,7631,4431,3790,1258,3279,3954,3204,2138,2950,3955, # 5510
-3956,7632,2221, 258,3205,4432, 101,1227,7633,3280,1755,7634,1391,3281,7635,2910, # 5526
-2056, 893,7636,7637,7638,1402,4161,2342,7639,7640,3206,3556,7641,7642, 878,1325, # 5542
-1780,2788,4433, 259,1385,2577, 744,1183,2267,4434,7643,3957,2502,7644, 684,1024, # 5558
-4162,7645, 472,3557,3449,1165,3282,3958,3959, 322,2152, 881, 455,1695,1152,1340, # 5574
- 660, 554,2153,4435,1058,4436,4163, 830,1065,3346,3960,4437,1923,7646,1703,1918, # 5590
-7647, 932,2268, 122,7648,4438, 947, 677,7649,3791,2627, 297,1905,1924,2269,4439, # 5606
-2317,3283,7650,7651,4164,7652,4165, 84,4166, 112, 989,7653, 547,1059,3961, 701, # 5622
-3558,1019,7654,4167,7655,3450, 942, 639, 457,2301,2451, 993,2951, 407, 851, 494, # 5638
-4440,3347, 927,7656,1237,7657,2421,3348, 573,4168, 680, 921,2911,1279,1874, 285, # 5654
- 790,1448,1983, 719,2167,7658,7659,4441,3962,3963,1649,7660,1541, 563,7661,1077, # 5670
-7662,3349,3041,3451, 511,2997,3964,3965,3667,3966,1268,2564,3350,3207,4442,4443, # 5686
-7663, 535,1048,1276,1189,2912,2028,3142,1438,1373,2834,2952,1134,2012,7664,4169, # 5702
-1238,2578,3086,1259,7665, 700,7666,2953,3143,3668,4170,7667,4171,1146,1875,1906, # 5718
-4444,2601,3967, 781,2422, 132,1589, 203, 147, 273,2789,2402, 898,1786,2154,3968, # 5734
-3969,7668,3792,2790,7669,7670,4445,4446,7671,3208,7672,1635,3793, 965,7673,1804, # 5750
-2690,1516,3559,1121,1082,1329,3284,3970,1449,3794, 65,1128,2835,2913,2759,1590, # 5766
-3795,7674,7675, 12,2658, 45, 976,2579,3144,4447, 517,2528,1013,1037,3209,7676, # 5782
-3796,2836,7677,3797,7678,3452,7679,2602, 614,1998,2318,3798,3087,2724,2628,7680, # 5798
-2580,4172, 599,1269,7681,1810,3669,7682,2691,3088, 759,1060, 489,1805,3351,3285, # 5814
-1358,7683,7684,2386,1387,1215,2629,2252, 490,7685,7686,4173,1759,2387,2343,7687, # 5830
-4448,3799,1907,3971,2630,1806,3210,4449,3453,3286,2760,2344, 874,7688,7689,3454, # 5846
-3670,1858, 91,2914,3671,3042,3800,4450,7690,3145,3972,2659,7691,3455,1202,1403, # 5862
-3801,2954,2529,1517,2503,4451,3456,2504,7692,4452,7693,2692,1885,1495,1731,3973, # 5878
-2365,4453,7694,2029,7695,7696,3974,2693,1216, 237,2581,4174,2319,3975,3802,4454, # 5894
-4455,2694,3560,3457, 445,4456,7697,7698,7699,7700,2761, 61,3976,3672,1822,3977, # 5910
-7701, 687,2045, 935, 925, 405,2660, 703,1096,1859,2725,4457,3978,1876,1367,2695, # 5926
-3352, 918,2105,1781,2476, 334,3287,1611,1093,4458, 564,3146,3458,3673,3353, 945, # 5942
-2631,2057,4459,7702,1925, 872,4175,7703,3459,2696,3089, 349,4176,3674,3979,4460, # 5958
-3803,4177,3675,2155,3980,4461,4462,4178,4463,2403,2046, 782,3981, 400, 251,4179, # 5974
-1624,7704,7705, 277,3676, 299,1265, 476,1191,3804,2121,4180,4181,1109, 205,7706, # 5990
-2582,1000,2156,3561,1860,7707,7708,7709,4464,7710,4465,2565, 107,2477,2157,3982, # 6006
-3460,3147,7711,1533, 541,1301, 158, 753,4182,2872,3562,7712,1696, 370,1088,4183, # 6022
-4466,3563, 579, 327, 440, 162,2240, 269,1937,1374,3461, 968,3043, 56,1396,3090, # 6038
-2106,3288,3354,7713,1926,2158,4467,2998,7714,3564,7715,7716,3677,4468,2478,7717, # 6054
-2791,7718,1650,4469,7719,2603,7720,7721,3983,2661,3355,1149,3356,3984,3805,3985, # 6070
-7722,1076, 49,7723, 951,3211,3289,3290, 450,2837, 920,7724,1811,2792,2366,4184, # 6086
-1908,1138,2367,3806,3462,7725,3212,4470,1909,1147,1518,2423,4471,3807,7726,4472, # 6102
-2388,2604, 260,1795,3213,7727,7728,3808,3291, 708,7729,3565,1704,7730,3566,1351, # 6118
-1618,3357,2999,1886, 944,4185,3358,4186,3044,3359,4187,7731,3678, 422, 413,1714, # 6134
-3292, 500,2058,2345,4188,2479,7732,1344,1910, 954,7733,1668,7734,7735,3986,2404, # 6150
-4189,3567,3809,4190,7736,2302,1318,2505,3091, 133,3092,2873,4473, 629, 31,2838, # 6166
-2697,3810,4474, 850, 949,4475,3987,2955,1732,2088,4191,1496,1852,7737,3988, 620, # 6182
-3214, 981,1242,3679,3360,1619,3680,1643,3293,2139,2452,1970,1719,3463,2168,7738, # 6198
-3215,7739,7740,3361,1828,7741,1277,4476,1565,2047,7742,1636,3568,3093,7743, 869, # 6214
-2839, 655,3811,3812,3094,3989,3000,3813,1310,3569,4477,7744,7745,7746,1733, 558, # 6230
-4478,3681, 335,1549,3045,1756,4192,3682,1945,3464,1829,1291,1192, 470,2726,2107, # 6246
-2793, 913,1054,3990,7747,1027,7748,3046,3991,4479, 982,2662,3362,3148,3465,3216, # 6262
-3217,1946,2794,7749, 571,4480,7750,1830,7751,3570,2583,1523,2424,7752,2089, 984, # 6278
-4481,3683,1959,7753,3684, 852, 923,2795,3466,3685, 969,1519, 999,2048,2320,1705, # 6294
-7754,3095, 615,1662, 151, 597,3992,2405,2321,1049, 275,4482,3686,4193, 568,3687, # 6310
-3571,2480,4194,3688,7755,2425,2270, 409,3218,7756,1566,2874,3467,1002, 769,2840, # 6326
- 194,2090,3149,3689,2222,3294,4195, 628,1505,7757,7758,1763,2177,3001,3993, 521, # 6342
-1161,2584,1787,2203,2406,4483,3994,1625,4196,4197, 412, 42,3096, 464,7759,2632, # 6358
-4484,3363,1760,1571,2875,3468,2530,1219,2204,3814,2633,2140,2368,4485,4486,3295, # 6374
-1651,3364,3572,7760,7761,3573,2481,3469,7762,3690,7763,7764,2271,2091, 460,7765, # 6390
-4487,7766,3002, 962, 588,3574, 289,3219,2634,1116, 52,7767,3047,1796,7768,7769, # 6406
-7770,1467,7771,1598,1143,3691,4198,1984,1734,1067,4488,1280,3365, 465,4489,1572, # 6422
- 510,7772,1927,2241,1812,1644,3575,7773,4490,3692,7774,7775,2663,1573,1534,7776, # 6438
-7777,4199, 536,1807,1761,3470,3815,3150,2635,7778,7779,7780,4491,3471,2915,1911, # 6454
-2796,7781,3296,1122, 377,3220,7782, 360,7783,7784,4200,1529, 551,7785,2059,3693, # 6470
-1769,2426,7786,2916,4201,3297,3097,2322,2108,2030,4492,1404, 136,1468,1479, 672, # 6486
-1171,3221,2303, 271,3151,7787,2762,7788,2049, 678,2727, 865,1947,4493,7789,2013, # 6502
-3995,2956,7790,2728,2223,1397,3048,3694,4494,4495,1735,2917,3366,3576,7791,3816, # 6518
- 509,2841,2453,2876,3817,7792,7793,3152,3153,4496,4202,2531,4497,2304,1166,1010, # 6534
- 552, 681,1887,7794,7795,2957,2958,3996,1287,1596,1861,3154, 358, 453, 736, 175, # 6550
- 478,1117, 905,1167,1097,7796,1853,1530,7797,1706,7798,2178,3472,2287,3695,3473, # 6566
-3577,4203,2092,4204,7799,3367,1193,2482,4205,1458,2190,2205,1862,1888,1421,3298, # 6582
-2918,3049,2179,3474, 595,2122,7800,3997,7801,7802,4206,1707,2636, 223,3696,1359, # 6598
- 751,3098, 183,3475,7803,2797,3003, 419,2369, 633, 704,3818,2389, 241,7804,7805, # 6614
-7806, 838,3004,3697,2272,2763,2454,3819,1938,2050,3998,1309,3099,2242,1181,7807, # 6630
-1136,2206,3820,2370,1446,4207,2305,4498,7808,7809,4208,1055,2605, 484,3698,7810, # 6646
-3999, 625,4209,2273,3368,1499,4210,4000,7811,4001,4211,3222,2274,2275,3476,7812, # 6662
-7813,2764, 808,2606,3699,3369,4002,4212,3100,2532, 526,3370,3821,4213, 955,7814, # 6678
-1620,4214,2637,2427,7815,1429,3700,1669,1831, 994, 928,7816,3578,1260,7817,7818, # 6694
-7819,1948,2288, 741,2919,1626,4215,2729,2455, 867,1184, 362,3371,1392,7820,7821, # 6710
-4003,4216,1770,1736,3223,2920,4499,4500,1928,2698,1459,1158,7822,3050,3372,2877, # 6726
-1292,1929,2506,2842,3701,1985,1187,2071,2014,2607,4217,7823,2566,2507,2169,3702, # 6742
-2483,3299,7824,3703,4501,7825,7826, 666,1003,3005,1022,3579,4218,7827,4502,1813, # 6758
-2253, 574,3822,1603, 295,1535, 705,3823,4219, 283, 858, 417,7828,7829,3224,4503, # 6774
-4504,3051,1220,1889,1046,2276,2456,4004,1393,1599, 689,2567, 388,4220,7830,2484, # 6790
- 802,7831,2798,3824,2060,1405,2254,7832,4505,3825,2109,1052,1345,3225,1585,7833, # 6806
- 809,7834,7835,7836, 575,2730,3477, 956,1552,1469,1144,2323,7837,2324,1560,2457, # 6822
-3580,3226,4005, 616,2207,3155,2180,2289,7838,1832,7839,3478,4506,7840,1319,3704, # 6838
-3705,1211,3581,1023,3227,1293,2799,7841,7842,7843,3826, 607,2306,3827, 762,2878, # 6854
-1439,4221,1360,7844,1485,3052,7845,4507,1038,4222,1450,2061,2638,4223,1379,4508, # 6870
-2585,7846,7847,4224,1352,1414,2325,2921,1172,7848,7849,3828,3829,7850,1797,1451, # 6886
-7851,7852,7853,7854,2922,4006,4007,2485,2346, 411,4008,4009,3582,3300,3101,4509, # 6902
-1561,2664,1452,4010,1375,7855,7856, 47,2959, 316,7857,1406,1591,2923,3156,7858, # 6918
-1025,2141,3102,3157, 354,2731, 884,2224,4225,2407, 508,3706, 726,3583, 996,2428, # 6934
-3584, 729,7859, 392,2191,1453,4011,4510,3707,7860,7861,2458,3585,2608,1675,2800, # 6950
- 919,2347,2960,2348,1270,4511,4012, 73,7862,7863, 647,7864,3228,2843,2255,1550, # 6966
-1346,3006,7865,1332, 883,3479,7866,7867,7868,7869,3301,2765,7870,1212, 831,1347, # 6982
-4226,4512,2326,3830,1863,3053, 720,3831,4513,4514,3832,7871,4227,7872,7873,4515, # 6998
-7874,7875,1798,4516,3708,2609,4517,3586,1645,2371,7876,7877,2924, 669,2208,2665, # 7014
-2429,7878,2879,7879,7880,1028,3229,7881,4228,2408,7882,2256,1353,7883,7884,4518, # 7030
-3158, 518,7885,4013,7886,4229,1960,7887,2142,4230,7888,7889,3007,2349,2350,3833, # 7046
- 516,1833,1454,4014,2699,4231,4519,2225,2610,1971,1129,3587,7890,2766,7891,2961, # 7062
-1422, 577,1470,3008,1524,3373,7892,7893, 432,4232,3054,3480,7894,2586,1455,2508, # 7078
-2226,1972,1175,7895,1020,2732,4015,3481,4520,7896,2733,7897,1743,1361,3055,3482, # 7094
-2639,4016,4233,4521,2290, 895, 924,4234,2170, 331,2243,3056, 166,1627,3057,1098, # 7110
-7898,1232,2880,2227,3374,4522, 657, 403,1196,2372, 542,3709,3375,1600,4235,3483, # 7126
-7899,4523,2767,3230, 576, 530,1362,7900,4524,2533,2666,3710,4017,7901, 842,3834, # 7142
-7902,2801,2031,1014,4018, 213,2700,3376, 665, 621,4236,7903,3711,2925,2430,7904, # 7158
-2431,3302,3588,3377,7905,4237,2534,4238,4525,3589,1682,4239,3484,1380,7906, 724, # 7174
-2277, 600,1670,7907,1337,1233,4526,3103,2244,7908,1621,4527,7909, 651,4240,7910, # 7190
-1612,4241,2611,7911,2844,7912,2734,2307,3058,7913, 716,2459,3059, 174,1255,2701, # 7206
-4019,3590, 548,1320,1398, 728,4020,1574,7914,1890,1197,3060,4021,7915,3061,3062, # 7222
-3712,3591,3713, 747,7916, 635,4242,4528,7917,7918,7919,4243,7920,7921,4529,7922, # 7238
-3378,4530,2432, 451,7923,3714,2535,2072,4244,2735,4245,4022,7924,1764,4531,7925, # 7254
-4246, 350,7926,2278,2390,2486,7927,4247,4023,2245,1434,4024, 488,4532, 458,4248, # 7270
-4025,3715, 771,1330,2391,3835,2568,3159,2159,2409,1553,2667,3160,4249,7928,2487, # 7286
-2881,2612,1720,2702,4250,3379,4533,7929,2536,4251,7930,3231,4252,2768,7931,2015, # 7302
-2736,7932,1155,1017,3716,3836,7933,3303,2308, 201,1864,4253,1430,7934,4026,7935, # 7318
-7936,7937,7938,7939,4254,1604,7940, 414,1865, 371,2587,4534,4535,3485,2016,3104, # 7334
-4536,1708, 960,4255, 887, 389,2171,1536,1663,1721,7941,2228,4027,2351,2926,1580, # 7350
-7942,7943,7944,1744,7945,2537,4537,4538,7946,4539,7947,2073,7948,7949,3592,3380, # 7366
-2882,4256,7950,4257,2640,3381,2802, 673,2703,2460, 709,3486,4028,3593,4258,7951, # 7382
-1148, 502, 634,7952,7953,1204,4540,3594,1575,4541,2613,3717,7954,3718,3105, 948, # 7398
-3232, 121,1745,3837,1110,7955,4259,3063,2509,3009,4029,3719,1151,1771,3838,1488, # 7414
-4030,1986,7956,2433,3487,7957,7958,2093,7959,4260,3839,1213,1407,2803, 531,2737, # 7430
-2538,3233,1011,1537,7960,2769,4261,3106,1061,7961,3720,3721,1866,2883,7962,2017, # 7446
- 120,4262,4263,2062,3595,3234,2309,3840,2668,3382,1954,4542,7963,7964,3488,1047, # 7462
-2704,1266,7965,1368,4543,2845, 649,3383,3841,2539,2738,1102,2846,2669,7966,7967, # 7478
-1999,7968,1111,3596,2962,7969,2488,3842,3597,2804,1854,3384,3722,7970,7971,3385, # 7494
-2410,2884,3304,3235,3598,7972,2569,7973,3599,2805,4031,1460, 856,7974,3600,7975, # 7510
-2885,2963,7976,2886,3843,7977,4264, 632,2510, 875,3844,1697,3845,2291,7978,7979, # 7526
-4544,3010,1239, 580,4545,4265,7980, 914, 936,2074,1190,4032,1039,2123,7981,7982, # 7542
-7983,3386,1473,7984,1354,4266,3846,7985,2172,3064,4033, 915,3305,4267,4268,3306, # 7558
-1605,1834,7986,2739, 398,3601,4269,3847,4034, 328,1912,2847,4035,3848,1331,4270, # 7574
-3011, 937,4271,7987,3602,4036,4037,3387,2160,4546,3388, 524, 742, 538,3065,1012, # 7590
-7988,7989,3849,2461,7990, 658,1103, 225,3850,7991,7992,4547,7993,4548,7994,3236, # 7606
-1243,7995,4038, 963,2246,4549,7996,2705,3603,3161,7997,7998,2588,2327,7999,4550, # 7622
-8000,8001,8002,3489,3307, 957,3389,2540,2032,1930,2927,2462, 870,2018,3604,1746, # 7638
-2770,2771,2434,2463,8003,3851,8004,3723,3107,3724,3490,3390,3725,8005,1179,3066, # 7654
-8006,3162,2373,4272,3726,2541,3163,3108,2740,4039,8007,3391,1556,2542,2292, 977, # 7670
-2887,2033,4040,1205,3392,8008,1765,3393,3164,2124,1271,1689, 714,4551,3491,8009, # 7686
-2328,3852, 533,4273,3605,2181, 617,8010,2464,3308,3492,2310,8011,8012,3165,8013, # 7702
-8014,3853,1987, 618, 427,2641,3493,3394,8015,8016,1244,1690,8017,2806,4274,4552, # 7718
-8018,3494,8019,8020,2279,1576, 473,3606,4275,3395, 972,8021,3607,8022,3067,8023, # 7734
-8024,4553,4554,8025,3727,4041,4042,8026, 153,4555, 356,8027,1891,2888,4276,2143, # 7750
- 408, 803,2352,8028,3854,8029,4277,1646,2570,2511,4556,4557,3855,8030,3856,4278, # 7766
-8031,2411,3396, 752,8032,8033,1961,2964,8034, 746,3012,2465,8035,4279,3728, 698, # 7782
-4558,1892,4280,3608,2543,4559,3609,3857,8036,3166,3397,8037,1823,1302,4043,2706, # 7798
-3858,1973,4281,8038,4282,3167, 823,1303,1288,1236,2848,3495,4044,3398, 774,3859, # 7814
-8039,1581,4560,1304,2849,3860,4561,8040,2435,2161,1083,3237,4283,4045,4284, 344, # 7830
-1173, 288,2311, 454,1683,8041,8042,1461,4562,4046,2589,8043,8044,4563, 985, 894, # 7846
-8045,3399,3168,8046,1913,2928,3729,1988,8047,2110,1974,8048,4047,8049,2571,1194, # 7862
- 425,8050,4564,3169,1245,3730,4285,8051,8052,2850,8053, 636,4565,1855,3861, 760, # 7878
-1799,8054,4286,2209,1508,4566,4048,1893,1684,2293,8055,8056,8057,4287,4288,2210, # 7894
- 479,8058,8059, 832,8060,4049,2489,8061,2965,2490,3731, 990,3109, 627,1814,2642, # 7910
-4289,1582,4290,2125,2111,3496,4567,8062, 799,4291,3170,8063,4568,2112,1737,3013, # 7926
-1018, 543, 754,4292,3309,1676,4569,4570,4050,8064,1489,8065,3497,8066,2614,2889, # 7942
-4051,8067,8068,2966,8069,8070,8071,8072,3171,4571,4572,2182,1722,8073,3238,3239, # 7958
-1842,3610,1715, 481, 365,1975,1856,8074,8075,1962,2491,4573,8076,2126,3611,3240, # 7974
- 433,1894,2063,2075,8077, 602,2741,8078,8079,8080,8081,8082,3014,1628,3400,8083, # 7990
-3172,4574,4052,2890,4575,2512,8084,2544,2772,8085,8086,8087,3310,4576,2891,8088, # 8006
-4577,8089,2851,4578,4579,1221,2967,4053,2513,8090,8091,8092,1867,1989,8093,8094, # 8022
-8095,1895,8096,8097,4580,1896,4054, 318,8098,2094,4055,4293,8099,8100, 485,8101, # 8038
- 938,3862, 553,2670, 116,8102,3863,3612,8103,3498,2671,2773,3401,3311,2807,8104, # 8054
-3613,2929,4056,1747,2930,2968,8105,8106, 207,8107,8108,2672,4581,2514,8109,3015, # 8070
- 890,3614,3864,8110,1877,3732,3402,8111,2183,2353,3403,1652,8112,8113,8114, 941, # 8086
-2294, 208,3499,4057,2019, 330,4294,3865,2892,2492,3733,4295,8115,8116,8117,8118, # 8102
-#Everything below is of no interest for detection purpose
-2515,1613,4582,8119,3312,3866,2516,8120,4058,8121,1637,4059,2466,4583,3867,8122, # 8118
-2493,3016,3734,8123,8124,2192,8125,8126,2162,8127,8128,8129,8130,8131,8132,8133, # 8134
-8134,8135,8136,8137,8138,8139,8140,8141,8142,8143,8144,8145,8146,8147,8148,8149, # 8150
-8150,8151,8152,8153,8154,8155,8156,8157,8158,8159,8160,8161,8162,8163,8164,8165, # 8166
-8166,8167,8168,8169,8170,8171,8172,8173,8174,8175,8176,8177,8178,8179,8180,8181, # 8182
-8182,8183,8184,8185,8186,8187,8188,8189,8190,8191,8192,8193,8194,8195,8196,8197, # 8198
-8198,8199,8200,8201,8202,8203,8204,8205,8206,8207,8208,8209,8210,8211,8212,8213, # 8214
-8214,8215,8216,8217,8218,8219,8220,8221,8222,8223,8224,8225,8226,8227,8228,8229, # 8230
-8230,8231,8232,8233,8234,8235,8236,8237,8238,8239,8240,8241,8242,8243,8244,8245, # 8246
-8246,8247,8248,8249,8250,8251,8252,8253,8254,8255,8256,8257,8258,8259,8260,8261, # 8262
-8262,8263,8264,8265,8266,8267,8268,8269,8270,8271,8272,8273,8274,8275,8276,8277, # 8278
-8278,8279,8280,8281,8282,8283,8284,8285,8286,8287,8288,8289,8290,8291,8292,8293, # 8294
-8294,8295,8296,8297,8298,8299,8300,8301,8302,8303,8304,8305,8306,8307,8308,8309, # 8310
-8310,8311,8312,8313,8314,8315,8316,8317,8318,8319,8320,8321,8322,8323,8324,8325, # 8326
-8326,8327,8328,8329,8330,8331,8332,8333,8334,8335,8336,8337,8338,8339,8340,8341, # 8342
-8342,8343,8344,8345,8346,8347,8348,8349,8350,8351,8352,8353,8354,8355,8356,8357, # 8358
-8358,8359,8360,8361,8362,8363,8364,8365,8366,8367,8368,8369,8370,8371,8372,8373, # 8374
-8374,8375,8376,8377,8378,8379,8380,8381,8382,8383,8384,8385,8386,8387,8388,8389, # 8390
-8390,8391,8392,8393,8394,8395,8396,8397,8398,8399,8400,8401,8402,8403,8404,8405, # 8406
-8406,8407,8408,8409,8410,8411,8412,8413,8414,8415,8416,8417,8418,8419,8420,8421, # 8422
-8422,8423,8424,8425,8426,8427,8428,8429,8430,8431,8432,8433,8434,8435,8436,8437, # 8438
-8438,8439,8440,8441,8442,8443,8444,8445,8446,8447,8448,8449,8450,8451,8452,8453, # 8454
-8454,8455,8456,8457,8458,8459,8460,8461,8462,8463,8464,8465,8466,8467,8468,8469, # 8470
-8470,8471,8472,8473,8474,8475,8476,8477,8478,8479,8480,8481,8482,8483,8484,8485, # 8486
-8486,8487,8488,8489,8490,8491,8492,8493,8494,8495,8496,8497,8498,8499,8500,8501, # 8502
-8502,8503,8504,8505,8506,8507,8508,8509,8510,8511,8512,8513,8514,8515,8516,8517, # 8518
-8518,8519,8520,8521,8522,8523,8524,8525,8526,8527,8528,8529,8530,8531,8532,8533, # 8534
-8534,8535,8536,8537,8538,8539,8540,8541,8542,8543,8544,8545,8546,8547,8548,8549, # 8550
-8550,8551,8552,8553,8554,8555,8556,8557,8558,8559,8560,8561,8562,8563,8564,8565, # 8566
-8566,8567,8568,8569,8570,8571,8572,8573,8574,8575,8576,8577,8578,8579,8580,8581, # 8582
-8582,8583,8584,8585,8586,8587,8588,8589,8590,8591,8592,8593,8594,8595,8596,8597, # 8598
-8598,8599,8600,8601,8602,8603,8604,8605,8606,8607,8608,8609,8610,8611,8612,8613, # 8614
-8614,8615,8616,8617,8618,8619,8620,8621,8622,8623,8624,8625,8626,8627,8628,8629, # 8630
-8630,8631,8632,8633,8634,8635,8636,8637,8638,8639,8640,8641,8642,8643,8644,8645, # 8646
-8646,8647,8648,8649,8650,8651,8652,8653,8654,8655,8656,8657,8658,8659,8660,8661, # 8662
-8662,8663,8664,8665,8666,8667,8668,8669,8670,8671,8672,8673,8674,8675,8676,8677, # 8678
-8678,8679,8680,8681,8682,8683,8684,8685,8686,8687,8688,8689,8690,8691,8692,8693, # 8694
-8694,8695,8696,8697,8698,8699,8700,8701,8702,8703,8704,8705,8706,8707,8708,8709, # 8710
-8710,8711,8712,8713,8714,8715,8716,8717,8718,8719,8720,8721,8722,8723,8724,8725, # 8726
-8726,8727,8728,8729,8730,8731,8732,8733,8734,8735,8736,8737,8738,8739,8740,8741) # 8742
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/euctwprober.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/euctwprober.py
deleted file mode 100644
index b073f13..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/euctwprober.py
+++ /dev/null
@@ -1,41 +0,0 @@
-######################## BEGIN LICENSE BLOCK ########################
-# The Original Code is mozilla.org code.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 1998
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-# Mark Pilgrim - port to Python
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301 USA
-######################### END LICENSE BLOCK #########################
-
-from mbcharsetprober import MultiByteCharSetProber
-from codingstatemachine import CodingStateMachine
-from chardistribution import EUCTWDistributionAnalysis
-from mbcssm import EUCTWSMModel
-
-class EUCTWProber(MultiByteCharSetProber):
- def __init__(self):
- MultiByteCharSetProber.__init__(self)
- self._mCodingSM = CodingStateMachine(EUCTWSMModel)
- self._mDistributionAnalyzer = EUCTWDistributionAnalysis()
- self.reset()
-
- def get_charset_name(self):
- return "EUC-TW"
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/gb2312freq.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/gb2312freq.py
deleted file mode 100644
index 7a4d5a1..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/gb2312freq.py
+++ /dev/null
@@ -1,471 +0,0 @@
-######################## BEGIN LICENSE BLOCK ########################
-# The Original Code is Mozilla Communicator client code.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 1998
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-# Mark Pilgrim - port to Python
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301 USA
-######################### END LICENSE BLOCK #########################
-
-# GB2312 most frequently used character table
-#
-# Char to FreqOrder table , from hz6763
-
-# 512 --> 0.79 -- 0.79
-# 1024 --> 0.92 -- 0.13
-# 2048 --> 0.98 -- 0.06
-# 6768 --> 1.00 -- 0.02
-#
-# Ideal Distribution Ratio = 0.79135/(1-0.79135) = 3.79
-# Random Distribution Ration = 512 / (3755 - 512) = 0.157
-#
-# Typical Distribution Ratio about 25% of Ideal one, still much higher that RDR
-
-GB2312_TYPICAL_DISTRIBUTION_RATIO = 0.9
-
-GB2312_TABLE_SIZE = 3760
-
-GB2312CharToFreqOrder = ( \
-1671, 749,1443,2364,3924,3807,2330,3921,1704,3463,2691,1511,1515, 572,3191,2205,
-2361, 224,2558, 479,1711, 963,3162, 440,4060,1905,2966,2947,3580,2647,3961,3842,
-2204, 869,4207, 970,2678,5626,2944,2956,1479,4048, 514,3595, 588,1346,2820,3409,
- 249,4088,1746,1873,2047,1774, 581,1813, 358,1174,3590,1014,1561,4844,2245, 670,
-1636,3112, 889,1286, 953, 556,2327,3060,1290,3141, 613, 185,3477,1367, 850,3820,
-1715,2428,2642,2303,2732,3041,2562,2648,3566,3946,1349, 388,3098,2091,1360,3585,
- 152,1687,1539, 738,1559, 59,1232,2925,2267,1388,1249,1741,1679,2960, 151,1566,
-1125,1352,4271, 924,4296, 385,3166,4459, 310,1245,2850, 70,3285,2729,3534,3575,
-2398,3298,3466,1960,2265, 217,3647, 864,1909,2084,4401,2773,1010,3269,5152, 853,
-3051,3121,1244,4251,1895, 364,1499,1540,2313,1180,3655,2268, 562, 715,2417,3061,
- 544, 336,3768,2380,1752,4075, 950, 280,2425,4382, 183,2759,3272, 333,4297,2155,
-1688,2356,1444,1039,4540, 736,1177,3349,2443,2368,2144,2225, 565, 196,1482,3406,
- 927,1335,4147, 692, 878,1311,1653,3911,3622,1378,4200,1840,2969,3149,2126,1816,
-2534,1546,2393,2760, 737,2494, 13, 447, 245,2747, 38,2765,2129,2589,1079, 606,
- 360, 471,3755,2890, 404, 848, 699,1785,1236, 370,2221,1023,3746,2074,2026,2023,
-2388,1581,2119, 812,1141,3091,2536,1519, 804,2053, 406,1596,1090, 784, 548,4414,
-1806,2264,2936,1100, 343,4114,5096, 622,3358, 743,3668,1510,1626,5020,3567,2513,
-3195,4115,5627,2489,2991, 24,2065,2697,1087,2719, 48,1634, 315, 68, 985,2052,
- 198,2239,1347,1107,1439, 597,2366,2172, 871,3307, 919,2487,2790,1867, 236,2570,
-1413,3794, 906,3365,3381,1701,1982,1818,1524,2924,1205, 616,2586,2072,2004, 575,
- 253,3099, 32,1365,1182, 197,1714,2454,1201, 554,3388,3224,2748, 756,2587, 250,
-2567,1507,1517,3529,1922,2761,2337,3416,1961,1677,2452,2238,3153, 615, 911,1506,
-1474,2495,1265,1906,2749,3756,3280,2161, 898,2714,1759,3450,2243,2444, 563, 26,
-3286,2266,3769,3344,2707,3677, 611,1402, 531,1028,2871,4548,1375, 261,2948, 835,
-1190,4134, 353, 840,2684,1900,3082,1435,2109,1207,1674, 329,1872,2781,4055,2686,
-2104, 608,3318,2423,2957,2768,1108,3739,3512,3271,3985,2203,1771,3520,1418,2054,
-1681,1153, 225,1627,2929, 162,2050,2511,3687,1954, 124,1859,2431,1684,3032,2894,
- 585,4805,3969,2869,2704,2088,2032,2095,3656,2635,4362,2209, 256, 518,2042,2105,
-3777,3657, 643,2298,1148,1779, 190, 989,3544, 414, 11,2135,2063,2979,1471, 403,
-3678, 126, 770,1563, 671,2499,3216,2877, 600,1179, 307,2805,4937,1268,1297,2694,
- 252,4032,1448,1494,1331,1394, 127,2256, 222,1647,1035,1481,3056,1915,1048, 873,
-3651, 210, 33,1608,2516, 200,1520, 415, 102, 0,3389,1287, 817, 91,3299,2940,
- 836,1814, 549,2197,1396,1669,2987,3582,2297,2848,4528,1070, 687, 20,1819, 121,
-1552,1364,1461,1968,2617,3540,2824,2083, 177, 948,4938,2291, 110,4549,2066, 648,
-3359,1755,2110,2114,4642,4845,1693,3937,3308,1257,1869,2123, 208,1804,3159,2992,
-2531,2549,3361,2418,1350,2347,2800,2568,1291,2036,2680, 72, 842,1990, 212,1233,
-1154,1586, 75,2027,3410,4900,1823,1337,2710,2676, 728,2810,1522,3026,4995, 157,
- 755,1050,4022, 710, 785,1936,2194,2085,1406,2777,2400, 150,1250,4049,1206, 807,
-1910, 534, 529,3309,1721,1660, 274, 39,2827, 661,2670,1578, 925,3248,3815,1094,
-4278,4901,4252, 41,1150,3747,2572,2227,4501,3658,4902,3813,3357,3617,2884,2258,
- 887, 538,4187,3199,1294,2439,3042,2329,2343,2497,1255, 107, 543,1527, 521,3478,
-3568, 194,5062, 15, 961,3870,1241,1192,2664, 66,5215,3260,2111,1295,1127,2152,
-3805,4135, 901,1164,1976, 398,1278, 530,1460, 748, 904,1054,1966,1426, 53,2909,
- 509, 523,2279,1534, 536,1019, 239,1685, 460,2353, 673,1065,2401,3600,4298,2272,
-1272,2363, 284,1753,3679,4064,1695, 81, 815,2677,2757,2731,1386, 859, 500,4221,
-2190,2566, 757,1006,2519,2068,1166,1455, 337,2654,3203,1863,1682,1914,3025,1252,
-1409,1366, 847, 714,2834,2038,3209, 964,2970,1901, 885,2553,1078,1756,3049, 301,
-1572,3326, 688,2130,1996,2429,1805,1648,2930,3421,2750,3652,3088, 262,1158,1254,
- 389,1641,1812, 526,1719, 923,2073,1073,1902, 468, 489,4625,1140, 857,2375,3070,
-3319,2863, 380, 116,1328,2693,1161,2244, 273,1212,1884,2769,3011,1775,1142, 461,
-3066,1200,2147,2212, 790, 702,2695,4222,1601,1058, 434,2338,5153,3640, 67,2360,
-4099,2502, 618,3472,1329, 416,1132, 830,2782,1807,2653,3211,3510,1662, 192,2124,
- 296,3979,1739,1611,3684, 23, 118, 324, 446,1239,1225, 293,2520,3814,3795,2535,
-3116, 17,1074, 467,2692,2201, 387,2922, 45,1326,3055,1645,3659,2817, 958, 243,
-1903,2320,1339,2825,1784,3289, 356, 576, 865,2315,2381,3377,3916,1088,3122,1713,
-1655, 935, 628,4689,1034,1327, 441, 800, 720, 894,1979,2183,1528,5289,2702,1071,
-4046,3572,2399,1571,3281, 79, 761,1103, 327, 134, 758,1899,1371,1615, 879, 442,
- 215,2605,2579, 173,2048,2485,1057,2975,3317,1097,2253,3801,4263,1403,1650,2946,
- 814,4968,3487,1548,2644,1567,1285, 2, 295,2636, 97, 946,3576, 832, 141,4257,
-3273, 760,3821,3521,3156,2607, 949,1024,1733,1516,1803,1920,2125,2283,2665,3180,
-1501,2064,3560,2171,1592, 803,3518,1416, 732,3897,4258,1363,1362,2458, 119,1427,
- 602,1525,2608,1605,1639,3175, 694,3064, 10, 465, 76,2000,4846,4208, 444,3781,
-1619,3353,2206,1273,3796, 740,2483, 320,1723,2377,3660,2619,1359,1137,1762,1724,
-2345,2842,1850,1862, 912, 821,1866, 612,2625,1735,2573,3369,1093, 844, 89, 937,
- 930,1424,3564,2413,2972,1004,3046,3019,2011, 711,3171,1452,4178, 428, 801,1943,
- 432, 445,2811, 206,4136,1472, 730, 349, 73, 397,2802,2547, 998,1637,1167, 789,
- 396,3217, 154,1218, 716,1120,1780,2819,4826,1931,3334,3762,2139,1215,2627, 552,
-3664,3628,3232,1405,2383,3111,1356,2652,3577,3320,3101,1703, 640,1045,1370,1246,
-4996, 371,1575,2436,1621,2210, 984,4033,1734,2638, 16,4529, 663,2755,3255,1451,
-3917,2257,1253,1955,2234,1263,2951, 214,1229, 617, 485, 359,1831,1969, 473,2310,
- 750,2058, 165, 80,2864,2419, 361,4344,2416,2479,1134, 796,3726,1266,2943, 860,
-2715, 938, 390,2734,1313,1384, 248, 202, 877,1064,2854, 522,3907, 279,1602, 297,
-2357, 395,3740, 137,2075, 944,4089,2584,1267,3802, 62,1533,2285, 178, 176, 780,
-2440, 201,3707, 590, 478,1560,4354,2117,1075, 30, 74,4643,4004,1635,1441,2745,
- 776,2596, 238,1077,1692,1912,2844, 605, 499,1742,3947, 241,3053, 980,1749, 936,
-2640,4511,2582, 515,1543,2162,5322,2892,2993, 890,2148,1924, 665,1827,3581,1032,
- 968,3163, 339,1044,1896, 270, 583,1791,1720,4367,1194,3488,3669, 43,2523,1657,
- 163,2167, 290,1209,1622,3378, 550, 634,2508,2510, 695,2634,2384,2512,1476,1414,
- 220,1469,2341,2138,2852,3183,2900,4939,2865,3502,1211,3680, 854,3227,1299,2976,
-3172, 186,2998,1459, 443,1067,3251,1495, 321,1932,3054, 909, 753,1410,1828, 436,
-2441,1119,1587,3164,2186,1258, 227, 231,1425,1890,3200,3942, 247, 959, 725,5254,
-2741, 577,2158,2079, 929, 120, 174, 838,2813, 591,1115, 417,2024, 40,3240,1536,
-1037, 291,4151,2354, 632,1298,2406,2500,3535,1825,1846,3451, 205,1171, 345,4238,
- 18,1163, 811, 685,2208,1217, 425,1312,1508,1175,4308,2552,1033, 587,1381,3059,
-2984,3482, 340,1316,4023,3972, 792,3176, 519, 777,4690, 918, 933,4130,2981,3741,
- 90,3360,2911,2200,5184,4550, 609,3079,2030, 272,3379,2736, 363,3881,1130,1447,
- 286, 779, 357,1169,3350,3137,1630,1220,2687,2391, 747,1277,3688,2618,2682,2601,
-1156,3196,5290,4034,3102,1689,3596,3128, 874, 219,2783, 798, 508,1843,2461, 269,
-1658,1776,1392,1913,2983,3287,2866,2159,2372, 829,4076, 46,4253,2873,1889,1894,
- 915,1834,1631,2181,2318, 298, 664,2818,3555,2735, 954,3228,3117, 527,3511,2173,
- 681,2712,3033,2247,2346,3467,1652, 155,2164,3382, 113,1994, 450, 899, 494, 994,
-1237,2958,1875,2336,1926,3727, 545,1577,1550, 633,3473, 204,1305,3072,2410,1956,
-2471, 707,2134, 841,2195,2196,2663,3843,1026,4940, 990,3252,4997, 368,1092, 437,
-3212,3258,1933,1829, 675,2977,2893, 412, 943,3723,4644,3294,3283,2230,2373,5154,
-2389,2241,2661,2323,1404,2524, 593, 787, 677,3008,1275,2059, 438,2709,2609,2240,
-2269,2246,1446, 36,1568,1373,3892,1574,2301,1456,3962, 693,2276,5216,2035,1143,
-2720,1919,1797,1811,2763,4137,2597,1830,1699,1488,1198,2090, 424,1694, 312,3634,
-3390,4179,3335,2252,1214, 561,1059,3243,2295,2561, 975,5155,2321,2751,3772, 472,
-1537,3282,3398,1047,2077,2348,2878,1323,3340,3076, 690,2906, 51, 369, 170,3541,
-1060,2187,2688,3670,2541,1083,1683, 928,3918, 459, 109,4427, 599,3744,4286, 143,
-2101,2730,2490, 82,1588,3036,2121, 281,1860, 477,4035,1238,2812,3020,2716,3312,
-1530,2188,2055,1317, 843, 636,1808,1173,3495, 649, 181,1002, 147,3641,1159,2414,
-3750,2289,2795, 813,3123,2610,1136,4368, 5,3391,4541,2174, 420, 429,1728, 754,
-1228,2115,2219, 347,2223,2733, 735,1518,3003,2355,3134,1764,3948,3329,1888,2424,
-1001,1234,1972,3321,3363,1672,1021,1450,1584, 226, 765, 655,2526,3404,3244,2302,
-3665, 731, 594,2184, 319,1576, 621, 658,2656,4299,2099,3864,1279,2071,2598,2739,
- 795,3086,3699,3908,1707,2352,2402,1382,3136,2475,1465,4847,3496,3865,1085,3004,
-2591,1084, 213,2287,1963,3565,2250, 822, 793,4574,3187,1772,1789,3050, 595,1484,
-1959,2770,1080,2650, 456, 422,2996, 940,3322,4328,4345,3092,2742, 965,2784, 739,
-4124, 952,1358,2498,2949,2565, 332,2698,2378, 660,2260,2473,4194,3856,2919, 535,
-1260,2651,1208,1428,1300,1949,1303,2942, 433,2455,2450,1251,1946, 614,1269, 641,
-1306,1810,2737,3078,2912, 564,2365,1419,1415,1497,4460,2367,2185,1379,3005,1307,
-3218,2175,1897,3063, 682,1157,4040,4005,1712,1160,1941,1399, 394, 402,2952,1573,
-1151,2986,2404, 862, 299,2033,1489,3006, 346, 171,2886,3401,1726,2932, 168,2533,
- 47,2507,1030,3735,1145,3370,1395,1318,1579,3609,4560,2857,4116,1457,2529,1965,
- 504,1036,2690,2988,2405, 745,5871, 849,2397,2056,3081, 863,2359,3857,2096, 99,
-1397,1769,2300,4428,1643,3455,1978,1757,3718,1440, 35,4879,3742,1296,4228,2280,
- 160,5063,1599,2013, 166, 520,3479,1646,3345,3012, 490,1937,1545,1264,2182,2505,
-1096,1188,1369,1436,2421,1667,2792,2460,1270,2122, 727,3167,2143, 806,1706,1012,
-1800,3037, 960,2218,1882, 805, 139,2456,1139,1521, 851,1052,3093,3089, 342,2039,
- 744,5097,1468,1502,1585,2087, 223, 939, 326,2140,2577, 892,2481,1623,4077, 982,
-3708, 135,2131, 87,2503,3114,2326,1106, 876,1616, 547,2997,2831,2093,3441,4530,
-4314, 9,3256,4229,4148, 659,1462,1986,1710,2046,2913,2231,4090,4880,5255,3392,
-3274,1368,3689,4645,1477, 705,3384,3635,1068,1529,2941,1458,3782,1509, 100,1656,
-2548, 718,2339, 408,1590,2780,3548,1838,4117,3719,1345,3530, 717,3442,2778,3220,
-2898,1892,4590,3614,3371,2043,1998,1224,3483, 891, 635, 584,2559,3355, 733,1766,
-1729,1172,3789,1891,2307, 781,2982,2271,1957,1580,5773,2633,2005,4195,3097,1535,
-3213,1189,1934,5693,3262, 586,3118,1324,1598, 517,1564,2217,1868,1893,4445,3728,
-2703,3139,1526,1787,1992,3882,2875,1549,1199,1056,2224,1904,2711,5098,4287, 338,
-1993,3129,3489,2689,1809,2815,1997, 957,1855,3898,2550,3275,3057,1105,1319, 627,
-1505,1911,1883,3526, 698,3629,3456,1833,1431, 746, 77,1261,2017,2296,1977,1885,
- 125,1334,1600, 525,1798,1109,2222,1470,1945, 559,2236,1186,3443,2476,1929,1411,
-2411,3135,1777,3372,2621,1841,1613,3229, 668,1430,1839,2643,2916, 195,1989,2671,
-2358,1387, 629,3205,2293,5256,4439, 123,1310, 888,1879,4300,3021,3605,1003,1162,
-3192,2910,2010, 140,2395,2859, 55,1082,2012,2901, 662, 419,2081,1438, 680,2774,
-4654,3912,1620,1731,1625,5035,4065,2328, 512,1344, 802,5443,2163,2311,2537, 524,
-3399, 98,1155,2103,1918,2606,3925,2816,1393,2465,1504,3773,2177,3963,1478,4346,
- 180,1113,4655,3461,2028,1698, 833,2696,1235,1322,1594,4408,3623,3013,3225,2040,
-3022, 541,2881, 607,3632,2029,1665,1219, 639,1385,1686,1099,2803,3231,1938,3188,
-2858, 427, 676,2772,1168,2025, 454,3253,2486,3556, 230,1950, 580, 791,1991,1280,
-1086,1974,2034, 630, 257,3338,2788,4903,1017, 86,4790, 966,2789,1995,1696,1131,
- 259,3095,4188,1308, 179,1463,5257, 289,4107,1248, 42,3413,1725,2288, 896,1947,
- 774,4474,4254, 604,3430,4264, 392,2514,2588, 452, 237,1408,3018, 988,4531,1970,
-3034,3310, 540,2370,1562,1288,2990, 502,4765,1147, 4,1853,2708, 207, 294,2814,
-4078,2902,2509, 684, 34,3105,3532,2551, 644, 709,2801,2344, 573,1727,3573,3557,
-2021,1081,3100,4315,2100,3681, 199,2263,1837,2385, 146,3484,1195,2776,3949, 997,
-1939,3973,1008,1091,1202,1962,1847,1149,4209,5444,1076, 493, 117,5400,2521, 972,
-1490,2934,1796,4542,2374,1512,2933,2657, 413,2888,1135,2762,2314,2156,1355,2369,
- 766,2007,2527,2170,3124,2491,2593,2632,4757,2437, 234,3125,3591,1898,1750,1376,
-1942,3468,3138, 570,2127,2145,3276,4131, 962, 132,1445,4196, 19, 941,3624,3480,
-3366,1973,1374,4461,3431,2629, 283,2415,2275, 808,2887,3620,2112,2563,1353,3610,
- 955,1089,3103,1053, 96, 88,4097, 823,3808,1583, 399, 292,4091,3313, 421,1128,
- 642,4006, 903,2539,1877,2082, 596, 29,4066,1790, 722,2157, 130, 995,1569, 769,
-1485, 464, 513,2213, 288,1923,1101,2453,4316, 133, 486,2445, 50, 625, 487,2207,
- 57, 423, 481,2962, 159,3729,1558, 491, 303, 482, 501, 240,2837, 112,3648,2392,
-1783, 362, 8,3433,3422, 610,2793,3277,1390,1284,1654, 21,3823, 734, 367, 623,
- 193, 287, 374,1009,1483, 816, 476, 313,2255,2340,1262,2150,2899,1146,2581, 782,
-2116,1659,2018,1880, 255,3586,3314,1110,2867,2137,2564, 986,2767,5185,2006, 650,
- 158, 926, 762, 881,3157,2717,2362,3587, 306,3690,3245,1542,3077,2427,1691,2478,
-2118,2985,3490,2438, 539,2305, 983, 129,1754, 355,4201,2386, 827,2923, 104,1773,
-2838,2771, 411,2905,3919, 376, 767, 122,1114, 828,2422,1817,3506, 266,3460,1007,
-1609,4998, 945,2612,4429,2274, 726,1247,1964,2914,2199,2070,4002,4108, 657,3323,
-1422, 579, 455,2764,4737,1222,2895,1670, 824,1223,1487,2525, 558, 861,3080, 598,
-2659,2515,1967, 752,2583,2376,2214,4180, 977, 704,2464,4999,2622,4109,1210,2961,
- 819,1541, 142,2284, 44, 418, 457,1126,3730,4347,4626,1644,1876,3671,1864, 302,
-1063,5694, 624, 723,1984,3745,1314,1676,2488,1610,1449,3558,3569,2166,2098, 409,
-1011,2325,3704,2306, 818,1732,1383,1824,1844,3757, 999,2705,3497,1216,1423,2683,
-2426,2954,2501,2726,2229,1475,2554,5064,1971,1794,1666,2014,1343, 783, 724, 191,
-2434,1354,2220,5065,1763,2752,2472,4152, 131, 175,2885,3434, 92,1466,4920,2616,
-3871,3872,3866, 128,1551,1632, 669,1854,3682,4691,4125,1230, 188,2973,3290,1302,
-1213, 560,3266, 917, 763,3909,3249,1760, 868,1958, 764,1782,2097, 145,2277,3774,
-4462, 64,1491,3062, 971,2132,3606,2442, 221,1226,1617, 218, 323,1185,3207,3147,
- 571, 619,1473,1005,1744,2281, 449,1887,2396,3685, 275, 375,3816,1743,3844,3731,
- 845,1983,2350,4210,1377, 773, 967,3499,3052,3743,2725,4007,1697,1022,3943,1464,
-3264,2855,2722,1952,1029,2839,2467, 84,4383,2215, 820,1391,2015,2448,3672, 377,
-1948,2168, 797,2545,3536,2578,2645, 94,2874,1678, 405,1259,3071, 771, 546,1315,
- 470,1243,3083, 895,2468, 981, 969,2037, 846,4181, 653,1276,2928, 14,2594, 557,
-3007,2474, 156, 902,1338,1740,2574, 537,2518, 973,2282,2216,2433,1928, 138,2903,
-1293,2631,1612, 646,3457, 839,2935, 111, 496,2191,2847, 589,3186, 149,3994,2060,
-4031,2641,4067,3145,1870, 37,3597,2136,1025,2051,3009,3383,3549,1121,1016,3261,
-1301, 251,2446,2599,2153, 872,3246, 637, 334,3705, 831, 884, 921,3065,3140,4092,
-2198,1944, 246,2964, 108,2045,1152,1921,2308,1031, 203,3173,4170,1907,3890, 810,
-1401,2003,1690, 506, 647,1242,2828,1761,1649,3208,2249,1589,3709,2931,5156,1708,
- 498, 666,2613, 834,3817,1231, 184,2851,1124, 883,3197,2261,3710,1765,1553,2658,
-1178,2639,2351, 93,1193, 942,2538,2141,4402, 235,1821, 870,1591,2192,1709,1871,
-3341,1618,4126,2595,2334, 603, 651, 69, 701, 268,2662,3411,2555,1380,1606, 503,
- 448, 254,2371,2646, 574,1187,2309,1770, 322,2235,1292,1801, 305, 566,1133, 229,
-2067,2057, 706, 167, 483,2002,2672,3295,1820,3561,3067, 316, 378,2746,3452,1112,
- 136,1981, 507,1651,2917,1117, 285,4591, 182,2580,3522,1304, 335,3303,1835,2504,
-1795,1792,2248, 674,1018,2106,2449,1857,2292,2845, 976,3047,1781,2600,2727,1389,
-1281, 52,3152, 153, 265,3950, 672,3485,3951,4463, 430,1183, 365, 278,2169, 27,
-1407,1336,2304, 209,1340,1730,2202,1852,2403,2883, 979,1737,1062, 631,2829,2542,
-3876,2592, 825,2086,2226,3048,3625, 352,1417,3724, 542, 991, 431,1351,3938,1861,
-2294, 826,1361,2927,3142,3503,1738, 463,2462,2723, 582,1916,1595,2808, 400,3845,
-3891,2868,3621,2254, 58,2492,1123, 910,2160,2614,1372,1603,1196,1072,3385,1700,
-3267,1980, 696, 480,2430, 920, 799,1570,2920,1951,2041,4047,2540,1321,4223,2469,
-3562,2228,1271,2602, 401,2833,3351,2575,5157, 907,2312,1256, 410, 263,3507,1582,
- 996, 678,1849,2316,1480, 908,3545,2237, 703,2322, 667,1826,2849,1531,2604,2999,
-2407,3146,2151,2630,1786,3711, 469,3542, 497,3899,2409, 858, 837,4446,3393,1274,
- 786, 620,1845,2001,3311, 484, 308,3367,1204,1815,3691,2332,1532,2557,1842,2020,
-2724,1927,2333,4440, 567, 22,1673,2728,4475,1987,1858,1144,1597, 101,1832,3601,
- 12, 974,3783,4391, 951,1412, 1,3720, 453,4608,4041, 528,1041,1027,3230,2628,
-1129, 875,1051,3291,1203,2262,1069,2860,2799,2149,2615,3278, 144,1758,3040, 31,
- 475,1680, 366,2685,3184, 311,1642,4008,2466,5036,1593,1493,2809, 216,1420,1668,
- 233, 304,2128,3284, 232,1429,1768,1040,2008,3407,2740,2967,2543, 242,2133, 778,
-1565,2022,2620, 505,2189,2756,1098,2273, 372,1614, 708, 553,2846,2094,2278, 169,
-3626,2835,4161, 228,2674,3165, 809,1454,1309, 466,1705,1095, 900,3423, 880,2667,
-3751,5258,2317,3109,2571,4317,2766,1503,1342, 866,4447,1118, 63,2076, 314,1881,
-1348,1061, 172, 978,3515,1747, 532, 511,3970, 6, 601, 905,2699,3300,1751, 276,
-1467,3725,2668, 65,4239,2544,2779,2556,1604, 578,2451,1802, 992,2331,2624,1320,
-3446, 713,1513,1013, 103,2786,2447,1661, 886,1702, 916, 654,3574,2031,1556, 751,
-2178,2821,2179,1498,1538,2176, 271, 914,2251,2080,1325, 638,1953,2937,3877,2432,
-2754, 95,3265,1716, 260,1227,4083, 775, 106,1357,3254, 426,1607, 555,2480, 772,
-1985, 244,2546, 474, 495,1046,2611,1851,2061, 71,2089,1675,2590, 742,3758,2843,
-3222,1433, 267,2180,2576,2826,2233,2092,3913,2435, 956,1745,3075, 856,2113,1116,
- 451, 3,1988,2896,1398, 993,2463,1878,2049,1341,2718,2721,2870,2108, 712,2904,
-4363,2753,2324, 277,2872,2349,2649, 384, 987, 435, 691,3000, 922, 164,3939, 652,
-1500,1184,4153,2482,3373,2165,4848,2335,3775,3508,3154,2806,2830,1554,2102,1664,
-2530,1434,2408, 893,1547,2623,3447,2832,2242,2532,3169,2856,3223,2078, 49,3770,
-3469, 462, 318, 656,2259,3250,3069, 679,1629,2758, 344,1138,1104,3120,1836,1283,
-3115,2154,1437,4448, 934, 759,1999, 794,2862,1038, 533,2560,1722,2342, 855,2626,
-1197,1663,4476,3127, 85,4240,2528, 25,1111,1181,3673, 407,3470,4561,2679,2713,
- 768,1925,2841,3986,1544,1165, 932, 373,1240,2146,1930,2673, 721,4766, 354,4333,
- 391,2963, 187, 61,3364,1442,1102, 330,1940,1767, 341,3809,4118, 393,2496,2062,
-2211, 105, 331, 300, 439, 913,1332, 626, 379,3304,1557, 328, 689,3952, 309,1555,
- 931, 317,2517,3027, 325, 569, 686,2107,3084, 60,1042,1333,2794, 264,3177,4014,
-1628, 258,3712, 7,4464,1176,1043,1778, 683, 114,1975, 78,1492, 383,1886, 510,
- 386, 645,5291,2891,2069,3305,4138,3867,2939,2603,2493,1935,1066,1848,3588,1015,
-1282,1289,4609, 697,1453,3044,2666,3611,1856,2412, 54, 719,1330, 568,3778,2459,
-1748, 788, 492, 551,1191,1000, 488,3394,3763, 282,1799, 348,2016,1523,3155,2390,
-1049, 382,2019,1788,1170, 729,2968,3523, 897,3926,2785,2938,3292, 350,2319,3238,
-1718,1717,2655,3453,3143,4465, 161,2889,2980,2009,1421, 56,1908,1640,2387,2232,
-1917,1874,2477,4921, 148, 83,3438, 592,4245,2882,1822,1055, 741, 115,1496,1624,
- 381,1638,4592,1020, 516,3214, 458, 947,4575,1432, 211,1514,2926,1865,2142, 189,
- 852,1221,1400,1486, 882,2299,4036, 351, 28,1122, 700,6479,6480,6481,6482,6483, # last 512
-#Everything below is of no interest for detection purpose
-5508,6484,3900,3414,3974,4441,4024,3537,4037,5628,5099,3633,6485,3148,6486,3636,
-5509,3257,5510,5973,5445,5872,4941,4403,3174,4627,5873,6276,2286,4230,5446,5874,
-5122,6102,6103,4162,5447,5123,5323,4849,6277,3980,3851,5066,4246,5774,5067,6278,
-3001,2807,5695,3346,5775,5974,5158,5448,6487,5975,5976,5776,3598,6279,5696,4806,
-4211,4154,6280,6488,6489,6490,6281,4212,5037,3374,4171,6491,4562,4807,4722,4827,
-5977,6104,4532,4079,5159,5324,5160,4404,3858,5359,5875,3975,4288,4610,3486,4512,
-5325,3893,5360,6282,6283,5560,2522,4231,5978,5186,5449,2569,3878,6284,5401,3578,
-4415,6285,4656,5124,5979,2506,4247,4449,3219,3417,4334,4969,4329,6492,4576,4828,
-4172,4416,4829,5402,6286,3927,3852,5361,4369,4830,4477,4867,5876,4173,6493,6105,
-4657,6287,6106,5877,5450,6494,4155,4868,5451,3700,5629,4384,6288,6289,5878,3189,
-4881,6107,6290,6495,4513,6496,4692,4515,4723,5100,3356,6497,6291,3810,4080,5561,
-3570,4430,5980,6498,4355,5697,6499,4724,6108,6109,3764,4050,5038,5879,4093,3226,
-6292,5068,5217,4693,3342,5630,3504,4831,4377,4466,4309,5698,4431,5777,6293,5778,
-4272,3706,6110,5326,3752,4676,5327,4273,5403,4767,5631,6500,5699,5880,3475,5039,
-6294,5562,5125,4348,4301,4482,4068,5126,4593,5700,3380,3462,5981,5563,3824,5404,
-4970,5511,3825,4738,6295,6501,5452,4516,6111,5881,5564,6502,6296,5982,6503,4213,
-4163,3454,6504,6112,4009,4450,6113,4658,6297,6114,3035,6505,6115,3995,4904,4739,
-4563,4942,4110,5040,3661,3928,5362,3674,6506,5292,3612,4791,5565,4149,5983,5328,
-5259,5021,4725,4577,4564,4517,4364,6298,5405,4578,5260,4594,4156,4157,5453,3592,
-3491,6507,5127,5512,4709,4922,5984,5701,4726,4289,6508,4015,6116,5128,4628,3424,
-4241,5779,6299,4905,6509,6510,5454,5702,5780,6300,4365,4923,3971,6511,5161,3270,
-3158,5985,4100, 867,5129,5703,6117,5363,3695,3301,5513,4467,6118,6512,5455,4232,
-4242,4629,6513,3959,4478,6514,5514,5329,5986,4850,5162,5566,3846,4694,6119,5456,
-4869,5781,3779,6301,5704,5987,5515,4710,6302,5882,6120,4392,5364,5705,6515,6121,
-6516,6517,3736,5988,5457,5989,4695,2457,5883,4551,5782,6303,6304,6305,5130,4971,
-6122,5163,6123,4870,3263,5365,3150,4871,6518,6306,5783,5069,5706,3513,3498,4409,
-5330,5632,5366,5458,5459,3991,5990,4502,3324,5991,5784,3696,4518,5633,4119,6519,
-4630,5634,4417,5707,4832,5992,3418,6124,5993,5567,4768,5218,6520,4595,3458,5367,
-6125,5635,6126,4202,6521,4740,4924,6307,3981,4069,4385,6308,3883,2675,4051,3834,
-4302,4483,5568,5994,4972,4101,5368,6309,5164,5884,3922,6127,6522,6523,5261,5460,
-5187,4164,5219,3538,5516,4111,3524,5995,6310,6311,5369,3181,3386,2484,5188,3464,
-5569,3627,5708,6524,5406,5165,4677,4492,6312,4872,4851,5885,4468,5996,6313,5709,
-5710,6128,2470,5886,6314,5293,4882,5785,3325,5461,5101,6129,5711,5786,6525,4906,
-6526,6527,4418,5887,5712,4808,2907,3701,5713,5888,6528,3765,5636,5331,6529,6530,
-3593,5889,3637,4943,3692,5714,5787,4925,6315,6130,5462,4405,6131,6132,6316,5262,
-6531,6532,5715,3859,5716,5070,4696,5102,3929,5788,3987,4792,5997,6533,6534,3920,
-4809,5000,5998,6535,2974,5370,6317,5189,5263,5717,3826,6536,3953,5001,4883,3190,
-5463,5890,4973,5999,4741,6133,6134,3607,5570,6000,4711,3362,3630,4552,5041,6318,
-6001,2950,2953,5637,4646,5371,4944,6002,2044,4120,3429,6319,6537,5103,4833,6538,
-6539,4884,4647,3884,6003,6004,4758,3835,5220,5789,4565,5407,6540,6135,5294,4697,
-4852,6320,6321,3206,4907,6541,6322,4945,6542,6136,6543,6323,6005,4631,3519,6544,
-5891,6545,5464,3784,5221,6546,5571,4659,6547,6324,6137,5190,6548,3853,6549,4016,
-4834,3954,6138,5332,3827,4017,3210,3546,4469,5408,5718,3505,4648,5790,5131,5638,
-5791,5465,4727,4318,6325,6326,5792,4553,4010,4698,3439,4974,3638,4335,3085,6006,
-5104,5042,5166,5892,5572,6327,4356,4519,5222,5573,5333,5793,5043,6550,5639,5071,
-4503,6328,6139,6551,6140,3914,3901,5372,6007,5640,4728,4793,3976,3836,4885,6552,
-4127,6553,4451,4102,5002,6554,3686,5105,6555,5191,5072,5295,4611,5794,5296,6556,
-5893,5264,5894,4975,5466,5265,4699,4976,4370,4056,3492,5044,4886,6557,5795,4432,
-4769,4357,5467,3940,4660,4290,6141,4484,4770,4661,3992,6329,4025,4662,5022,4632,
-4835,4070,5297,4663,4596,5574,5132,5409,5895,6142,4504,5192,4664,5796,5896,3885,
-5575,5797,5023,4810,5798,3732,5223,4712,5298,4084,5334,5468,6143,4052,4053,4336,
-4977,4794,6558,5335,4908,5576,5224,4233,5024,4128,5469,5225,4873,6008,5045,4729,
-4742,4633,3675,4597,6559,5897,5133,5577,5003,5641,5719,6330,6560,3017,2382,3854,
-4406,4811,6331,4393,3964,4946,6561,2420,3722,6562,4926,4378,3247,1736,4442,6332,
-5134,6333,5226,3996,2918,5470,4319,4003,4598,4743,4744,4485,3785,3902,5167,5004,
-5373,4394,5898,6144,4874,1793,3997,6334,4085,4214,5106,5642,4909,5799,6009,4419,
-4189,3330,5899,4165,4420,5299,5720,5227,3347,6145,4081,6335,2876,3930,6146,3293,
-3786,3910,3998,5900,5300,5578,2840,6563,5901,5579,6147,3531,5374,6564,6565,5580,
-4759,5375,6566,6148,3559,5643,6336,6010,5517,6337,6338,5721,5902,3873,6011,6339,
-6567,5518,3868,3649,5722,6568,4771,4947,6569,6149,4812,6570,2853,5471,6340,6341,
-5644,4795,6342,6012,5723,6343,5724,6013,4349,6344,3160,6150,5193,4599,4514,4493,
-5168,4320,6345,4927,3666,4745,5169,5903,5005,4928,6346,5725,6014,4730,4203,5046,
-4948,3395,5170,6015,4150,6016,5726,5519,6347,5047,3550,6151,6348,4197,4310,5904,
-6571,5581,2965,6152,4978,3960,4291,5135,6572,5301,5727,4129,4026,5905,4853,5728,
-5472,6153,6349,4533,2700,4505,5336,4678,3583,5073,2994,4486,3043,4554,5520,6350,
-6017,5800,4487,6351,3931,4103,5376,6352,4011,4321,4311,4190,5136,6018,3988,3233,
-4350,5906,5645,4198,6573,5107,3432,4191,3435,5582,6574,4139,5410,6353,5411,3944,
-5583,5074,3198,6575,6354,4358,6576,5302,4600,5584,5194,5412,6577,6578,5585,5413,
-5303,4248,5414,3879,4433,6579,4479,5025,4854,5415,6355,4760,4772,3683,2978,4700,
-3797,4452,3965,3932,3721,4910,5801,6580,5195,3551,5907,3221,3471,3029,6019,3999,
-5908,5909,5266,5267,3444,3023,3828,3170,4796,5646,4979,4259,6356,5647,5337,3694,
-6357,5648,5338,4520,4322,5802,3031,3759,4071,6020,5586,4836,4386,5048,6581,3571,
-4679,4174,4949,6154,4813,3787,3402,3822,3958,3215,3552,5268,4387,3933,4950,4359,
-6021,5910,5075,3579,6358,4234,4566,5521,6359,3613,5049,6022,5911,3375,3702,3178,
-4911,5339,4521,6582,6583,4395,3087,3811,5377,6023,6360,6155,4027,5171,5649,4421,
-4249,2804,6584,2270,6585,4000,4235,3045,6156,5137,5729,4140,4312,3886,6361,4330,
-6157,4215,6158,3500,3676,4929,4331,3713,4930,5912,4265,3776,3368,5587,4470,4855,
-3038,4980,3631,6159,6160,4132,4680,6161,6362,3923,4379,5588,4255,6586,4121,6587,
-6363,4649,6364,3288,4773,4774,6162,6024,6365,3543,6588,4274,3107,3737,5050,5803,
-4797,4522,5589,5051,5730,3714,4887,5378,4001,4523,6163,5026,5522,4701,4175,2791,
-3760,6589,5473,4224,4133,3847,4814,4815,4775,3259,5416,6590,2738,6164,6025,5304,
-3733,5076,5650,4816,5590,6591,6165,6592,3934,5269,6593,3396,5340,6594,5804,3445,
-3602,4042,4488,5731,5732,3525,5591,4601,5196,6166,6026,5172,3642,4612,3202,4506,
-4798,6366,3818,5108,4303,5138,5139,4776,3332,4304,2915,3415,4434,5077,5109,4856,
-2879,5305,4817,6595,5913,3104,3144,3903,4634,5341,3133,5110,5651,5805,6167,4057,
-5592,2945,4371,5593,6596,3474,4182,6367,6597,6168,4507,4279,6598,2822,6599,4777,
-4713,5594,3829,6169,3887,5417,6170,3653,5474,6368,4216,2971,5228,3790,4579,6369,
-5733,6600,6601,4951,4746,4555,6602,5418,5475,6027,3400,4665,5806,6171,4799,6028,
-5052,6172,3343,4800,4747,5006,6370,4556,4217,5476,4396,5229,5379,5477,3839,5914,
-5652,5807,4714,3068,4635,5808,6173,5342,4192,5078,5419,5523,5734,6174,4557,6175,
-4602,6371,6176,6603,5809,6372,5735,4260,3869,5111,5230,6029,5112,6177,3126,4681,
-5524,5915,2706,3563,4748,3130,6178,4018,5525,6604,6605,5478,4012,4837,6606,4534,
-4193,5810,4857,3615,5479,6030,4082,3697,3539,4086,5270,3662,4508,4931,5916,4912,
-5811,5027,3888,6607,4397,3527,3302,3798,2775,2921,2637,3966,4122,4388,4028,4054,
-1633,4858,5079,3024,5007,3982,3412,5736,6608,3426,3236,5595,3030,6179,3427,3336,
-3279,3110,6373,3874,3039,5080,5917,5140,4489,3119,6374,5812,3405,4494,6031,4666,
-4141,6180,4166,6032,5813,4981,6609,5081,4422,4982,4112,3915,5653,3296,3983,6375,
-4266,4410,5654,6610,6181,3436,5082,6611,5380,6033,3819,5596,4535,5231,5306,5113,
-6612,4952,5918,4275,3113,6613,6376,6182,6183,5814,3073,4731,4838,5008,3831,6614,
-4888,3090,3848,4280,5526,5232,3014,5655,5009,5737,5420,5527,6615,5815,5343,5173,
-5381,4818,6616,3151,4953,6617,5738,2796,3204,4360,2989,4281,5739,5174,5421,5197,
-3132,5141,3849,5142,5528,5083,3799,3904,4839,5480,2880,4495,3448,6377,6184,5271,
-5919,3771,3193,6034,6035,5920,5010,6036,5597,6037,6378,6038,3106,5422,6618,5423,
-5424,4142,6619,4889,5084,4890,4313,5740,6620,3437,5175,5307,5816,4199,5198,5529,
-5817,5199,5656,4913,5028,5344,3850,6185,2955,5272,5011,5818,4567,4580,5029,5921,
-3616,5233,6621,6622,6186,4176,6039,6379,6380,3352,5200,5273,2908,5598,5234,3837,
-5308,6623,6624,5819,4496,4323,5309,5201,6625,6626,4983,3194,3838,4167,5530,5922,
-5274,6381,6382,3860,3861,5599,3333,4292,4509,6383,3553,5481,5820,5531,4778,6187,
-3955,3956,4324,4389,4218,3945,4325,3397,2681,5923,4779,5085,4019,5482,4891,5382,
-5383,6040,4682,3425,5275,4094,6627,5310,3015,5483,5657,4398,5924,3168,4819,6628,
-5925,6629,5532,4932,4613,6041,6630,4636,6384,4780,4204,5658,4423,5821,3989,4683,
-5822,6385,4954,6631,5345,6188,5425,5012,5384,3894,6386,4490,4104,6632,5741,5053,
-6633,5823,5926,5659,5660,5927,6634,5235,5742,5824,4840,4933,4820,6387,4859,5928,
-4955,6388,4143,3584,5825,5346,5013,6635,5661,6389,5014,5484,5743,4337,5176,5662,
-6390,2836,6391,3268,6392,6636,6042,5236,6637,4158,6638,5744,5663,4471,5347,3663,
-4123,5143,4293,3895,6639,6640,5311,5929,5826,3800,6189,6393,6190,5664,5348,3554,
-3594,4749,4603,6641,5385,4801,6043,5827,4183,6642,5312,5426,4761,6394,5665,6191,
-4715,2669,6643,6644,5533,3185,5427,5086,5930,5931,5386,6192,6044,6645,4781,4013,
-5745,4282,4435,5534,4390,4267,6045,5746,4984,6046,2743,6193,3501,4087,5485,5932,
-5428,4184,4095,5747,4061,5054,3058,3862,5933,5600,6646,5144,3618,6395,3131,5055,
-5313,6396,4650,4956,3855,6194,3896,5202,4985,4029,4225,6195,6647,5828,5486,5829,
-3589,3002,6648,6397,4782,5276,6649,6196,6650,4105,3803,4043,5237,5830,6398,4096,
-3643,6399,3528,6651,4453,3315,4637,6652,3984,6197,5535,3182,3339,6653,3096,2660,
-6400,6654,3449,5934,4250,4236,6047,6401,5831,6655,5487,3753,4062,5832,6198,6199,
-6656,3766,6657,3403,4667,6048,6658,4338,2897,5833,3880,2797,3780,4326,6659,5748,
-5015,6660,5387,4351,5601,4411,6661,3654,4424,5935,4339,4072,5277,4568,5536,6402,
-6662,5238,6663,5349,5203,6200,5204,6201,5145,4536,5016,5056,4762,5834,4399,4957,
-6202,6403,5666,5749,6664,4340,6665,5936,5177,5667,6666,6667,3459,4668,6404,6668,
-6669,4543,6203,6670,4276,6405,4480,5537,6671,4614,5205,5668,6672,3348,2193,4763,
-6406,6204,5937,5602,4177,5669,3419,6673,4020,6205,4443,4569,5388,3715,3639,6407,
-6049,4058,6206,6674,5938,4544,6050,4185,4294,4841,4651,4615,5488,6207,6408,6051,
-5178,3241,3509,5835,6208,4958,5836,4341,5489,5278,6209,2823,5538,5350,5206,5429,
-6675,4638,4875,4073,3516,4684,4914,4860,5939,5603,5389,6052,5057,3237,5490,3791,
-6676,6409,6677,4821,4915,4106,5351,5058,4243,5539,4244,5604,4842,4916,5239,3028,
-3716,5837,5114,5605,5390,5940,5430,6210,4332,6678,5540,4732,3667,3840,6053,4305,
-3408,5670,5541,6410,2744,5240,5750,6679,3234,5606,6680,5607,5671,3608,4283,4159,
-4400,5352,4783,6681,6411,6682,4491,4802,6211,6412,5941,6413,6414,5542,5751,6683,
-4669,3734,5942,6684,6415,5943,5059,3328,4670,4144,4268,6685,6686,6687,6688,4372,
-3603,6689,5944,5491,4373,3440,6416,5543,4784,4822,5608,3792,4616,5838,5672,3514,
-5391,6417,4892,6690,4639,6691,6054,5673,5839,6055,6692,6056,5392,6212,4038,5544,
-5674,4497,6057,6693,5840,4284,5675,4021,4545,5609,6418,4454,6419,6213,4113,4472,
-5314,3738,5087,5279,4074,5610,4959,4063,3179,4750,6058,6420,6214,3476,4498,4716,
-5431,4960,4685,6215,5241,6694,6421,6216,6695,5841,5945,6422,3748,5946,5179,3905,
-5752,5545,5947,4374,6217,4455,6423,4412,6218,4803,5353,6696,3832,5280,6219,4327,
-4702,6220,6221,6059,4652,5432,6424,3749,4751,6425,5753,4986,5393,4917,5948,5030,
-5754,4861,4733,6426,4703,6697,6222,4671,5949,4546,4961,5180,6223,5031,3316,5281,
-6698,4862,4295,4934,5207,3644,6427,5842,5950,6428,6429,4570,5843,5282,6430,6224,
-5088,3239,6060,6699,5844,5755,6061,6431,2701,5546,6432,5115,5676,4039,3993,3327,
-4752,4425,5315,6433,3941,6434,5677,4617,4604,3074,4581,6225,5433,6435,6226,6062,
-4823,5756,5116,6227,3717,5678,4717,5845,6436,5679,5846,6063,5847,6064,3977,3354,
-6437,3863,5117,6228,5547,5394,4499,4524,6229,4605,6230,4306,4500,6700,5951,6065,
-3693,5952,5089,4366,4918,6701,6231,5548,6232,6702,6438,4704,5434,6703,6704,5953,
-4168,6705,5680,3420,6706,5242,4407,6066,3812,5757,5090,5954,4672,4525,3481,5681,
-4618,5395,5354,5316,5955,6439,4962,6707,4526,6440,3465,4673,6067,6441,5682,6708,
-5435,5492,5758,5683,4619,4571,4674,4804,4893,4686,5493,4753,6233,6068,4269,6442,
-6234,5032,4705,5146,5243,5208,5848,6235,6443,4963,5033,4640,4226,6236,5849,3387,
-6444,6445,4436,4437,5850,4843,5494,4785,4894,6709,4361,6710,5091,5956,3331,6237,
-4987,5549,6069,6711,4342,3517,4473,5317,6070,6712,6071,4706,6446,5017,5355,6713,
-6714,4988,5436,6447,4734,5759,6715,4735,4547,4456,4754,6448,5851,6449,6450,3547,
-5852,5318,6451,6452,5092,4205,6716,6238,4620,4219,5611,6239,6072,4481,5760,5957,
-5958,4059,6240,6453,4227,4537,6241,5761,4030,4186,5244,5209,3761,4457,4876,3337,
-5495,5181,6242,5959,5319,5612,5684,5853,3493,5854,6073,4169,5613,5147,4895,6074,
-5210,6717,5182,6718,3830,6243,2798,3841,6075,6244,5855,5614,3604,4606,5496,5685,
-5118,5356,6719,6454,5960,5357,5961,6720,4145,3935,4621,5119,5962,4261,6721,6455,
-4786,5963,4375,4582,6245,6246,6247,6076,5437,4877,5856,3376,4380,6248,4160,6722,
-5148,6456,5211,6457,6723,4718,6458,6724,6249,5358,4044,3297,6459,6250,5857,5615,
-5497,5245,6460,5498,6725,6251,6252,5550,3793,5499,2959,5396,6461,6462,4572,5093,
-5500,5964,3806,4146,6463,4426,5762,5858,6077,6253,4755,3967,4220,5965,6254,4989,
-5501,6464,4352,6726,6078,4764,2290,5246,3906,5438,5283,3767,4964,2861,5763,5094,
-6255,6256,4622,5616,5859,5860,4707,6727,4285,4708,4824,5617,6257,5551,4787,5212,
-4965,4935,4687,6465,6728,6466,5686,6079,3494,4413,2995,5247,5966,5618,6729,5967,
-5764,5765,5687,5502,6730,6731,6080,5397,6467,4990,6258,6732,4538,5060,5619,6733,
-4719,5688,5439,5018,5149,5284,5503,6734,6081,4607,6259,5120,3645,5861,4583,6260,
-4584,4675,5620,4098,5440,6261,4863,2379,3306,4585,5552,5689,4586,5285,6735,4864,
-6736,5286,6082,6737,4623,3010,4788,4381,4558,5621,4587,4896,3698,3161,5248,4353,
-4045,6262,3754,5183,4588,6738,6263,6739,6740,5622,3936,6741,6468,6742,6264,5095,
-6469,4991,5968,6743,4992,6744,6083,4897,6745,4256,5766,4307,3108,3968,4444,5287,
-3889,4343,6084,4510,6085,4559,6086,4898,5969,6746,5623,5061,4919,5249,5250,5504,
-5441,6265,5320,4878,3242,5862,5251,3428,6087,6747,4237,5624,5442,6266,5553,4539,
-6748,2585,3533,5398,4262,6088,5150,4736,4438,6089,6267,5505,4966,6749,6268,6750,
-6269,5288,5554,3650,6090,6091,4624,6092,5690,6751,5863,4270,5691,4277,5555,5864,
-6752,5692,4720,4865,6470,5151,4688,4825,6753,3094,6754,6471,3235,4653,6755,5213,
-5399,6756,3201,4589,5865,4967,6472,5866,6473,5019,3016,6757,5321,4756,3957,4573,
-6093,4993,5767,4721,6474,6758,5625,6759,4458,6475,6270,6760,5556,4994,5214,5252,
-6271,3875,5768,6094,5034,5506,4376,5769,6761,2120,6476,5253,5770,6762,5771,5970,
-3990,5971,5557,5558,5772,6477,6095,2787,4641,5972,5121,6096,6097,6272,6763,3703,
-5867,5507,6273,4206,6274,4789,6098,6764,3619,3646,3833,3804,2394,3788,4936,3978,
-4866,4899,6099,6100,5559,6478,6765,3599,5868,6101,5869,5870,6275,6766,4527,6767)
-
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/gb2312prober.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/gb2312prober.py
deleted file mode 100644
index 91eb392..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/gb2312prober.py
+++ /dev/null
@@ -1,41 +0,0 @@
-######################## BEGIN LICENSE BLOCK ########################
-# The Original Code is mozilla.org code.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 1998
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-# Mark Pilgrim - port to Python
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301 USA
-######################### END LICENSE BLOCK #########################
-
-from mbcharsetprober import MultiByteCharSetProber
-from codingstatemachine import CodingStateMachine
-from chardistribution import GB2312DistributionAnalysis
-from mbcssm import GB2312SMModel
-
-class GB2312Prober(MultiByteCharSetProber):
- def __init__(self):
- MultiByteCharSetProber.__init__(self)
- self._mCodingSM = CodingStateMachine(GB2312SMModel)
- self._mDistributionAnalyzer = GB2312DistributionAnalysis()
- self.reset()
-
- def get_charset_name(self):
- return "GB2312"
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/hebrewprober.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/hebrewprober.py
deleted file mode 100644
index a2b1eaa..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/hebrewprober.py
+++ /dev/null
@@ -1,269 +0,0 @@
-######################## BEGIN LICENSE BLOCK ########################
-# The Original Code is Mozilla Universal charset detector code.
-#
-# The Initial Developer of the Original Code is
-# Shy Shalom
-# Portions created by the Initial Developer are Copyright (C) 2005
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-# Mark Pilgrim - port to Python
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301 USA
-######################### END LICENSE BLOCK #########################
-
-from charsetprober import CharSetProber
-import constants
-
-# This prober doesn't actually recognize a language or a charset.
-# It is a helper prober for the use of the Hebrew model probers
-
-### General ideas of the Hebrew charset recognition ###
-#
-# Four main charsets exist in Hebrew:
-# "ISO-8859-8" - Visual Hebrew
-# "windows-1255" - Logical Hebrew
-# "ISO-8859-8-I" - Logical Hebrew
-# "x-mac-hebrew" - ?? Logical Hebrew ??
-#
-# Both "ISO" charsets use a completely identical set of code points, whereas
-# "windows-1255" and "x-mac-hebrew" are two different proper supersets of
-# these code points. windows-1255 defines additional characters in the range
-# 0x80-0x9F as some misc punctuation marks as well as some Hebrew-specific
-# diacritics and additional 'Yiddish' ligature letters in the range 0xc0-0xd6.
-# x-mac-hebrew defines similar additional code points but with a different
-# mapping.
-#
-# As far as an average Hebrew text with no diacritics is concerned, all four
-# charsets are identical with respect to code points. Meaning that for the
-# main Hebrew alphabet, all four map the same values to all 27 Hebrew letters
-# (including final letters).
-#
-# The dominant difference between these charsets is their directionality.
-# "Visual" directionality means that the text is ordered as if the renderer is
-# not aware of a BIDI rendering algorithm. The renderer sees the text and
-# draws it from left to right. The text itself when ordered naturally is read
-# backwards. A buffer of Visual Hebrew generally looks like so:
-# "[last word of first line spelled backwards] [whole line ordered backwards
-# and spelled backwards] [first word of first line spelled backwards]
-# [end of line] [last word of second line] ... etc' "
-# adding punctuation marks, numbers and English text to visual text is
-# naturally also "visual" and from left to right.
-#
-# "Logical" directionality means the text is ordered "naturally" according to
-# the order it is read. It is the responsibility of the renderer to display
-# the text from right to left. A BIDI algorithm is used to place general
-# punctuation marks, numbers and English text in the text.
-#
-# Texts in x-mac-hebrew are almost impossible to find on the Internet. From
-# what little evidence I could find, it seems that its general directionality
-# is Logical.
-#
-# To sum up all of the above, the Hebrew probing mechanism knows about two
-# charsets:
-# Visual Hebrew - "ISO-8859-8" - backwards text - Words and sentences are
-# backwards while line order is natural. For charset recognition purposes
-# the line order is unimportant (In fact, for this implementation, even
-# word order is unimportant).
-# Logical Hebrew - "windows-1255" - normal, naturally ordered text.
-#
-# "ISO-8859-8-I" is a subset of windows-1255 and doesn't need to be
-# specifically identified.
-# "x-mac-hebrew" is also identified as windows-1255. A text in x-mac-hebrew
-# that contain special punctuation marks or diacritics is displayed with
-# some unconverted characters showing as question marks. This problem might
-# be corrected using another model prober for x-mac-hebrew. Due to the fact
-# that x-mac-hebrew texts are so rare, writing another model prober isn't
-# worth the effort and performance hit.
-#
-#### The Prober ####
-#
-# The prober is divided between two SBCharSetProbers and a HebrewProber,
-# all of which are managed, created, fed data, inquired and deleted by the
-# SBCSGroupProber. The two SBCharSetProbers identify that the text is in
-# fact some kind of Hebrew, Logical or Visual. The final decision about which
-# one is it is made by the HebrewProber by combining final-letter scores
-# with the scores of the two SBCharSetProbers to produce a final answer.
-#
-# The SBCSGroupProber is responsible for stripping the original text of HTML
-# tags, English characters, numbers, low-ASCII punctuation characters, spaces
-# and new lines. It reduces any sequence of such characters to a single space.
-# The buffer fed to each prober in the SBCS group prober is pure text in
-# high-ASCII.
-# The two SBCharSetProbers (model probers) share the same language model:
-# Win1255Model.
-# The first SBCharSetProber uses the model normally as any other
-# SBCharSetProber does, to recognize windows-1255, upon which this model was
-# built. The second SBCharSetProber is told to make the pair-of-letter
-# lookup in the language model backwards. This in practice exactly simulates
-# a visual Hebrew model using the windows-1255 logical Hebrew model.
-#
-# The HebrewProber is not using any language model. All it does is look for
-# final-letter evidence suggesting the text is either logical Hebrew or visual
-# Hebrew. Disjointed from the model probers, the results of the HebrewProber
-# alone are meaningless. HebrewProber always returns 0.00 as confidence
-# since it never identifies a charset by itself. Instead, the pointer to the
-# HebrewProber is passed to the model probers as a helper "Name Prober".
-# When the Group prober receives a positive identification from any prober,
-# it asks for the name of the charset identified. If the prober queried is a
-# Hebrew model prober, the model prober forwards the call to the
-# HebrewProber to make the final decision. In the HebrewProber, the
-# decision is made according to the final-letters scores maintained and Both
-# model probers scores. The answer is returned in the form of the name of the
-# charset identified, either "windows-1255" or "ISO-8859-8".
-
-# windows-1255 / ISO-8859-8 code points of interest
-FINAL_KAF = '\xea'
-NORMAL_KAF = '\xeb'
-FINAL_MEM = '\xed'
-NORMAL_MEM = '\xee'
-FINAL_NUN = '\xef'
-NORMAL_NUN = '\xf0'
-FINAL_PE = '\xf3'
-NORMAL_PE = '\xf4'
-FINAL_TSADI = '\xf5'
-NORMAL_TSADI = '\xf6'
-
-# Minimum Visual vs Logical final letter score difference.
-# If the difference is below this, don't rely solely on the final letter score distance.
-MIN_FINAL_CHAR_DISTANCE = 5
-
-# Minimum Visual vs Logical model score difference.
-# If the difference is below this, don't rely at all on the model score distance.
-MIN_MODEL_DISTANCE = 0.01
-
-VISUAL_HEBREW_NAME = "ISO-8859-8"
-LOGICAL_HEBREW_NAME = "windows-1255"
-
-class HebrewProber(CharSetProber):
- def __init__(self):
- CharSetProber.__init__(self)
- self._mLogicalProber = None
- self._mVisualProber = None
- self.reset()
-
- def reset(self):
- self._mFinalCharLogicalScore = 0
- self._mFinalCharVisualScore = 0
- # The two last characters seen in the previous buffer,
- # mPrev and mBeforePrev are initialized to space in order to simulate a word
- # delimiter at the beginning of the data
- self._mPrev = ' '
- self._mBeforePrev = ' '
- # These probers are owned by the group prober.
-
- def set_model_probers(self, logicalProber, visualProber):
- self._mLogicalProber = logicalProber
- self._mVisualProber = visualProber
-
- def is_final(self, c):
- return c in [FINAL_KAF, FINAL_MEM, FINAL_NUN, FINAL_PE, FINAL_TSADI]
-
- def is_non_final(self, c):
- # The normal Tsadi is not a good Non-Final letter due to words like
- # 'lechotet' (to chat) containing an apostrophe after the tsadi. This
- # apostrophe is converted to a space in FilterWithoutEnglishLetters causing
- # the Non-Final tsadi to appear at an end of a word even though this is not
- # the case in the original text.
- # The letters Pe and Kaf rarely display a related behavior of not being a
- # good Non-Final letter. Words like 'Pop', 'Winamp' and 'Mubarak' for
- # example legally end with a Non-Final Pe or Kaf. However, the benefit of
- # these letters as Non-Final letters outweighs the damage since these words
- # are quite rare.
- return c in [NORMAL_KAF, NORMAL_MEM, NORMAL_NUN, NORMAL_PE]
-
- def feed(self, aBuf):
- # Final letter analysis for logical-visual decision.
- # Look for evidence that the received buffer is either logical Hebrew or
- # visual Hebrew.
- # The following cases are checked:
- # 1) A word longer than 1 letter, ending with a final letter. This is an
- # indication that the text is laid out "naturally" since the final letter
- # really appears at the end. +1 for logical score.
- # 2) A word longer than 1 letter, ending with a Non-Final letter. In normal
- # Hebrew, words ending with Kaf, Mem, Nun, Pe or Tsadi, should not end with
- # the Non-Final form of that letter. Exceptions to this rule are mentioned
- # above in isNonFinal(). This is an indication that the text is laid out
- # backwards. +1 for visual score
- # 3) A word longer than 1 letter, starting with a final letter. Final letters
- # should not appear at the beginning of a word. This is an indication that
- # the text is laid out backwards. +1 for visual score.
- #
- # The visual score and logical score are accumulated throughout the text and
- # are finally checked against each other in GetCharSetName().
- # No checking for final letters in the middle of words is done since that case
- # is not an indication for either Logical or Visual text.
- #
- # We automatically filter out all 7-bit characters (replace them with spaces)
- # so the word boundary detection works properly. [MAP]
-
- if self.get_state() == constants.eNotMe:
- # Both model probers say it's not them. No reason to continue.
- return constants.eNotMe
-
- aBuf = self.filter_high_bit_only(aBuf)
-
- for cur in aBuf:
- if cur == ' ':
- # We stand on a space - a word just ended
- if self._mBeforePrev != ' ':
- # next-to-last char was not a space so self._mPrev is not a 1 letter word
- if self.is_final(self._mPrev):
- # case (1) [-2:not space][-1:final letter][cur:space]
- self._mFinalCharLogicalScore += 1
- elif self.is_non_final(self._mPrev):
- # case (2) [-2:not space][-1:Non-Final letter][cur:space]
- self._mFinalCharVisualScore += 1
- else:
- # Not standing on a space
- if (self._mBeforePrev == ' ') and (self.is_final(self._mPrev)) and (cur != ' '):
- # case (3) [-2:space][-1:final letter][cur:not space]
- self._mFinalCharVisualScore += 1
- self._mBeforePrev = self._mPrev
- self._mPrev = cur
-
- # Forever detecting, till the end or until both model probers return eNotMe (handled above)
- return constants.eDetecting
-
- def get_charset_name(self):
- # Make the decision: is it Logical or Visual?
- # If the final letter score distance is dominant enough, rely on it.
- finalsub = self._mFinalCharLogicalScore - self._mFinalCharVisualScore
- if finalsub >= MIN_FINAL_CHAR_DISTANCE:
- return LOGICAL_HEBREW_NAME
- if finalsub <= -MIN_FINAL_CHAR_DISTANCE:
- return VISUAL_HEBREW_NAME
-
- # It's not dominant enough, try to rely on the model scores instead.
- modelsub = self._mLogicalProber.get_confidence() - self._mVisualProber.get_confidence()
- if modelsub > MIN_MODEL_DISTANCE:
- return LOGICAL_HEBREW_NAME
- if modelsub < -MIN_MODEL_DISTANCE:
- return VISUAL_HEBREW_NAME
-
- # Still no good, back to final letter distance, maybe it'll save the day.
- if finalsub < 0.0:
- return VISUAL_HEBREW_NAME
-
- # (finalsub > 0 - Logical) or (don't know what to do) default to Logical.
- return LOGICAL_HEBREW_NAME
-
- def get_state(self):
- # Remain active as long as any of the model probers are active.
- if (self._mLogicalProber.get_state() == constants.eNotMe) and \
- (self._mVisualProber.get_state() == constants.eNotMe):
- return constants.eNotMe
- return constants.eDetecting
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/jisfreq.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/jisfreq.py
deleted file mode 100644
index 5fe4a5c..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/jisfreq.py
+++ /dev/null
@@ -1,567 +0,0 @@
-######################## BEGIN LICENSE BLOCK ########################
-# The Original Code is Mozilla Communicator client code.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 1998
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-# Mark Pilgrim - port to Python
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301 USA
-######################### END LICENSE BLOCK #########################
-
-# Sampling from about 20M text materials include literature and computer technology
-#
-# Japanese frequency table, applied to both S-JIS and EUC-JP
-# They are sorted in order.
-
-# 128 --> 0.77094
-# 256 --> 0.85710
-# 512 --> 0.92635
-# 1024 --> 0.97130
-# 2048 --> 0.99431
-#
-# Ideal Distribution Ratio = 0.92635 / (1-0.92635) = 12.58
-# Random Distribution Ration = 512 / (2965+62+83+86-512) = 0.191
-#
-# Typical Distribution Ratio, 25% of IDR
-
-JIS_TYPICAL_DISTRIBUTION_RATIO = 3.0
-
-# Char to FreqOrder table ,
-JIS_TABLE_SIZE = 4368
-
-JISCharToFreqOrder = ( \
- 40, 1, 6, 182, 152, 180, 295,2127, 285, 381,3295,4304,3068,4606,3165,3510, # 16
-3511,1822,2785,4607,1193,2226,5070,4608, 171,2996,1247, 18, 179,5071, 856,1661, # 32
-1262,5072, 619, 127,3431,3512,3230,1899,1700, 232, 228,1294,1298, 284, 283,2041, # 48
-2042,1061,1062, 48, 49, 44, 45, 433, 434,1040,1041, 996, 787,2997,1255,4305, # 64
-2108,4609,1684,1648,5073,5074,5075,5076,5077,5078,3687,5079,4610,5080,3927,3928, # 80
-5081,3296,3432, 290,2285,1471,2187,5082,2580,2825,1303,2140,1739,1445,2691,3375, # 96
-1691,3297,4306,4307,4611, 452,3376,1182,2713,3688,3069,4308,5083,5084,5085,5086, # 112
-5087,5088,5089,5090,5091,5092,5093,5094,5095,5096,5097,5098,5099,5100,5101,5102, # 128
-5103,5104,5105,5106,5107,5108,5109,5110,5111,5112,4097,5113,5114,5115,5116,5117, # 144
-5118,5119,5120,5121,5122,5123,5124,5125,5126,5127,5128,5129,5130,5131,5132,5133, # 160
-5134,5135,5136,5137,5138,5139,5140,5141,5142,5143,5144,5145,5146,5147,5148,5149, # 176
-5150,5151,5152,4612,5153,5154,5155,5156,5157,5158,5159,5160,5161,5162,5163,5164, # 192
-5165,5166,5167,5168,5169,5170,5171,5172,5173,5174,5175,1472, 598, 618, 820,1205, # 208
-1309,1412,1858,1307,1692,5176,5177,5178,5179,5180,5181,5182,1142,1452,1234,1172, # 224
-1875,2043,2149,1793,1382,2973, 925,2404,1067,1241, 960,1377,2935,1491, 919,1217, # 240
-1865,2030,1406,1499,2749,4098,5183,5184,5185,5186,5187,5188,2561,4099,3117,1804, # 256
-2049,3689,4309,3513,1663,5189,3166,3118,3298,1587,1561,3433,5190,3119,1625,2998, # 272
-3299,4613,1766,3690,2786,4614,5191,5192,5193,5194,2161, 26,3377, 2,3929, 20, # 288
-3691, 47,4100, 50, 17, 16, 35, 268, 27, 243, 42, 155, 24, 154, 29, 184, # 304
- 4, 91, 14, 92, 53, 396, 33, 289, 9, 37, 64, 620, 21, 39, 321, 5, # 320
- 12, 11, 52, 13, 3, 208, 138, 0, 7, 60, 526, 141, 151,1069, 181, 275, # 336
-1591, 83, 132,1475, 126, 331, 829, 15, 69, 160, 59, 22, 157, 55,1079, 312, # 352
- 109, 38, 23, 25, 10, 19, 79,5195, 61, 382,1124, 8, 30,5196,5197,5198, # 368
-5199,5200,5201,5202,5203,5204,5205,5206, 89, 62, 74, 34,2416, 112, 139, 196, # 384
- 271, 149, 84, 607, 131, 765, 46, 88, 153, 683, 76, 874, 101, 258, 57, 80, # 400
- 32, 364, 121,1508, 169,1547, 68, 235, 145,2999, 41, 360,3027, 70, 63, 31, # 416
- 43, 259, 262,1383, 99, 533, 194, 66, 93, 846, 217, 192, 56, 106, 58, 565, # 432
- 280, 272, 311, 256, 146, 82, 308, 71, 100, 128, 214, 655, 110, 261, 104,1140, # 448
- 54, 51, 36, 87, 67,3070, 185,2618,2936,2020, 28,1066,2390,2059,5207,5208, # 464
-5209,5210,5211,5212,5213,5214,5215,5216,4615,5217,5218,5219,5220,5221,5222,5223, # 480
-5224,5225,5226,5227,5228,5229,5230,5231,5232,5233,5234,5235,5236,3514,5237,5238, # 496
-5239,5240,5241,5242,5243,5244,2297,2031,4616,4310,3692,5245,3071,5246,3598,5247, # 512
-4617,3231,3515,5248,4101,4311,4618,3808,4312,4102,5249,4103,4104,3599,5250,5251, # 528
-5252,5253,5254,5255,5256,5257,5258,5259,5260,5261,5262,5263,5264,5265,5266,5267, # 544
-5268,5269,5270,5271,5272,5273,5274,5275,5276,5277,5278,5279,5280,5281,5282,5283, # 560
-5284,5285,5286,5287,5288,5289,5290,5291,5292,5293,5294,5295,5296,5297,5298,5299, # 576
-5300,5301,5302,5303,5304,5305,5306,5307,5308,5309,5310,5311,5312,5313,5314,5315, # 592
-5316,5317,5318,5319,5320,5321,5322,5323,5324,5325,5326,5327,5328,5329,5330,5331, # 608
-5332,5333,5334,5335,5336,5337,5338,5339,5340,5341,5342,5343,5344,5345,5346,5347, # 624
-5348,5349,5350,5351,5352,5353,5354,5355,5356,5357,5358,5359,5360,5361,5362,5363, # 640
-5364,5365,5366,5367,5368,5369,5370,5371,5372,5373,5374,5375,5376,5377,5378,5379, # 656
-5380,5381, 363, 642,2787,2878,2788,2789,2316,3232,2317,3434,2011, 165,1942,3930, # 672
-3931,3932,3933,5382,4619,5383,4620,5384,5385,5386,5387,5388,5389,5390,5391,5392, # 688
-5393,5394,5395,5396,5397,5398,5399,5400,5401,5402,5403,5404,5405,5406,5407,5408, # 704
-5409,5410,5411,5412,5413,5414,5415,5416,5417,5418,5419,5420,5421,5422,5423,5424, # 720
-5425,5426,5427,5428,5429,5430,5431,5432,5433,5434,5435,5436,5437,5438,5439,5440, # 736
-5441,5442,5443,5444,5445,5446,5447,5448,5449,5450,5451,5452,5453,5454,5455,5456, # 752
-5457,5458,5459,5460,5461,5462,5463,5464,5465,5466,5467,5468,5469,5470,5471,5472, # 768
-5473,5474,5475,5476,5477,5478,5479,5480,5481,5482,5483,5484,5485,5486,5487,5488, # 784
-5489,5490,5491,5492,5493,5494,5495,5496,5497,5498,5499,5500,5501,5502,5503,5504, # 800
-5505,5506,5507,5508,5509,5510,5511,5512,5513,5514,5515,5516,5517,5518,5519,5520, # 816
-5521,5522,5523,5524,5525,5526,5527,5528,5529,5530,5531,5532,5533,5534,5535,5536, # 832
-5537,5538,5539,5540,5541,5542,5543,5544,5545,5546,5547,5548,5549,5550,5551,5552, # 848
-5553,5554,5555,5556,5557,5558,5559,5560,5561,5562,5563,5564,5565,5566,5567,5568, # 864
-5569,5570,5571,5572,5573,5574,5575,5576,5577,5578,5579,5580,5581,5582,5583,5584, # 880
-5585,5586,5587,5588,5589,5590,5591,5592,5593,5594,5595,5596,5597,5598,5599,5600, # 896
-5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,5613,5614,5615,5616, # 912
-5617,5618,5619,5620,5621,5622,5623,5624,5625,5626,5627,5628,5629,5630,5631,5632, # 928
-5633,5634,5635,5636,5637,5638,5639,5640,5641,5642,5643,5644,5645,5646,5647,5648, # 944
-5649,5650,5651,5652,5653,5654,5655,5656,5657,5658,5659,5660,5661,5662,5663,5664, # 960
-5665,5666,5667,5668,5669,5670,5671,5672,5673,5674,5675,5676,5677,5678,5679,5680, # 976
-5681,5682,5683,5684,5685,5686,5687,5688,5689,5690,5691,5692,5693,5694,5695,5696, # 992
-5697,5698,5699,5700,5701,5702,5703,5704,5705,5706,5707,5708,5709,5710,5711,5712, # 1008
-5713,5714,5715,5716,5717,5718,5719,5720,5721,5722,5723,5724,5725,5726,5727,5728, # 1024
-5729,5730,5731,5732,5733,5734,5735,5736,5737,5738,5739,5740,5741,5742,5743,5744, # 1040
-5745,5746,5747,5748,5749,5750,5751,5752,5753,5754,5755,5756,5757,5758,5759,5760, # 1056
-5761,5762,5763,5764,5765,5766,5767,5768,5769,5770,5771,5772,5773,5774,5775,5776, # 1072
-5777,5778,5779,5780,5781,5782,5783,5784,5785,5786,5787,5788,5789,5790,5791,5792, # 1088
-5793,5794,5795,5796,5797,5798,5799,5800,5801,5802,5803,5804,5805,5806,5807,5808, # 1104
-5809,5810,5811,5812,5813,5814,5815,5816,5817,5818,5819,5820,5821,5822,5823,5824, # 1120
-5825,5826,5827,5828,5829,5830,5831,5832,5833,5834,5835,5836,5837,5838,5839,5840, # 1136
-5841,5842,5843,5844,5845,5846,5847,5848,5849,5850,5851,5852,5853,5854,5855,5856, # 1152
-5857,5858,5859,5860,5861,5862,5863,5864,5865,5866,5867,5868,5869,5870,5871,5872, # 1168
-5873,5874,5875,5876,5877,5878,5879,5880,5881,5882,5883,5884,5885,5886,5887,5888, # 1184
-5889,5890,5891,5892,5893,5894,5895,5896,5897,5898,5899,5900,5901,5902,5903,5904, # 1200
-5905,5906,5907,5908,5909,5910,5911,5912,5913,5914,5915,5916,5917,5918,5919,5920, # 1216
-5921,5922,5923,5924,5925,5926,5927,5928,5929,5930,5931,5932,5933,5934,5935,5936, # 1232
-5937,5938,5939,5940,5941,5942,5943,5944,5945,5946,5947,5948,5949,5950,5951,5952, # 1248
-5953,5954,5955,5956,5957,5958,5959,5960,5961,5962,5963,5964,5965,5966,5967,5968, # 1264
-5969,5970,5971,5972,5973,5974,5975,5976,5977,5978,5979,5980,5981,5982,5983,5984, # 1280
-5985,5986,5987,5988,5989,5990,5991,5992,5993,5994,5995,5996,5997,5998,5999,6000, # 1296
-6001,6002,6003,6004,6005,6006,6007,6008,6009,6010,6011,6012,6013,6014,6015,6016, # 1312
-6017,6018,6019,6020,6021,6022,6023,6024,6025,6026,6027,6028,6029,6030,6031,6032, # 1328
-6033,6034,6035,6036,6037,6038,6039,6040,6041,6042,6043,6044,6045,6046,6047,6048, # 1344
-6049,6050,6051,6052,6053,6054,6055,6056,6057,6058,6059,6060,6061,6062,6063,6064, # 1360
-6065,6066,6067,6068,6069,6070,6071,6072,6073,6074,6075,6076,6077,6078,6079,6080, # 1376
-6081,6082,6083,6084,6085,6086,6087,6088,6089,6090,6091,6092,6093,6094,6095,6096, # 1392
-6097,6098,6099,6100,6101,6102,6103,6104,6105,6106,6107,6108,6109,6110,6111,6112, # 1408
-6113,6114,2044,2060,4621, 997,1235, 473,1186,4622, 920,3378,6115,6116, 379,1108, # 1424
-4313,2657,2735,3934,6117,3809, 636,3233, 573,1026,3693,3435,2974,3300,2298,4105, # 1440
- 854,2937,2463, 393,2581,2417, 539, 752,1280,2750,2480, 140,1161, 440, 708,1569, # 1456
- 665,2497,1746,1291,1523,3000, 164,1603, 847,1331, 537,1997, 486, 508,1693,2418, # 1472
-1970,2227, 878,1220, 299,1030, 969, 652,2751, 624,1137,3301,2619, 65,3302,2045, # 1488
-1761,1859,3120,1930,3694,3516, 663,1767, 852, 835,3695, 269, 767,2826,2339,1305, # 1504
- 896,1150, 770,1616,6118, 506,1502,2075,1012,2519, 775,2520,2975,2340,2938,4314, # 1520
-3028,2086,1224,1943,2286,6119,3072,4315,2240,1273,1987,3935,1557, 175, 597, 985, # 1536
-3517,2419,2521,1416,3029, 585, 938,1931,1007,1052,1932,1685,6120,3379,4316,4623, # 1552
- 804, 599,3121,1333,2128,2539,1159,1554,2032,3810, 687,2033,2904, 952, 675,1467, # 1568
-3436,6121,2241,1096,1786,2440,1543,1924, 980,1813,2228, 781,2692,1879, 728,1918, # 1584
-3696,4624, 548,1950,4625,1809,1088,1356,3303,2522,1944, 502, 972, 373, 513,2827, # 1600
- 586,2377,2391,1003,1976,1631,6122,2464,1084, 648,1776,4626,2141, 324, 962,2012, # 1616
-2177,2076,1384, 742,2178,1448,1173,1810, 222, 102, 301, 445, 125,2420, 662,2498, # 1632
- 277, 200,1476,1165,1068, 224,2562,1378,1446, 450,1880, 659, 791, 582,4627,2939, # 1648
-3936,1516,1274, 555,2099,3697,1020,1389,1526,3380,1762,1723,1787,2229, 412,2114, # 1664
-1900,2392,3518, 512,2597, 427,1925,2341,3122,1653,1686,2465,2499, 697, 330, 273, # 1680
- 380,2162, 951, 832, 780, 991,1301,3073, 965,2270,3519, 668,2523,2636,1286, 535, # 1696
-1407, 518, 671, 957,2658,2378, 267, 611,2197,3030,6123, 248,2299, 967,1799,2356, # 1712
- 850,1418,3437,1876,1256,1480,2828,1718,6124,6125,1755,1664,2405,6126,4628,2879, # 1728
-2829, 499,2179, 676,4629, 557,2329,2214,2090, 325,3234, 464, 811,3001, 992,2342, # 1744
-2481,1232,1469, 303,2242, 466,1070,2163, 603,1777,2091,4630,2752,4631,2714, 322, # 1760
-2659,1964,1768, 481,2188,1463,2330,2857,3600,2092,3031,2421,4632,2318,2070,1849, # 1776
-2598,4633,1302,2254,1668,1701,2422,3811,2905,3032,3123,2046,4106,1763,1694,4634, # 1792
-1604, 943,1724,1454, 917, 868,2215,1169,2940, 552,1145,1800,1228,1823,1955, 316, # 1808
-1080,2510, 361,1807,2830,4107,2660,3381,1346,1423,1134,4108,6127, 541,1263,1229, # 1824
-1148,2540, 545, 465,1833,2880,3438,1901,3074,2482, 816,3937, 713,1788,2500, 122, # 1840
-1575, 195,1451,2501,1111,6128, 859, 374,1225,2243,2483,4317, 390,1033,3439,3075, # 1856
-2524,1687, 266, 793,1440,2599, 946, 779, 802, 507, 897,1081, 528,2189,1292, 711, # 1872
-1866,1725,1167,1640, 753, 398,2661,1053, 246, 348,4318, 137,1024,3440,1600,2077, # 1888
-2129, 825,4319, 698, 238, 521, 187,2300,1157,2423,1641,1605,1464,1610,1097,2541, # 1904
-1260,1436, 759,2255,1814,2150, 705,3235, 409,2563,3304, 561,3033,2005,2564, 726, # 1920
-1956,2343,3698,4109, 949,3812,3813,3520,1669, 653,1379,2525, 881,2198, 632,2256, # 1936
-1027, 778,1074, 733,1957, 514,1481,2466, 554,2180, 702,3938,1606,1017,1398,6129, # 1952
-1380,3521, 921, 993,1313, 594, 449,1489,1617,1166, 768,1426,1360, 495,1794,3601, # 1968
-1177,3602,1170,4320,2344, 476, 425,3167,4635,3168,1424, 401,2662,1171,3382,1998, # 1984
-1089,4110, 477,3169, 474,6130,1909, 596,2831,1842, 494, 693,1051,1028,1207,3076, # 2000
- 606,2115, 727,2790,1473,1115, 743,3522, 630, 805,1532,4321,2021, 366,1057, 838, # 2016
- 684,1114,2142,4322,2050,1492,1892,1808,2271,3814,2424,1971,1447,1373,3305,1090, # 2032
-1536,3939,3523,3306,1455,2199, 336, 369,2331,1035, 584,2393, 902, 718,2600,6131, # 2048
-2753, 463,2151,1149,1611,2467, 715,1308,3124,1268, 343,1413,3236,1517,1347,2663, # 2064
-2093,3940,2022,1131,1553,2100,2941,1427,3441,2942,1323,2484,6132,1980, 872,2368, # 2080
-2441,2943, 320,2369,2116,1082, 679,1933,3941,2791,3815, 625,1143,2023, 422,2200, # 2096
-3816,6133, 730,1695, 356,2257,1626,2301,2858,2637,1627,1778, 937, 883,2906,2693, # 2112
-3002,1769,1086, 400,1063,1325,3307,2792,4111,3077, 456,2345,1046, 747,6134,1524, # 2128
- 884,1094,3383,1474,2164,1059, 974,1688,2181,2258,1047, 345,1665,1187, 358, 875, # 2144
-3170, 305, 660,3524,2190,1334,1135,3171,1540,1649,2542,1527, 927, 968,2793, 885, # 2160
-1972,1850, 482, 500,2638,1218,1109,1085,2543,1654,2034, 876, 78,2287,1482,1277, # 2176
- 861,1675,1083,1779, 724,2754, 454, 397,1132,1612,2332, 893, 672,1237, 257,2259, # 2192
-2370, 135,3384, 337,2244, 547, 352, 340, 709,2485,1400, 788,1138,2511, 540, 772, # 2208
-1682,2260,2272,2544,2013,1843,1902,4636,1999,1562,2288,4637,2201,1403,1533, 407, # 2224
- 576,3308,1254,2071, 978,3385, 170, 136,1201,3125,2664,3172,2394, 213, 912, 873, # 2240
-3603,1713,2202, 699,3604,3699, 813,3442, 493, 531,1054, 468,2907,1483, 304, 281, # 2256
-4112,1726,1252,2094, 339,2319,2130,2639, 756,1563,2944, 748, 571,2976,1588,2425, # 2272
-2715,1851,1460,2426,1528,1392,1973,3237, 288,3309, 685,3386, 296, 892,2716,2216, # 2288
-1570,2245, 722,1747,2217, 905,3238,1103,6135,1893,1441,1965, 251,1805,2371,3700, # 2304
-2601,1919,1078, 75,2182,1509,1592,1270,2640,4638,2152,6136,3310,3817, 524, 706, # 2320
-1075, 292,3818,1756,2602, 317, 98,3173,3605,3525,1844,2218,3819,2502, 814, 567, # 2336
- 385,2908,1534,6137, 534,1642,3239, 797,6138,1670,1529, 953,4323, 188,1071, 538, # 2352
- 178, 729,3240,2109,1226,1374,2000,2357,2977, 731,2468,1116,2014,2051,6139,1261, # 2368
-1593, 803,2859,2736,3443, 556, 682, 823,1541,6140,1369,2289,1706,2794, 845, 462, # 2384
-2603,2665,1361, 387, 162,2358,1740, 739,1770,1720,1304,1401,3241,1049, 627,1571, # 2400
-2427,3526,1877,3942,1852,1500, 431,1910,1503, 677, 297,2795, 286,1433,1038,1198, # 2416
-2290,1133,1596,4113,4639,2469,1510,1484,3943,6141,2442, 108, 712,4640,2372, 866, # 2432
-3701,2755,3242,1348, 834,1945,1408,3527,2395,3243,1811, 824, 994,1179,2110,1548, # 2448
-1453, 790,3003, 690,4324,4325,2832,2909,3820,1860,3821, 225,1748, 310, 346,1780, # 2464
-2470, 821,1993,2717,2796, 828, 877,3528,2860,2471,1702,2165,2910,2486,1789, 453, # 2480
- 359,2291,1676, 73,1164,1461,1127,3311, 421, 604, 314,1037, 589, 116,2487, 737, # 2496
- 837,1180, 111, 244, 735,6142,2261,1861,1362, 986, 523, 418, 581,2666,3822, 103, # 2512
- 855, 503,1414,1867,2488,1091, 657,1597, 979, 605,1316,4641,1021,2443,2078,2001, # 2528
-1209, 96, 587,2166,1032, 260,1072,2153, 173, 94, 226,3244, 819,2006,4642,4114, # 2544
-2203, 231,1744, 782, 97,2667, 786,3387, 887, 391, 442,2219,4326,1425,6143,2694, # 2560
- 633,1544,1202, 483,2015, 592,2052,1958,2472,1655, 419, 129,4327,3444,3312,1714, # 2576
-1257,3078,4328,1518,1098, 865,1310,1019,1885,1512,1734, 469,2444, 148, 773, 436, # 2592
-1815,1868,1128,1055,4329,1245,2756,3445,2154,1934,1039,4643, 579,1238, 932,2320, # 2608
- 353, 205, 801, 115,2428, 944,2321,1881, 399,2565,1211, 678, 766,3944, 335,2101, # 2624
-1459,1781,1402,3945,2737,2131,1010, 844, 981,1326,1013, 550,1816,1545,2620,1335, # 2640
-1008, 371,2881, 936,1419,1613,3529,1456,1395,2273,1834,2604,1317,2738,2503, 416, # 2656
-1643,4330, 806,1126, 229, 591,3946,1314,1981,1576,1837,1666, 347,1790, 977,3313, # 2672
- 764,2861,1853, 688,2429,1920,1462, 77, 595, 415,2002,3034, 798,1192,4115,6144, # 2688
-2978,4331,3035,2695,2582,2072,2566, 430,2430,1727, 842,1396,3947,3702, 613, 377, # 2704
- 278, 236,1417,3388,3314,3174, 757,1869, 107,3530,6145,1194, 623,2262, 207,1253, # 2720
-2167,3446,3948, 492,1117,1935, 536,1838,2757,1246,4332, 696,2095,2406,1393,1572, # 2736
-3175,1782, 583, 190, 253,1390,2230, 830,3126,3389, 934,3245,1703,1749,2979,1870, # 2752
-2545,1656,2204, 869,2346,4116,3176,1817, 496,1764,4644, 942,1504, 404,1903,1122, # 2768
-1580,3606,2945,1022, 515, 372,1735, 955,2431,3036,6146,2797,1110,2302,2798, 617, # 2784
-6147, 441, 762,1771,3447,3607,3608,1904, 840,3037, 86, 939,1385, 572,1370,2445, # 2800
-1336, 114,3703, 898, 294, 203,3315, 703,1583,2274, 429, 961,4333,1854,1951,3390, # 2816
-2373,3704,4334,1318,1381, 966,1911,2322,1006,1155, 309, 989, 458,2718,1795,1372, # 2832
-1203, 252,1689,1363,3177, 517,1936, 168,1490, 562, 193,3823,1042,4117,1835, 551, # 2848
- 470,4645, 395, 489,3448,1871,1465,2583,2641, 417,1493, 279,1295, 511,1236,1119, # 2864
- 72,1231,1982,1812,3004, 871,1564, 984,3449,1667,2696,2096,4646,2347,2833,1673, # 2880
-3609, 695,3246,2668, 807,1183,4647, 890, 388,2333,1801,1457,2911,1765,1477,1031, # 2896
-3316,3317,1278,3391,2799,2292,2526, 163,3450,4335,2669,1404,1802,6148,2323,2407, # 2912
-1584,1728,1494,1824,1269, 298, 909,3318,1034,1632, 375, 776,1683,2061, 291, 210, # 2928
-1123, 809,1249,1002,2642,3038, 206,1011,2132, 144, 975, 882,1565, 342, 667, 754, # 2944
-1442,2143,1299,2303,2062, 447, 626,2205,1221,2739,2912,1144,1214,2206,2584, 760, # 2960
-1715, 614, 950,1281,2670,2621, 810, 577,1287,2546,4648, 242,2168, 250,2643, 691, # 2976
- 123,2644, 647, 313,1029, 689,1357,2946,1650, 216, 771,1339,1306, 808,2063, 549, # 2992
- 913,1371,2913,2914,6149,1466,1092,1174,1196,1311,2605,2396,1783,1796,3079, 406, # 3008
-2671,2117,3949,4649, 487,1825,2220,6150,2915, 448,2348,1073,6151,2397,1707, 130, # 3024
- 900,1598, 329, 176,1959,2527,1620,6152,2275,4336,3319,1983,2191,3705,3610,2155, # 3040
-3706,1912,1513,1614,6153,1988, 646, 392,2304,1589,3320,3039,1826,1239,1352,1340, # 3056
-2916, 505,2567,1709,1437,2408,2547, 906,6154,2672, 384,1458,1594,1100,1329, 710, # 3072
- 423,3531,2064,2231,2622,1989,2673,1087,1882, 333, 841,3005,1296,2882,2379, 580, # 3088
-1937,1827,1293,2585, 601, 574, 249,1772,4118,2079,1120, 645, 901,1176,1690, 795, # 3104
-2207, 478,1434, 516,1190,1530, 761,2080, 930,1264, 355, 435,1552, 644,1791, 987, # 3120
- 220,1364,1163,1121,1538, 306,2169,1327,1222, 546,2645, 218, 241, 610,1704,3321, # 3136
-1984,1839,1966,2528, 451,6155,2586,3707,2568, 907,3178, 254,2947, 186,1845,4650, # 3152
- 745, 432,1757, 428,1633, 888,2246,2221,2489,3611,2118,1258,1265, 956,3127,1784, # 3168
-4337,2490, 319, 510, 119, 457,3612, 274,2035,2007,4651,1409,3128, 970,2758, 590, # 3184
-2800, 661,2247,4652,2008,3950,1420,1549,3080,3322,3951,1651,1375,2111, 485,2491, # 3200
-1429,1156,6156,2548,2183,1495, 831,1840,2529,2446, 501,1657, 307,1894,3247,1341, # 3216
- 666, 899,2156,1539,2549,1559, 886, 349,2208,3081,2305,1736,3824,2170,2759,1014, # 3232
-1913,1386, 542,1397,2948, 490, 368, 716, 362, 159, 282,2569,1129,1658,1288,1750, # 3248
-2674, 276, 649,2016, 751,1496, 658,1818,1284,1862,2209,2087,2512,3451, 622,2834, # 3264
- 376, 117,1060,2053,1208,1721,1101,1443, 247,1250,3179,1792,3952,2760,2398,3953, # 3280
-6157,2144,3708, 446,2432,1151,2570,3452,2447,2761,2835,1210,2448,3082, 424,2222, # 3296
-1251,2449,2119,2836, 504,1581,4338, 602, 817, 857,3825,2349,2306, 357,3826,1470, # 3312
-1883,2883, 255, 958, 929,2917,3248, 302,4653,1050,1271,1751,2307,1952,1430,2697, # 3328
-2719,2359, 354,3180, 777, 158,2036,4339,1659,4340,4654,2308,2949,2248,1146,2232, # 3344
-3532,2720,1696,2623,3827,6158,3129,1550,2698,1485,1297,1428, 637, 931,2721,2145, # 3360
- 914,2550,2587, 81,2450, 612, 827,2646,1242,4655,1118,2884, 472,1855,3181,3533, # 3376
-3534, 569,1353,2699,1244,1758,2588,4119,2009,2762,2171,3709,1312,1531,6159,1152, # 3392
-1938, 134,1830, 471,3710,2276,1112,1535,3323,3453,3535, 982,1337,2950, 488, 826, # 3408
- 674,1058,1628,4120,2017, 522,2399, 211, 568,1367,3454, 350, 293,1872,1139,3249, # 3424
-1399,1946,3006,1300,2360,3324, 588, 736,6160,2606, 744, 669,3536,3828,6161,1358, # 3440
- 199, 723, 848, 933, 851,1939,1505,1514,1338,1618,1831,4656,1634,3613, 443,2740, # 3456
-3829, 717,1947, 491,1914,6162,2551,1542,4121,1025,6163,1099,1223, 198,3040,2722, # 3472
- 370, 410,1905,2589, 998,1248,3182,2380, 519,1449,4122,1710, 947, 928,1153,4341, # 3488
-2277, 344,2624,1511, 615, 105, 161,1212,1076,1960,3130,2054,1926,1175,1906,2473, # 3504
- 414,1873,2801,6164,2309, 315,1319,3325, 318,2018,2146,2157, 963, 631, 223,4342, # 3520
-4343,2675, 479,3711,1197,2625,3712,2676,2361,6165,4344,4123,6166,2451,3183,1886, # 3536
-2184,1674,1330,1711,1635,1506, 799, 219,3250,3083,3954,1677,3713,3326,2081,3614, # 3552
-1652,2073,4657,1147,3041,1752, 643,1961, 147,1974,3955,6167,1716,2037, 918,3007, # 3568
-1994, 120,1537, 118, 609,3184,4345, 740,3455,1219, 332,1615,3830,6168,1621,2980, # 3584
-1582, 783, 212, 553,2350,3714,1349,2433,2082,4124, 889,6169,2310,1275,1410, 973, # 3600
- 166,1320,3456,1797,1215,3185,2885,1846,2590,2763,4658, 629, 822,3008, 763, 940, # 3616
-1990,2862, 439,2409,1566,1240,1622, 926,1282,1907,2764, 654,2210,1607, 327,1130, # 3632
-3956,1678,1623,6170,2434,2192, 686, 608,3831,3715, 903,3957,3042,6171,2741,1522, # 3648
-1915,1105,1555,2552,1359, 323,3251,4346,3457, 738,1354,2553,2311,2334,1828,2003, # 3664
-3832,1753,2351,1227,6172,1887,4125,1478,6173,2410,1874,1712,1847, 520,1204,2607, # 3680
- 264,4659, 836,2677,2102, 600,4660,3833,2278,3084,6174,4347,3615,1342, 640, 532, # 3696
- 543,2608,1888,2400,2591,1009,4348,1497, 341,1737,3616,2723,1394, 529,3252,1321, # 3712
- 983,4661,1515,2120, 971,2592, 924, 287,1662,3186,4349,2700,4350,1519, 908,1948, # 3728
-2452, 156, 796,1629,1486,2223,2055, 694,4126,1259,1036,3392,1213,2249,2742,1889, # 3744
-1230,3958,1015, 910, 408, 559,3617,4662, 746, 725, 935,4663,3959,3009,1289, 563, # 3760
- 867,4664,3960,1567,2981,2038,2626, 988,2263,2381,4351, 143,2374, 704,1895,6175, # 3776
-1188,3716,2088, 673,3085,2362,4352, 484,1608,1921,2765,2918, 215, 904,3618,3537, # 3792
- 894, 509, 976,3043,2701,3961,4353,2837,2982, 498,6176,6177,1102,3538,1332,3393, # 3808
-1487,1636,1637, 233, 245,3962, 383, 650, 995,3044, 460,1520,1206,2352, 749,3327, # 3824
- 530, 700, 389,1438,1560,1773,3963,2264, 719,2951,2724,3834, 870,1832,1644,1000, # 3840
- 839,2474,3717, 197,1630,3394, 365,2886,3964,1285,2133, 734, 922, 818,1106, 732, # 3856
- 480,2083,1774,3458, 923,2279,1350, 221,3086, 85,2233,2234,3835,1585,3010,2147, # 3872
-1387,1705,2382,1619,2475, 133, 239,2802,1991,1016,2084,2383, 411,2838,1113, 651, # 3888
-1985,1160,3328, 990,1863,3087,1048,1276,2647, 265,2627,1599,3253,2056, 150, 638, # 3904
-2019, 656, 853, 326,1479, 680,1439,4354,1001,1759, 413,3459,3395,2492,1431, 459, # 3920
-4355,1125,3329,2265,1953,1450,2065,2863, 849, 351,2678,3131,3254,3255,1104,1577, # 3936
- 227,1351,1645,2453,2193,1421,2887, 812,2121, 634, 95,2435, 201,2312,4665,1646, # 3952
-1671,2743,1601,2554,2702,2648,2280,1315,1366,2089,3132,1573,3718,3965,1729,1189, # 3968
- 328,2679,1077,1940,1136, 558,1283, 964,1195, 621,2074,1199,1743,3460,3619,1896, # 3984
-1916,1890,3836,2952,1154,2112,1064, 862, 378,3011,2066,2113,2803,1568,2839,6178, # 4000
-3088,2919,1941,1660,2004,1992,2194, 142, 707,1590,1708,1624,1922,1023,1836,1233, # 4016
-1004,2313, 789, 741,3620,6179,1609,2411,1200,4127,3719,3720,4666,2057,3721, 593, # 4032
-2840, 367,2920,1878,6180,3461,1521, 628,1168, 692,2211,2649, 300, 720,2067,2571, # 4048
-2953,3396, 959,2504,3966,3539,3462,1977, 701,6181, 954,1043, 800, 681, 183,3722, # 4064
-1803,1730,3540,4128,2103, 815,2314, 174, 467, 230,2454,1093,2134, 755,3541,3397, # 4080
-1141,1162,6182,1738,2039, 270,3256,2513,1005,1647,2185,3837, 858,1679,1897,1719, # 4096
-2954,2324,1806, 402, 670, 167,4129,1498,2158,2104, 750,6183, 915, 189,1680,1551, # 4112
- 455,4356,1501,2455, 405,1095,2955, 338,1586,1266,1819, 570, 641,1324, 237,1556, # 4128
-2650,1388,3723,6184,1368,2384,1343,1978,3089,2436, 879,3724, 792,1191, 758,3012, # 4144
-1411,2135,1322,4357, 240,4667,1848,3725,1574,6185, 420,3045,1546,1391, 714,4358, # 4160
-1967, 941,1864, 863, 664, 426, 560,1731,2680,1785,2864,1949,2363, 403,3330,1415, # 4176
-1279,2136,1697,2335, 204, 721,2097,3838, 90,6186,2085,2505, 191,3967, 124,2148, # 4192
-1376,1798,1178,1107,1898,1405, 860,4359,1243,1272,2375,2983,1558,2456,1638, 113, # 4208
-3621, 578,1923,2609, 880, 386,4130, 784,2186,2266,1422,2956,2172,1722, 497, 263, # 4224
-2514,1267,2412,2610, 177,2703,3542, 774,1927,1344, 616,1432,1595,1018, 172,4360, # 4240
-2325, 911,4361, 438,1468,3622, 794,3968,2024,2173,1681,1829,2957, 945, 895,3090, # 4256
- 575,2212,2476, 475,2401,2681, 785,2744,1745,2293,2555,1975,3133,2865, 394,4668, # 4272
-3839, 635,4131, 639, 202,1507,2195,2766,1345,1435,2572,3726,1908,1184,1181,2457, # 4288
-3727,3134,4362, 843,2611, 437, 916,4669, 234, 769,1884,3046,3047,3623, 833,6187, # 4304
-1639,2250,2402,1355,1185,2010,2047, 999, 525,1732,1290,1488,2612, 948,1578,3728, # 4320
-2413,2477,1216,2725,2159, 334,3840,1328,3624,2921,1525,4132, 564,1056, 891,4363, # 4336
-1444,1698,2385,2251,3729,1365,2281,2235,1717,6188, 864,3841,2515, 444, 527,2767, # 4352
-2922,3625, 544, 461,6189, 566, 209,2437,3398,2098,1065,2068,3331,3626,3257,2137, # 4368 #last 512
-#Everything below is of no interest for detection purpose
-2138,2122,3730,2888,1995,1820,1044,6190,6191,6192,6193,6194,6195,6196,6197,6198, # 4384
-6199,6200,6201,6202,6203,6204,6205,4670,6206,6207,6208,6209,6210,6211,6212,6213, # 4400
-6214,6215,6216,6217,6218,6219,6220,6221,6222,6223,6224,6225,6226,6227,6228,6229, # 4416
-6230,6231,6232,6233,6234,6235,6236,6237,3187,6238,6239,3969,6240,6241,6242,6243, # 4432
-6244,4671,6245,6246,4672,6247,6248,4133,6249,6250,4364,6251,2923,2556,2613,4673, # 4448
-4365,3970,6252,6253,6254,6255,4674,6256,6257,6258,2768,2353,4366,4675,4676,3188, # 4464
-4367,3463,6259,4134,4677,4678,6260,2267,6261,3842,3332,4368,3543,6262,6263,6264, # 4480
-3013,1954,1928,4135,4679,6265,6266,2478,3091,6267,4680,4369,6268,6269,1699,6270, # 4496
-3544,4136,4681,6271,4137,6272,4370,2804,6273,6274,2593,3971,3972,4682,6275,2236, # 4512
-4683,6276,6277,4684,6278,6279,4138,3973,4685,6280,6281,3258,6282,6283,6284,6285, # 4528
-3974,4686,2841,3975,6286,6287,3545,6288,6289,4139,4687,4140,6290,4141,6291,4142, # 4544
-6292,6293,3333,6294,6295,6296,4371,6297,3399,6298,6299,4372,3976,6300,6301,6302, # 4560
-4373,6303,6304,3843,3731,6305,4688,4374,6306,6307,3259,2294,6308,3732,2530,4143, # 4576
-6309,4689,6310,6311,6312,3048,6313,6314,4690,3733,2237,6315,6316,2282,3334,6317, # 4592
-6318,3844,6319,6320,4691,6321,3400,4692,6322,4693,6323,3049,6324,4375,6325,3977, # 4608
-6326,6327,6328,3546,6329,4694,3335,6330,4695,4696,6331,6332,6333,6334,4376,3978, # 4624
-6335,4697,3979,4144,6336,3980,4698,6337,6338,6339,6340,6341,4699,4700,4701,6342, # 4640
-6343,4702,6344,6345,4703,6346,6347,4704,6348,4705,4706,3135,6349,4707,6350,4708, # 4656
-6351,4377,6352,4709,3734,4145,6353,2506,4710,3189,6354,3050,4711,3981,6355,3547, # 4672
-3014,4146,4378,3735,2651,3845,3260,3136,2224,1986,6356,3401,6357,4712,2594,3627, # 4688
-3137,2573,3736,3982,4713,3628,4714,4715,2682,3629,4716,6358,3630,4379,3631,6359, # 4704
-6360,6361,3983,6362,6363,6364,6365,4147,3846,4717,6366,6367,3737,2842,6368,4718, # 4720
-2628,6369,3261,6370,2386,6371,6372,3738,3984,4719,3464,4720,3402,6373,2924,3336, # 4736
-4148,2866,6374,2805,3262,4380,2704,2069,2531,3138,2806,2984,6375,2769,6376,4721, # 4752
-4722,3403,6377,6378,3548,6379,6380,2705,3092,1979,4149,2629,3337,2889,6381,3338, # 4768
-4150,2557,3339,4381,6382,3190,3263,3739,6383,4151,4723,4152,2558,2574,3404,3191, # 4784
-6384,6385,4153,6386,4724,4382,6387,6388,4383,6389,6390,4154,6391,4725,3985,6392, # 4800
-3847,4155,6393,6394,6395,6396,6397,3465,6398,4384,6399,6400,6401,6402,6403,6404, # 4816
-4156,6405,6406,6407,6408,2123,6409,6410,2326,3192,4726,6411,6412,6413,6414,4385, # 4832
-4157,6415,6416,4158,6417,3093,3848,6418,3986,6419,6420,3849,6421,6422,6423,4159, # 4848
-6424,6425,4160,6426,3740,6427,6428,6429,6430,3987,6431,4727,6432,2238,6433,6434, # 4864
-4386,3988,6435,6436,3632,6437,6438,2843,6439,6440,6441,6442,3633,6443,2958,6444, # 4880
-6445,3466,6446,2364,4387,3850,6447,4388,2959,3340,6448,3851,6449,4728,6450,6451, # 4896
-3264,4729,6452,3193,6453,4389,4390,2706,3341,4730,6454,3139,6455,3194,6456,3051, # 4912
-2124,3852,1602,4391,4161,3853,1158,3854,4162,3989,4392,3990,4731,4732,4393,2040, # 4928
-4163,4394,3265,6457,2807,3467,3855,6458,6459,6460,3991,3468,4733,4734,6461,3140, # 4944
-2960,6462,4735,6463,6464,6465,6466,4736,4737,4738,4739,6467,6468,4164,2403,3856, # 4960
-6469,6470,2770,2844,6471,4740,6472,6473,6474,6475,6476,6477,6478,3195,6479,4741, # 4976
-4395,6480,2867,6481,4742,2808,6482,2493,4165,6483,6484,6485,6486,2295,4743,6487, # 4992
-6488,6489,3634,6490,6491,6492,6493,6494,6495,6496,2985,4744,6497,6498,4745,6499, # 5008
-6500,2925,3141,4166,6501,6502,4746,6503,6504,4747,6505,6506,6507,2890,6508,6509, # 5024
-6510,6511,6512,6513,6514,6515,6516,6517,6518,6519,3469,4167,6520,6521,6522,4748, # 5040
-4396,3741,4397,4749,4398,3342,2125,4750,6523,4751,4752,4753,3052,6524,2961,4168, # 5056
-6525,4754,6526,4755,4399,2926,4169,6527,3857,6528,4400,4170,6529,4171,6530,6531, # 5072
-2595,6532,6533,6534,6535,3635,6536,6537,6538,6539,6540,6541,6542,4756,6543,6544, # 5088
-6545,6546,6547,6548,4401,6549,6550,6551,6552,4402,3405,4757,4403,6553,6554,6555, # 5104
-4172,3742,6556,6557,6558,3992,3636,6559,6560,3053,2726,6561,3549,4173,3054,4404, # 5120
-6562,6563,3993,4405,3266,3550,2809,4406,6564,6565,6566,4758,4759,6567,3743,6568, # 5136
-4760,3744,4761,3470,6569,6570,6571,4407,6572,3745,4174,6573,4175,2810,4176,3196, # 5152
-4762,6574,4177,6575,6576,2494,2891,3551,6577,6578,3471,6579,4408,6580,3015,3197, # 5168
-6581,3343,2532,3994,3858,6582,3094,3406,4409,6583,2892,4178,4763,4410,3016,4411, # 5184
-6584,3995,3142,3017,2683,6585,4179,6586,6587,4764,4412,6588,6589,4413,6590,2986, # 5200
-6591,2962,3552,6592,2963,3472,6593,6594,4180,4765,6595,6596,2225,3267,4414,6597, # 5216
-3407,3637,4766,6598,6599,3198,6600,4415,6601,3859,3199,6602,3473,4767,2811,4416, # 5232
-1856,3268,3200,2575,3996,3997,3201,4417,6603,3095,2927,6604,3143,6605,2268,6606, # 5248
-3998,3860,3096,2771,6607,6608,3638,2495,4768,6609,3861,6610,3269,2745,4769,4181, # 5264
-3553,6611,2845,3270,6612,6613,6614,3862,6615,6616,4770,4771,6617,3474,3999,4418, # 5280
-4419,6618,3639,3344,6619,4772,4182,6620,2126,6621,6622,6623,4420,4773,6624,3018, # 5296
-6625,4774,3554,6626,4183,2025,3746,6627,4184,2707,6628,4421,4422,3097,1775,4185, # 5312
-3555,6629,6630,2868,6631,6632,4423,6633,6634,4424,2414,2533,2928,6635,4186,2387, # 5328
-6636,4775,6637,4187,6638,1891,4425,3202,3203,6639,6640,4776,6641,3345,6642,6643, # 5344
-3640,6644,3475,3346,3641,4000,6645,3144,6646,3098,2812,4188,3642,3204,6647,3863, # 5360
-3476,6648,3864,6649,4426,4001,6650,6651,6652,2576,6653,4189,4777,6654,6655,6656, # 5376
-2846,6657,3477,3205,4002,6658,4003,6659,3347,2252,6660,6661,6662,4778,6663,6664, # 5392
-6665,6666,6667,6668,6669,4779,4780,2048,6670,3478,3099,6671,3556,3747,4004,6672, # 5408
-6673,6674,3145,4005,3748,6675,6676,6677,6678,6679,3408,6680,6681,6682,6683,3206, # 5424
-3207,6684,6685,4781,4427,6686,4782,4783,4784,6687,6688,6689,4190,6690,6691,3479, # 5440
-6692,2746,6693,4428,6694,6695,6696,6697,6698,6699,4785,6700,6701,3208,2727,6702, # 5456
-3146,6703,6704,3409,2196,6705,4429,6706,6707,6708,2534,1996,6709,6710,6711,2747, # 5472
-6712,6713,6714,4786,3643,6715,4430,4431,6716,3557,6717,4432,4433,6718,6719,6720, # 5488
-6721,3749,6722,4006,4787,6723,6724,3644,4788,4434,6725,6726,4789,2772,6727,6728, # 5504
-6729,6730,6731,2708,3865,2813,4435,6732,6733,4790,4791,3480,6734,6735,6736,6737, # 5520
-4436,3348,6738,3410,4007,6739,6740,4008,6741,6742,4792,3411,4191,6743,6744,6745, # 5536
-6746,6747,3866,6748,3750,6749,6750,6751,6752,6753,6754,6755,3867,6756,4009,6757, # 5552
-4793,4794,6758,2814,2987,6759,6760,6761,4437,6762,6763,6764,6765,3645,6766,6767, # 5568
-3481,4192,6768,3751,6769,6770,2174,6771,3868,3752,6772,6773,6774,4193,4795,4438, # 5584
-3558,4796,4439,6775,4797,6776,6777,4798,6778,4799,3559,4800,6779,6780,6781,3482, # 5600
-6782,2893,6783,6784,4194,4801,4010,6785,6786,4440,6787,4011,6788,6789,6790,6791, # 5616
-6792,6793,4802,6794,6795,6796,4012,6797,6798,6799,6800,3349,4803,3483,6801,4804, # 5632
-4195,6802,4013,6803,6804,4196,6805,4014,4015,6806,2847,3271,2848,6807,3484,6808, # 5648
-6809,6810,4441,6811,4442,4197,4443,3272,4805,6812,3412,4016,1579,6813,6814,4017, # 5664
-6815,3869,6816,2964,6817,4806,6818,6819,4018,3646,6820,6821,4807,4019,4020,6822, # 5680
-6823,3560,6824,6825,4021,4444,6826,4198,6827,6828,4445,6829,6830,4199,4808,6831, # 5696
-6832,6833,3870,3019,2458,6834,3753,3413,3350,6835,4809,3871,4810,3561,4446,6836, # 5712
-6837,4447,4811,4812,6838,2459,4448,6839,4449,6840,6841,4022,3872,6842,4813,4814, # 5728
-6843,6844,4815,4200,4201,4202,6845,4023,6846,6847,4450,3562,3873,6848,6849,4816, # 5744
-4817,6850,4451,4818,2139,6851,3563,6852,6853,3351,6854,6855,3352,4024,2709,3414, # 5760
-4203,4452,6856,4204,6857,6858,3874,3875,6859,6860,4819,6861,6862,6863,6864,4453, # 5776
-3647,6865,6866,4820,6867,6868,6869,6870,4454,6871,2869,6872,6873,4821,6874,3754, # 5792
-6875,4822,4205,6876,6877,6878,3648,4206,4455,6879,4823,6880,4824,3876,6881,3055, # 5808
-4207,6882,3415,6883,6884,6885,4208,4209,6886,4210,3353,6887,3354,3564,3209,3485, # 5824
-2652,6888,2728,6889,3210,3755,6890,4025,4456,6891,4825,6892,6893,6894,6895,4211, # 5840
-6896,6897,6898,4826,6899,6900,4212,6901,4827,6902,2773,3565,6903,4828,6904,6905, # 5856
-6906,6907,3649,3650,6908,2849,3566,6909,3567,3100,6910,6911,6912,6913,6914,6915, # 5872
-4026,6916,3355,4829,3056,4457,3756,6917,3651,6918,4213,3652,2870,6919,4458,6920, # 5888
-2438,6921,6922,3757,2774,4830,6923,3356,4831,4832,6924,4833,4459,3653,2507,6925, # 5904
-4834,2535,6926,6927,3273,4027,3147,6928,3568,6929,6930,6931,4460,6932,3877,4461, # 5920
-2729,3654,6933,6934,6935,6936,2175,4835,2630,4214,4028,4462,4836,4215,6937,3148, # 5936
-4216,4463,4837,4838,4217,6938,6939,2850,4839,6940,4464,6941,6942,6943,4840,6944, # 5952
-4218,3274,4465,6945,6946,2710,6947,4841,4466,6948,6949,2894,6950,6951,4842,6952, # 5968
-4219,3057,2871,6953,6954,6955,6956,4467,6957,2711,6958,6959,6960,3275,3101,4843, # 5984
-6961,3357,3569,6962,4844,6963,6964,4468,4845,3570,6965,3102,4846,3758,6966,4847, # 6000
-3878,4848,4849,4029,6967,2929,3879,4850,4851,6968,6969,1733,6970,4220,6971,6972, # 6016
-6973,6974,6975,6976,4852,6977,6978,6979,6980,6981,6982,3759,6983,6984,6985,3486, # 6032
-3487,6986,3488,3416,6987,6988,6989,6990,6991,6992,6993,6994,6995,6996,6997,4853, # 6048
-6998,6999,4030,7000,7001,3211,7002,7003,4221,7004,7005,3571,4031,7006,3572,7007, # 6064
-2614,4854,2577,7008,7009,2965,3655,3656,4855,2775,3489,3880,4222,4856,3881,4032, # 6080
-3882,3657,2730,3490,4857,7010,3149,7011,4469,4858,2496,3491,4859,2283,7012,7013, # 6096
-7014,2365,4860,4470,7015,7016,3760,7017,7018,4223,1917,7019,7020,7021,4471,7022, # 6112
-2776,4472,7023,7024,7025,7026,4033,7027,3573,4224,4861,4034,4862,7028,7029,1929, # 6128
-3883,4035,7030,4473,3058,7031,2536,3761,3884,7032,4036,7033,2966,2895,1968,4474, # 6144
-3276,4225,3417,3492,4226,2105,7034,7035,1754,2596,3762,4227,4863,4475,3763,4864, # 6160
-3764,2615,2777,3103,3765,3658,3418,4865,2296,3766,2815,7036,7037,7038,3574,2872, # 6176
-3277,4476,7039,4037,4477,7040,7041,4038,7042,7043,7044,7045,7046,7047,2537,7048, # 6192
-7049,7050,7051,7052,7053,7054,4478,7055,7056,3767,3659,4228,3575,7057,7058,4229, # 6208
-7059,7060,7061,3660,7062,3212,7063,3885,4039,2460,7064,7065,7066,7067,7068,7069, # 6224
-7070,7071,7072,7073,7074,4866,3768,4867,7075,7076,7077,7078,4868,3358,3278,2653, # 6240
-7079,7080,4479,3886,7081,7082,4869,7083,7084,7085,7086,7087,7088,2538,7089,7090, # 6256
-7091,4040,3150,3769,4870,4041,2896,3359,4230,2930,7092,3279,7093,2967,4480,3213, # 6272
-4481,3661,7094,7095,7096,7097,7098,7099,7100,7101,7102,2461,3770,7103,7104,4231, # 6288
-3151,7105,7106,7107,4042,3662,7108,7109,4871,3663,4872,4043,3059,7110,7111,7112, # 6304
-3493,2988,7113,4873,7114,7115,7116,3771,4874,7117,7118,4232,4875,7119,3576,2336, # 6320
-4876,7120,4233,3419,4044,4877,4878,4482,4483,4879,4484,4234,7121,3772,4880,1045, # 6336
-3280,3664,4881,4882,7122,7123,7124,7125,4883,7126,2778,7127,4485,4486,7128,4884, # 6352
-3214,3887,7129,7130,3215,7131,4885,4045,7132,7133,4046,7134,7135,7136,7137,7138, # 6368
-7139,7140,7141,7142,7143,4235,7144,4886,7145,7146,7147,4887,7148,7149,7150,4487, # 6384
-4047,4488,7151,7152,4888,4048,2989,3888,7153,3665,7154,4049,7155,7156,7157,7158, # 6400
-7159,7160,2931,4889,4890,4489,7161,2631,3889,4236,2779,7162,7163,4891,7164,3060, # 6416
-7165,1672,4892,7166,4893,4237,3281,4894,7167,7168,3666,7169,3494,7170,7171,4050, # 6432
-7172,7173,3104,3360,3420,4490,4051,2684,4052,7174,4053,7175,7176,7177,2253,4054, # 6448
-7178,7179,4895,7180,3152,3890,3153,4491,3216,7181,7182,7183,2968,4238,4492,4055, # 6464
-7184,2990,7185,2479,7186,7187,4493,7188,7189,7190,7191,7192,4896,7193,4897,2969, # 6480
-4494,4898,7194,3495,7195,7196,4899,4495,7197,3105,2731,7198,4900,7199,7200,7201, # 6496
-4056,7202,3361,7203,7204,4496,4901,4902,7205,4497,7206,7207,2315,4903,7208,4904, # 6512
-7209,4905,2851,7210,7211,3577,7212,3578,4906,7213,4057,3667,4907,7214,4058,2354, # 6528
-3891,2376,3217,3773,7215,7216,7217,7218,7219,4498,7220,4908,3282,2685,7221,3496, # 6544
-4909,2632,3154,4910,7222,2337,7223,4911,7224,7225,7226,4912,4913,3283,4239,4499, # 6560
-7227,2816,7228,7229,7230,7231,7232,7233,7234,4914,4500,4501,7235,7236,7237,2686, # 6576
-7238,4915,7239,2897,4502,7240,4503,7241,2516,7242,4504,3362,3218,7243,7244,7245, # 6592
-4916,7246,7247,4505,3363,7248,7249,7250,7251,3774,4506,7252,7253,4917,7254,7255, # 6608
-3284,2991,4918,4919,3219,3892,4920,3106,3497,4921,7256,7257,7258,4922,7259,4923, # 6624
-3364,4507,4508,4059,7260,4240,3498,7261,7262,4924,7263,2992,3893,4060,3220,7264, # 6640
-7265,7266,7267,7268,7269,4509,3775,7270,2817,7271,4061,4925,4510,3776,7272,4241, # 6656
-4511,3285,7273,7274,3499,7275,7276,7277,4062,4512,4926,7278,3107,3894,7279,7280, # 6672
-4927,7281,4513,7282,7283,3668,7284,7285,4242,4514,4243,7286,2058,4515,4928,4929, # 6688
-4516,7287,3286,4244,7288,4517,7289,7290,7291,3669,7292,7293,4930,4931,4932,2355, # 6704
-4933,7294,2633,4518,7295,4245,7296,7297,4519,7298,7299,4520,4521,4934,7300,4246, # 6720
-4522,7301,7302,7303,3579,7304,4247,4935,7305,4936,7306,7307,7308,7309,3777,7310, # 6736
-4523,7311,7312,7313,4248,3580,7314,4524,3778,4249,7315,3581,7316,3287,7317,3221, # 6752
-7318,4937,7319,7320,7321,7322,7323,7324,4938,4939,7325,4525,7326,7327,7328,4063, # 6768
-7329,7330,4940,7331,7332,4941,7333,4526,7334,3500,2780,1741,4942,2026,1742,7335, # 6784
-7336,3582,4527,2388,7337,7338,7339,4528,7340,4250,4943,7341,7342,7343,4944,7344, # 6800
-7345,7346,3020,7347,4945,7348,7349,7350,7351,3895,7352,3896,4064,3897,7353,7354, # 6816
-7355,4251,7356,7357,3898,7358,3779,7359,3780,3288,7360,7361,4529,7362,4946,4530, # 6832
-2027,7363,3899,4531,4947,3222,3583,7364,4948,7365,7366,7367,7368,4949,3501,4950, # 6848
-3781,4951,4532,7369,2517,4952,4252,4953,3155,7370,4954,4955,4253,2518,4533,7371, # 6864
-7372,2712,4254,7373,7374,7375,3670,4956,3671,7376,2389,3502,4065,7377,2338,7378, # 6880
-7379,7380,7381,3061,7382,4957,7383,7384,7385,7386,4958,4534,7387,7388,2993,7389, # 6896
-3062,7390,4959,7391,7392,7393,4960,3108,4961,7394,4535,7395,4962,3421,4536,7396, # 6912
-4963,7397,4964,1857,7398,4965,7399,7400,2176,3584,4966,7401,7402,3422,4537,3900, # 6928
-3585,7403,3782,7404,2852,7405,7406,7407,4538,3783,2654,3423,4967,4539,7408,3784, # 6944
-3586,2853,4540,4541,7409,3901,7410,3902,7411,7412,3785,3109,2327,3903,7413,7414, # 6960
-2970,4066,2932,7415,7416,7417,3904,3672,3424,7418,4542,4543,4544,7419,4968,7420, # 6976
-7421,4255,7422,7423,7424,7425,7426,4067,7427,3673,3365,4545,7428,3110,2559,3674, # 6992
-7429,7430,3156,7431,7432,3503,7433,3425,4546,7434,3063,2873,7435,3223,4969,4547, # 7008
-4548,2898,4256,4068,7436,4069,3587,3786,2933,3787,4257,4970,4971,3788,7437,4972, # 7024
-3064,7438,4549,7439,7440,7441,7442,7443,4973,3905,7444,2874,7445,7446,7447,7448, # 7040
-3021,7449,4550,3906,3588,4974,7450,7451,3789,3675,7452,2578,7453,4070,7454,7455, # 7056
-7456,4258,3676,7457,4975,7458,4976,4259,3790,3504,2634,4977,3677,4551,4260,7459, # 7072
-7460,7461,7462,3907,4261,4978,7463,7464,7465,7466,4979,4980,7467,7468,2213,4262, # 7088
-7469,7470,7471,3678,4981,7472,2439,7473,4263,3224,3289,7474,3908,2415,4982,7475, # 7104
-4264,7476,4983,2655,7477,7478,2732,4552,2854,2875,7479,7480,4265,7481,4553,4984, # 7120
-7482,7483,4266,7484,3679,3366,3680,2818,2781,2782,3367,3589,4554,3065,7485,4071, # 7136
-2899,7486,7487,3157,2462,4072,4555,4073,4985,4986,3111,4267,2687,3368,4556,4074, # 7152
-3791,4268,7488,3909,2783,7489,2656,1962,3158,4557,4987,1963,3159,3160,7490,3112, # 7168
-4988,4989,3022,4990,4991,3792,2855,7491,7492,2971,4558,7493,7494,4992,7495,7496, # 7184
-7497,7498,4993,7499,3426,4559,4994,7500,3681,4560,4269,4270,3910,7501,4075,4995, # 7200
-4271,7502,7503,4076,7504,4996,7505,3225,4997,4272,4077,2819,3023,7506,7507,2733, # 7216
-4561,7508,4562,7509,3369,3793,7510,3590,2508,7511,7512,4273,3113,2994,2616,7513, # 7232
-7514,7515,7516,7517,7518,2820,3911,4078,2748,7519,7520,4563,4998,7521,7522,7523, # 7248
-7524,4999,4274,7525,4564,3682,2239,4079,4565,7526,7527,7528,7529,5000,7530,7531, # 7264
-5001,4275,3794,7532,7533,7534,3066,5002,4566,3161,7535,7536,4080,7537,3162,7538, # 7280
-7539,4567,7540,7541,7542,7543,7544,7545,5003,7546,4568,7547,7548,7549,7550,7551, # 7296
-7552,7553,7554,7555,7556,5004,7557,7558,7559,5005,7560,3795,7561,4569,7562,7563, # 7312
-7564,2821,3796,4276,4277,4081,7565,2876,7566,5006,7567,7568,2900,7569,3797,3912, # 7328
-7570,7571,7572,4278,7573,7574,7575,5007,7576,7577,5008,7578,7579,4279,2934,7580, # 7344
-7581,5009,7582,4570,7583,4280,7584,7585,7586,4571,4572,3913,7587,4573,3505,7588, # 7360
-5010,7589,7590,7591,7592,3798,4574,7593,7594,5011,7595,4281,7596,7597,7598,4282, # 7376
-5012,7599,7600,5013,3163,7601,5014,7602,3914,7603,7604,2734,4575,4576,4577,7605, # 7392
-7606,7607,7608,7609,3506,5015,4578,7610,4082,7611,2822,2901,2579,3683,3024,4579, # 7408
-3507,7612,4580,7613,3226,3799,5016,7614,7615,7616,7617,7618,7619,7620,2995,3290, # 7424
-7621,4083,7622,5017,7623,7624,7625,7626,7627,4581,3915,7628,3291,7629,5018,7630, # 7440
-7631,7632,7633,4084,7634,7635,3427,3800,7636,7637,4582,7638,5019,4583,5020,7639, # 7456
-3916,7640,3801,5021,4584,4283,7641,7642,3428,3591,2269,7643,2617,7644,4585,3592, # 7472
-7645,4586,2902,7646,7647,3227,5022,7648,4587,7649,4284,7650,7651,7652,4588,2284, # 7488
-7653,5023,7654,7655,7656,4589,5024,3802,7657,7658,5025,3508,4590,7659,7660,7661, # 7504
-1969,5026,7662,7663,3684,1821,2688,7664,2028,2509,4285,7665,2823,1841,7666,2689, # 7520
-3114,7667,3917,4085,2160,5027,5028,2972,7668,5029,7669,7670,7671,3593,4086,7672, # 7536
-4591,4087,5030,3803,7673,7674,7675,7676,7677,7678,7679,4286,2366,4592,4593,3067, # 7552
-2328,7680,7681,4594,3594,3918,2029,4287,7682,5031,3919,3370,4288,4595,2856,7683, # 7568
-3509,7684,7685,5032,5033,7686,7687,3804,2784,7688,7689,7690,7691,3371,7692,7693, # 7584
-2877,5034,7694,7695,3920,4289,4088,7696,7697,7698,5035,7699,5036,4290,5037,5038, # 7600
-5039,7700,7701,7702,5040,5041,3228,7703,1760,7704,5042,3229,4596,2106,4089,7705, # 7616
-4597,2824,5043,2107,3372,7706,4291,4090,5044,7707,4091,7708,5045,3025,3805,4598, # 7632
-4292,4293,4294,3373,7709,4599,7710,5046,7711,7712,5047,5048,3806,7713,7714,7715, # 7648
-5049,7716,7717,7718,7719,4600,5050,7720,7721,7722,5051,7723,4295,3429,7724,7725, # 7664
-7726,7727,3921,7728,3292,5052,4092,7729,7730,7731,7732,7733,7734,7735,5053,5054, # 7680
-7736,7737,7738,7739,3922,3685,7740,7741,7742,7743,2635,5055,7744,5056,4601,7745, # 7696
-7746,2560,7747,7748,7749,7750,3923,7751,7752,7753,7754,7755,4296,2903,7756,7757, # 7712
-7758,7759,7760,3924,7761,5057,4297,7762,7763,5058,4298,7764,4093,7765,7766,5059, # 7728
-3925,7767,7768,7769,7770,7771,7772,7773,7774,7775,7776,3595,7777,4299,5060,4094, # 7744
-7778,3293,5061,7779,7780,4300,7781,7782,4602,7783,3596,7784,7785,3430,2367,7786, # 7760
-3164,5062,5063,4301,7787,7788,4095,5064,5065,7789,3374,3115,7790,7791,7792,7793, # 7776
-7794,7795,7796,3597,4603,7797,7798,3686,3116,3807,5066,7799,7800,5067,7801,7802, # 7792
-4604,4302,5068,4303,4096,7803,7804,3294,7805,7806,5069,4605,2690,7807,3026,7808, # 7808
-7809,7810,7811,7812,7813,7814,7815,7816,7817,7818,7819,7820,7821,7822,7823,7824, # 7824
-7825,7826,7827,7828,7829,7830,7831,7832,7833,7834,7835,7836,7837,7838,7839,7840, # 7840
-7841,7842,7843,7844,7845,7846,7847,7848,7849,7850,7851,7852,7853,7854,7855,7856, # 7856
-7857,7858,7859,7860,7861,7862,7863,7864,7865,7866,7867,7868,7869,7870,7871,7872, # 7872
-7873,7874,7875,7876,7877,7878,7879,7880,7881,7882,7883,7884,7885,7886,7887,7888, # 7888
-7889,7890,7891,7892,7893,7894,7895,7896,7897,7898,7899,7900,7901,7902,7903,7904, # 7904
-7905,7906,7907,7908,7909,7910,7911,7912,7913,7914,7915,7916,7917,7918,7919,7920, # 7920
-7921,7922,7923,7924,3926,7925,7926,7927,7928,7929,7930,7931,7932,7933,7934,7935, # 7936
-7936,7937,7938,7939,7940,7941,7942,7943,7944,7945,7946,7947,7948,7949,7950,7951, # 7952
-7952,7953,7954,7955,7956,7957,7958,7959,7960,7961,7962,7963,7964,7965,7966,7967, # 7968
-7968,7969,7970,7971,7972,7973,7974,7975,7976,7977,7978,7979,7980,7981,7982,7983, # 7984
-7984,7985,7986,7987,7988,7989,7990,7991,7992,7993,7994,7995,7996,7997,7998,7999, # 8000
-8000,8001,8002,8003,8004,8005,8006,8007,8008,8009,8010,8011,8012,8013,8014,8015, # 8016
-8016,8017,8018,8019,8020,8021,8022,8023,8024,8025,8026,8027,8028,8029,8030,8031, # 8032
-8032,8033,8034,8035,8036,8037,8038,8039,8040,8041,8042,8043,8044,8045,8046,8047, # 8048
-8048,8049,8050,8051,8052,8053,8054,8055,8056,8057,8058,8059,8060,8061,8062,8063, # 8064
-8064,8065,8066,8067,8068,8069,8070,8071,8072,8073,8074,8075,8076,8077,8078,8079, # 8080
-8080,8081,8082,8083,8084,8085,8086,8087,8088,8089,8090,8091,8092,8093,8094,8095, # 8096
-8096,8097,8098,8099,8100,8101,8102,8103,8104,8105,8106,8107,8108,8109,8110,8111, # 8112
-8112,8113,8114,8115,8116,8117,8118,8119,8120,8121,8122,8123,8124,8125,8126,8127, # 8128
-8128,8129,8130,8131,8132,8133,8134,8135,8136,8137,8138,8139,8140,8141,8142,8143, # 8144
-8144,8145,8146,8147,8148,8149,8150,8151,8152,8153,8154,8155,8156,8157,8158,8159, # 8160
-8160,8161,8162,8163,8164,8165,8166,8167,8168,8169,8170,8171,8172,8173,8174,8175, # 8176
-8176,8177,8178,8179,8180,8181,8182,8183,8184,8185,8186,8187,8188,8189,8190,8191, # 8192
-8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8203,8204,8205,8206,8207, # 8208
-8208,8209,8210,8211,8212,8213,8214,8215,8216,8217,8218,8219,8220,8221,8222,8223, # 8224
-8224,8225,8226,8227,8228,8229,8230,8231,8232,8233,8234,8235,8236,8237,8238,8239, # 8240
-8240,8241,8242,8243,8244,8245,8246,8247,8248,8249,8250,8251,8252,8253,8254,8255, # 8256
-8256,8257,8258,8259,8260,8261,8262,8263,8264,8265,8266,8267,8268,8269,8270,8271) # 8272
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/jpcntx.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/jpcntx.py
deleted file mode 100644
index 93db4a9..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/jpcntx.py
+++ /dev/null
@@ -1,210 +0,0 @@
-######################## BEGIN LICENSE BLOCK ########################
-# The Original Code is Mozilla Communicator client code.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 1998
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-# Mark Pilgrim - port to Python
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301 USA
-######################### END LICENSE BLOCK #########################
-
-import constants
-
-NUM_OF_CATEGORY = 6
-DONT_KNOW = -1
-ENOUGH_REL_THRESHOLD = 100
-MAX_REL_THRESHOLD = 1000
-MINIMUM_DATA_THRESHOLD = 4
-
-# This is hiragana 2-char sequence table, the number in each cell represents its frequency category
-jp2CharContext = ( \
-(0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1),
-(2,4,0,4,0,3,0,4,0,3,4,4,4,2,4,3,3,4,3,2,3,3,4,2,3,3,3,2,4,1,4,3,3,1,5,4,3,4,3,4,3,5,3,0,3,5,4,2,0,3,1,0,3,3,0,3,3,0,1,1,0,4,3,0,3,3,0,4,0,2,0,3,5,5,5,5,4,0,4,1,0,3,4),
-(0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2),
-(0,4,0,5,0,5,0,4,0,4,5,4,4,3,5,3,5,1,5,3,4,3,4,4,3,4,3,3,4,3,5,4,4,3,5,5,3,5,5,5,3,5,5,3,4,5,5,3,1,3,2,0,3,4,0,4,2,0,4,2,1,5,3,2,3,5,0,4,0,2,0,5,4,4,5,4,5,0,4,0,0,4,4),
-(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
-(0,3,0,4,0,3,0,3,0,4,5,4,3,3,3,3,4,3,5,4,4,3,5,4,4,3,4,3,4,4,4,4,5,3,4,4,3,4,5,5,4,5,5,1,4,5,4,3,0,3,3,1,3,3,0,4,4,0,3,3,1,5,3,3,3,5,0,4,0,3,0,4,4,3,4,3,3,0,4,1,1,3,4),
-(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
-(0,4,0,3,0,3,0,4,0,3,4,4,3,2,2,1,2,1,3,1,3,3,3,3,3,4,3,1,3,3,5,3,3,0,4,3,0,5,4,3,3,5,4,4,3,4,4,5,0,1,2,0,1,2,0,2,2,0,1,0,0,5,2,2,1,4,0,3,0,1,0,4,4,3,5,4,3,0,2,1,0,4,3),
-(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
-(0,3,0,5,0,4,0,2,1,4,4,2,4,1,4,2,4,2,4,3,3,3,4,3,3,3,3,1,4,2,3,3,3,1,4,4,1,1,1,4,3,3,2,0,2,4,3,2,0,3,3,0,3,1,1,0,0,0,3,3,0,4,2,2,3,4,0,4,0,3,0,4,4,5,3,4,4,0,3,0,0,1,4),
-(1,4,0,4,0,4,0,4,0,3,5,4,4,3,4,3,5,4,3,3,4,3,5,4,4,4,4,3,4,2,4,3,3,1,5,4,3,2,4,5,4,5,5,4,4,5,4,4,0,3,2,2,3,3,0,4,3,1,3,2,1,4,3,3,4,5,0,3,0,2,0,4,5,5,4,5,4,0,4,0,0,5,4),
-(0,5,0,5,0,4,0,3,0,4,4,3,4,3,3,3,4,0,4,4,4,3,4,3,4,3,3,1,4,2,4,3,4,0,5,4,1,4,5,4,4,5,3,2,4,3,4,3,2,4,1,3,3,3,2,3,2,0,4,3,3,4,3,3,3,4,0,4,0,3,0,4,5,4,4,4,3,0,4,1,0,1,3),
-(0,3,1,4,0,3,0,2,0,3,4,4,3,1,4,2,3,3,4,3,4,3,4,3,4,4,3,2,3,1,5,4,4,1,4,4,3,5,4,4,3,5,5,4,3,4,4,3,1,2,3,1,2,2,0,3,2,0,3,1,0,5,3,3,3,4,3,3,3,3,4,4,4,4,5,4,2,0,3,3,2,4,3),
-(0,2,0,3,0,1,0,1,0,0,3,2,0,0,2,0,1,0,2,1,3,3,3,1,2,3,1,0,1,0,4,2,1,1,3,3,0,4,3,3,1,4,3,3,0,3,3,2,0,0,0,0,1,0,0,2,0,0,0,0,0,4,1,0,2,3,2,2,2,1,3,3,3,4,4,3,2,0,3,1,0,3,3),
-(0,4,0,4,0,3,0,3,0,4,4,4,3,3,3,3,3,3,4,3,4,2,4,3,4,3,3,2,4,3,4,5,4,1,4,5,3,5,4,5,3,5,4,0,3,5,5,3,1,3,3,2,2,3,0,3,4,1,3,3,2,4,3,3,3,4,0,4,0,3,0,4,5,4,4,5,3,0,4,1,0,3,4),
-(0,2,0,3,0,3,0,0,0,2,2,2,1,0,1,0,0,0,3,0,3,0,3,0,1,3,1,0,3,1,3,3,3,1,3,3,3,0,1,3,1,3,4,0,0,3,1,1,0,3,2,0,0,0,0,1,3,0,1,0,0,3,3,2,0,3,0,0,0,0,0,3,4,3,4,3,3,0,3,0,0,2,3),
-(2,3,0,3,0,2,0,1,0,3,3,4,3,1,3,1,1,1,3,1,4,3,4,3,3,3,0,0,3,1,5,4,3,1,4,3,2,5,5,4,4,4,4,3,3,4,4,4,0,2,1,1,3,2,0,1,2,0,0,1,0,4,1,3,3,3,0,3,0,1,0,4,4,4,5,5,3,0,2,0,0,4,4),
-(0,2,0,1,0,3,1,3,0,2,3,3,3,0,3,1,0,0,3,0,3,2,3,1,3,2,1,1,0,0,4,2,1,0,2,3,1,4,3,2,0,4,4,3,1,3,1,3,0,1,0,0,1,0,0,0,1,0,0,0,0,4,1,1,1,2,0,3,0,0,0,3,4,2,4,3,2,0,1,0,0,3,3),
-(0,1,0,4,0,5,0,4,0,2,4,4,2,3,3,2,3,3,5,3,3,3,4,3,4,2,3,0,4,3,3,3,4,1,4,3,2,1,5,5,3,4,5,1,3,5,4,2,0,3,3,0,1,3,0,4,2,0,1,3,1,4,3,3,3,3,0,3,0,1,0,3,4,4,4,5,5,0,3,0,1,4,5),
-(0,2,0,3,0,3,0,0,0,2,3,1,3,0,4,0,1,1,3,0,3,4,3,2,3,1,0,3,3,2,3,1,3,0,2,3,0,2,1,4,1,2,2,0,0,3,3,0,0,2,0,0,0,1,0,0,0,0,2,2,0,3,2,1,3,3,0,2,0,2,0,0,3,3,1,2,4,0,3,0,2,2,3),
-(2,4,0,5,0,4,0,4,0,2,4,4,4,3,4,3,3,3,1,2,4,3,4,3,4,4,5,0,3,3,3,3,2,0,4,3,1,4,3,4,1,4,4,3,3,4,4,3,1,2,3,0,4,2,0,4,1,0,3,3,0,4,3,3,3,4,0,4,0,2,0,3,5,3,4,5,2,0,3,0,0,4,5),
-(0,3,0,4,0,1,0,1,0,1,3,2,2,1,3,0,3,0,2,0,2,0,3,0,2,0,0,0,1,0,1,1,0,0,3,1,0,0,0,4,0,3,1,0,2,1,3,0,0,0,0,0,0,3,0,0,0,0,0,0,0,4,2,2,3,1,0,3,0,0,0,1,4,4,4,3,0,0,4,0,0,1,4),
-(1,4,1,5,0,3,0,3,0,4,5,4,4,3,5,3,3,4,4,3,4,1,3,3,3,3,2,1,4,1,5,4,3,1,4,4,3,5,4,4,3,5,4,3,3,4,4,4,0,3,3,1,2,3,0,3,1,0,3,3,0,5,4,4,4,4,4,4,3,3,5,4,4,3,3,5,4,0,3,2,0,4,4),
-(0,2,0,3,0,1,0,0,0,1,3,3,3,2,4,1,3,0,3,1,3,0,2,2,1,1,0,0,2,0,4,3,1,0,4,3,0,4,4,4,1,4,3,1,1,3,3,1,0,2,0,0,1,3,0,0,0,0,2,0,0,4,3,2,4,3,5,4,3,3,3,4,3,3,4,3,3,0,2,1,0,3,3),
-(0,2,0,4,0,3,0,2,0,2,5,5,3,4,4,4,4,1,4,3,3,0,4,3,4,3,1,3,3,2,4,3,0,3,4,3,0,3,4,4,2,4,4,0,4,5,3,3,2,2,1,1,1,2,0,1,5,0,3,3,2,4,3,3,3,4,0,3,0,2,0,4,4,3,5,5,0,0,3,0,2,3,3),
-(0,3,0,4,0,3,0,1,0,3,4,3,3,1,3,3,3,0,3,1,3,0,4,3,3,1,1,0,3,0,3,3,0,0,4,4,0,1,5,4,3,3,5,0,3,3,4,3,0,2,0,1,1,1,0,1,3,0,1,2,1,3,3,2,3,3,0,3,0,1,0,1,3,3,4,4,1,0,1,2,2,1,3),
-(0,1,0,4,0,4,0,3,0,1,3,3,3,2,3,1,1,0,3,0,3,3,4,3,2,4,2,0,1,0,4,3,2,0,4,3,0,5,3,3,2,4,4,4,3,3,3,4,0,1,3,0,0,1,0,0,1,0,0,0,0,4,2,3,3,3,0,3,0,0,0,4,4,4,5,3,2,0,3,3,0,3,5),
-(0,2,0,3,0,0,0,3,0,1,3,0,2,0,0,0,1,0,3,1,1,3,3,0,0,3,0,0,3,0,2,3,1,0,3,1,0,3,3,2,0,4,2,2,0,2,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,2,1,2,0,1,0,1,0,0,0,1,3,1,2,0,0,0,1,0,0,1,4),
-(0,3,0,3,0,5,0,1,0,2,4,3,1,3,3,2,1,1,5,2,1,0,5,1,2,0,0,0,3,3,2,2,3,2,4,3,0,0,3,3,1,3,3,0,2,5,3,4,0,3,3,0,1,2,0,2,2,0,3,2,0,2,2,3,3,3,0,2,0,1,0,3,4,4,2,5,4,0,3,0,0,3,5),
-(0,3,0,3,0,3,0,1,0,3,3,3,3,0,3,0,2,0,2,1,1,0,2,0,1,0,0,0,2,1,0,0,1,0,3,2,0,0,3,3,1,2,3,1,0,3,3,0,0,1,0,0,0,0,0,2,0,0,0,0,0,2,3,1,2,3,0,3,0,1,0,3,2,1,0,4,3,0,1,1,0,3,3),
-(0,4,0,5,0,3,0,3,0,4,5,5,4,3,5,3,4,3,5,3,3,2,5,3,4,4,4,3,4,3,4,5,5,3,4,4,3,4,4,5,4,4,4,3,4,5,5,4,2,3,4,2,3,4,0,3,3,1,4,3,2,4,3,3,5,5,0,3,0,3,0,5,5,5,5,4,4,0,4,0,1,4,4),
-(0,4,0,4,0,3,0,3,0,3,5,4,4,2,3,2,5,1,3,2,5,1,4,2,3,2,3,3,4,3,3,3,3,2,5,4,1,3,3,5,3,4,4,0,4,4,3,1,1,3,1,0,2,3,0,2,3,0,3,0,0,4,3,1,3,4,0,3,0,2,0,4,4,4,3,4,5,0,4,0,0,3,4),
-(0,3,0,3,0,3,1,2,0,3,4,4,3,3,3,0,2,2,4,3,3,1,3,3,3,1,1,0,3,1,4,3,2,3,4,4,2,4,4,4,3,4,4,3,2,4,4,3,1,3,3,1,3,3,0,4,1,0,2,2,1,4,3,2,3,3,5,4,3,3,5,4,4,3,3,0,4,0,3,2,2,4,4),
-(0,2,0,1,0,0,0,0,0,1,2,1,3,0,0,0,0,0,2,0,1,2,1,0,0,1,0,0,0,0,3,0,0,1,0,1,1,3,1,0,0,0,1,1,0,1,1,0,0,0,0,0,2,0,0,0,0,0,0,0,0,1,1,2,2,0,3,4,0,0,0,1,1,0,0,1,0,0,0,0,0,1,1),
-(0,1,0,0,0,1,0,0,0,0,4,0,4,1,4,0,3,0,4,0,3,0,4,0,3,0,3,0,4,1,5,1,4,0,0,3,0,5,0,5,2,0,1,0,0,0,2,1,4,0,1,3,0,0,3,0,0,3,1,1,4,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0),
-(1,4,0,5,0,3,0,2,0,3,5,4,4,3,4,3,5,3,4,3,3,0,4,3,3,3,3,3,3,2,4,4,3,1,3,4,4,5,4,4,3,4,4,1,3,5,4,3,3,3,1,2,2,3,3,1,3,1,3,3,3,5,3,3,4,5,0,3,0,3,0,3,4,3,4,4,3,0,3,0,2,4,3),
-(0,1,0,4,0,0,0,0,0,1,4,0,4,1,4,2,4,0,3,0,1,0,1,0,0,0,0,0,2,0,3,1,1,1,0,3,0,0,0,1,2,1,0,0,1,1,1,1,0,1,0,0,0,1,0,0,3,0,0,0,0,3,2,0,2,2,0,1,0,0,0,2,3,2,3,3,0,0,0,0,2,1,0),
-(0,5,1,5,0,3,0,3,0,5,4,4,5,1,5,3,3,0,4,3,4,3,5,3,4,3,3,2,4,3,4,3,3,0,3,3,1,4,4,3,4,4,4,3,4,5,5,3,2,3,1,1,3,3,1,3,1,1,3,3,2,4,5,3,3,5,0,4,0,3,0,4,4,3,5,3,3,0,3,4,0,4,3),
-(0,5,0,5,0,3,0,2,0,4,4,3,5,2,4,3,3,3,4,4,4,3,5,3,5,3,3,1,4,0,4,3,3,0,3,3,0,4,4,4,4,5,4,3,3,5,5,3,2,3,1,2,3,2,0,1,0,0,3,2,2,4,4,3,1,5,0,4,0,3,0,4,3,1,3,2,1,0,3,3,0,3,3),
-(0,4,0,5,0,5,0,4,0,4,5,5,5,3,4,3,3,2,5,4,4,3,5,3,5,3,4,0,4,3,4,4,3,2,4,4,3,4,5,4,4,5,5,0,3,5,5,4,1,3,3,2,3,3,1,3,1,0,4,3,1,4,4,3,4,5,0,4,0,2,0,4,3,4,4,3,3,0,4,0,0,5,5),
-(0,4,0,4,0,5,0,1,1,3,3,4,4,3,4,1,3,0,5,1,3,0,3,1,3,1,1,0,3,0,3,3,4,0,4,3,0,4,4,4,3,4,4,0,3,5,4,1,0,3,0,0,2,3,0,3,1,0,3,1,0,3,2,1,3,5,0,3,0,1,0,3,2,3,3,4,4,0,2,2,0,4,4),
-(2,4,0,5,0,4,0,3,0,4,5,5,4,3,5,3,5,3,5,3,5,2,5,3,4,3,3,4,3,4,5,3,2,1,5,4,3,2,3,4,5,3,4,1,2,5,4,3,0,3,3,0,3,2,0,2,3,0,4,1,0,3,4,3,3,5,0,3,0,1,0,4,5,5,5,4,3,0,4,2,0,3,5),
-(0,5,0,4,0,4,0,2,0,5,4,3,4,3,4,3,3,3,4,3,4,2,5,3,5,3,4,1,4,3,4,4,4,0,3,5,0,4,4,4,4,5,3,1,3,4,5,3,3,3,3,3,3,3,0,2,2,0,3,3,2,4,3,3,3,5,3,4,1,3,3,5,3,2,0,0,0,0,4,3,1,3,3),
-(0,1,0,3,0,3,0,1,0,1,3,3,3,2,3,3,3,0,3,0,0,0,3,1,3,0,0,0,2,2,2,3,0,0,3,2,0,1,2,4,1,3,3,0,0,3,3,3,0,1,0,0,2,1,0,0,3,0,3,1,0,3,0,0,1,3,0,2,0,1,0,3,3,1,3,3,0,0,1,1,0,3,3),
-(0,2,0,3,0,2,1,4,0,2,2,3,1,1,3,1,1,0,2,0,3,1,2,3,1,3,0,0,1,0,4,3,2,3,3,3,1,4,2,3,3,3,3,1,0,3,1,4,0,1,1,0,1,2,0,1,1,0,1,1,0,3,1,3,2,2,0,1,0,0,0,2,3,3,3,1,0,0,0,0,0,2,3),
-(0,5,0,4,0,5,0,2,0,4,5,5,3,3,4,3,3,1,5,4,4,2,4,4,4,3,4,2,4,3,5,5,4,3,3,4,3,3,5,5,4,5,5,1,3,4,5,3,1,4,3,1,3,3,0,3,3,1,4,3,1,4,5,3,3,5,0,4,0,3,0,5,3,3,1,4,3,0,4,0,1,5,3),
-(0,5,0,5,0,4,0,2,0,4,4,3,4,3,3,3,3,3,5,4,4,4,4,4,4,5,3,3,5,2,4,4,4,3,4,4,3,3,4,4,5,5,3,3,4,3,4,3,3,4,3,3,3,3,1,2,2,1,4,3,3,5,4,4,3,4,0,4,0,3,0,4,4,4,4,4,1,0,4,2,0,2,4),
-(0,4,0,4,0,3,0,1,0,3,5,2,3,0,3,0,2,1,4,2,3,3,4,1,4,3,3,2,4,1,3,3,3,0,3,3,0,0,3,3,3,5,3,3,3,3,3,2,0,2,0,0,2,0,0,2,0,0,1,0,0,3,1,2,2,3,0,3,0,2,0,4,4,3,3,4,1,0,3,0,0,2,4),
-(0,0,0,4,0,0,0,0,0,0,1,0,1,0,2,0,0,0,0,0,1,0,2,0,1,0,0,0,0,0,3,1,3,0,3,2,0,0,0,1,0,3,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,4,0,2,0,0,0,0,0,0,2),
-(0,2,1,3,0,2,0,2,0,3,3,3,3,1,3,1,3,3,3,3,3,3,4,2,2,1,2,1,4,0,4,3,1,3,3,3,2,4,3,5,4,3,3,3,3,3,3,3,0,1,3,0,2,0,0,1,0,0,1,0,0,4,2,0,2,3,0,3,3,0,3,3,4,2,3,1,4,0,1,2,0,2,3),
-(0,3,0,3,0,1,0,3,0,2,3,3,3,0,3,1,2,0,3,3,2,3,3,2,3,2,3,1,3,0,4,3,2,0,3,3,1,4,3,3,2,3,4,3,1,3,3,1,1,0,1,1,0,1,0,1,0,1,0,0,0,4,1,1,0,3,0,3,1,0,2,3,3,3,3,3,1,0,0,2,0,3,3),
-(0,0,0,0,0,0,0,0,0,0,3,0,2,0,3,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,3,0,3,0,3,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,2,0,2,3,0,0,0,0,0,0,0,0,3),
-(0,2,0,3,1,3,0,3,0,2,3,3,3,1,3,1,3,1,3,1,3,3,3,1,3,0,2,3,1,1,4,3,3,2,3,3,1,2,2,4,1,3,3,0,1,4,2,3,0,1,3,0,3,0,0,1,3,0,2,0,0,3,3,2,1,3,0,3,0,2,0,3,4,4,4,3,1,0,3,0,0,3,3),
-(0,2,0,1,0,2,0,0,0,1,3,2,2,1,3,0,1,1,3,0,3,2,3,1,2,0,2,0,1,1,3,3,3,0,3,3,1,1,2,3,2,3,3,1,2,3,2,0,0,1,0,0,0,0,0,0,3,0,1,0,0,2,1,2,1,3,0,3,0,0,0,3,4,4,4,3,2,0,2,0,0,2,4),
-(0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2,2,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,3,1,0,0,0,0,0,0,0,3),
-(0,3,0,3,0,2,0,3,0,3,3,3,2,3,2,2,2,0,3,1,3,3,3,2,3,3,0,0,3,0,3,2,2,0,2,3,1,4,3,4,3,3,2,3,1,5,4,4,0,3,1,2,1,3,0,3,1,1,2,0,2,3,1,3,1,3,0,3,0,1,0,3,3,4,4,2,1,0,2,1,0,2,4),
-(0,1,0,3,0,1,0,2,0,1,4,2,5,1,4,0,2,0,2,1,3,1,4,0,2,1,0,0,2,1,4,1,1,0,3,3,0,5,1,3,2,3,3,1,0,3,2,3,0,1,0,0,0,0,0,0,1,0,0,0,0,4,0,1,0,3,0,2,0,1,0,3,3,3,4,3,3,0,0,0,0,2,3),
-(0,0,0,1,0,0,0,0,0,0,2,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,1,0,0,1,0,0,0,0,0,3),
-(0,1,0,3,0,4,0,3,0,2,4,3,1,0,3,2,2,1,3,1,2,2,3,1,1,1,2,1,3,0,1,2,0,1,3,2,1,3,0,5,5,1,0,0,1,3,2,1,0,3,0,0,1,0,0,0,0,0,3,4,0,1,1,1,3,2,0,2,0,1,0,2,3,3,1,2,3,0,1,0,1,0,4),
-(0,0,0,1,0,3,0,3,0,2,2,1,0,0,4,0,3,0,3,1,3,0,3,0,3,0,1,0,3,0,3,1,3,0,3,3,0,0,1,2,1,1,1,0,1,2,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,2,2,1,2,0,0,2,0,0,0,0,2,3,3,3,3,0,0,0,0,1,4),
-(0,0,0,3,0,3,0,0,0,0,3,1,1,0,3,0,1,0,2,0,1,0,0,0,0,0,0,0,1,0,3,0,2,0,2,3,0,0,2,2,3,1,2,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,2,0,0,0,0,2,3),
-(2,4,0,5,0,5,0,4,0,3,4,3,3,3,4,3,3,3,4,3,4,4,5,4,5,5,5,2,3,0,5,5,4,1,5,4,3,1,5,4,3,4,4,3,3,4,3,3,0,3,2,0,2,3,0,3,0,0,3,3,0,5,3,2,3,3,0,3,0,3,0,3,4,5,4,5,3,0,4,3,0,3,4),
-(0,3,0,3,0,3,0,3,0,3,3,4,3,2,3,2,3,0,4,3,3,3,3,3,3,3,3,0,3,2,4,3,3,1,3,4,3,4,4,4,3,4,4,3,2,4,4,1,0,2,0,0,1,1,0,2,0,0,3,1,0,5,3,2,1,3,0,3,0,1,2,4,3,2,4,3,3,0,3,2,0,4,4),
-(0,3,0,3,0,1,0,0,0,1,4,3,3,2,3,1,3,1,4,2,3,2,4,2,3,4,3,0,2,2,3,3,3,0,3,3,3,0,3,4,1,3,3,0,3,4,3,3,0,1,1,0,1,0,0,0,4,0,3,0,0,3,1,2,1,3,0,4,0,1,0,4,3,3,4,3,3,0,2,0,0,3,3),
-(0,3,0,4,0,1,0,3,0,3,4,3,3,0,3,3,3,1,3,1,3,3,4,3,3,3,0,0,3,1,5,3,3,1,3,3,2,5,4,3,3,4,5,3,2,5,3,4,0,1,0,0,0,0,0,2,0,0,1,1,0,4,2,2,1,3,0,3,0,2,0,4,4,3,5,3,2,0,1,1,0,3,4),
-(0,5,0,4,0,5,0,2,0,4,4,3,3,2,3,3,3,1,4,3,4,1,5,3,4,3,4,0,4,2,4,3,4,1,5,4,0,4,4,4,4,5,4,1,3,5,4,2,1,4,1,1,3,2,0,3,1,0,3,2,1,4,3,3,3,4,0,4,0,3,0,4,4,4,3,3,3,0,4,2,0,3,4),
-(1,4,0,4,0,3,0,1,0,3,3,3,1,1,3,3,2,2,3,3,1,0,3,2,2,1,2,0,3,1,2,1,2,0,3,2,0,2,2,3,3,4,3,0,3,3,1,2,0,1,1,3,1,2,0,0,3,0,1,1,0,3,2,2,3,3,0,3,0,0,0,2,3,3,4,3,3,0,1,0,0,1,4),
-(0,4,0,4,0,4,0,0,0,3,4,4,3,1,4,2,3,2,3,3,3,1,4,3,4,0,3,0,4,2,3,3,2,2,5,4,2,1,3,4,3,4,3,1,3,3,4,2,0,2,1,0,3,3,0,0,2,0,3,1,0,4,4,3,4,3,0,4,0,1,0,2,4,4,4,4,4,0,3,2,0,3,3),
-(0,0,0,1,0,4,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,3,2,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,2),
-(0,2,0,3,0,4,0,4,0,1,3,3,3,0,4,0,2,1,2,1,1,1,2,0,3,1,1,0,1,0,3,1,0,0,3,3,2,0,1,1,0,0,0,0,0,1,0,2,0,2,2,0,3,1,0,0,1,0,1,1,0,1,2,0,3,0,0,0,0,1,0,0,3,3,4,3,1,0,1,0,3,0,2),
-(0,0,0,3,0,5,0,0,0,0,1,0,2,0,3,1,0,1,3,0,0,0,2,0,0,0,1,0,0,0,1,1,0,0,4,0,0,0,2,3,0,1,4,1,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,1,0,0,0,0,0,0,0,2,0,0,3,0,0,0,0,0,3),
-(0,2,0,5,0,5,0,1,0,2,4,3,3,2,5,1,3,2,3,3,3,0,4,1,2,0,3,0,4,0,2,2,1,1,5,3,0,0,1,4,2,3,2,0,3,3,3,2,0,2,4,1,1,2,0,1,1,0,3,1,0,1,3,1,2,3,0,2,0,0,0,1,3,5,4,4,4,0,3,0,0,1,3),
-(0,4,0,5,0,4,0,4,0,4,5,4,3,3,4,3,3,3,4,3,4,4,5,3,4,5,4,2,4,2,3,4,3,1,4,4,1,3,5,4,4,5,5,4,4,5,5,5,2,3,3,1,4,3,1,3,3,0,3,3,1,4,3,4,4,4,0,3,0,4,0,3,3,4,4,5,0,0,4,3,0,4,5),
-(0,4,0,4,0,3,0,3,0,3,4,4,4,3,3,2,4,3,4,3,4,3,5,3,4,3,2,1,4,2,4,4,3,1,3,4,2,4,5,5,3,4,5,4,1,5,4,3,0,3,2,2,3,2,1,3,1,0,3,3,3,5,3,3,3,5,4,4,2,3,3,4,3,3,3,2,1,0,3,2,1,4,3),
-(0,4,0,5,0,4,0,3,0,3,5,5,3,2,4,3,4,0,5,4,4,1,4,4,4,3,3,3,4,3,5,5,2,3,3,4,1,2,5,5,3,5,5,2,3,5,5,4,0,3,2,0,3,3,1,1,5,1,4,1,0,4,3,2,3,5,0,4,0,3,0,5,4,3,4,3,0,0,4,1,0,4,4),
-(1,3,0,4,0,2,0,2,0,2,5,5,3,3,3,3,3,0,4,2,3,4,4,4,3,4,0,0,3,4,5,4,3,3,3,3,2,5,5,4,5,5,5,4,3,5,5,5,1,3,1,0,1,0,0,3,2,0,4,2,0,5,2,3,2,4,1,3,0,3,0,4,5,4,5,4,3,0,4,2,0,5,4),
-(0,3,0,4,0,5,0,3,0,3,4,4,3,2,3,2,3,3,3,3,3,2,4,3,3,2,2,0,3,3,3,3,3,1,3,3,3,0,4,4,3,4,4,1,1,4,4,2,0,3,1,0,1,1,0,4,1,0,2,3,1,3,3,1,3,4,0,3,0,1,0,3,1,3,0,0,1,0,2,0,0,4,4),
-(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
-(0,3,0,3,0,2,0,3,0,1,5,4,3,3,3,1,4,2,1,2,3,4,4,2,4,4,5,0,3,1,4,3,4,0,4,3,3,3,2,3,2,5,3,4,3,2,2,3,0,0,3,0,2,1,0,1,2,0,0,0,0,2,1,1,3,1,0,2,0,4,0,3,4,4,4,5,2,0,2,0,0,1,3),
-(0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,0,1,1,0,0,0,4,2,1,1,0,1,0,3,2,0,0,3,1,1,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,1,0,0,0,2,0,0,0,1,4,0,4,2,1,0,0,0,0,0,1),
-(0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,3,1,0,0,0,2,0,2,1,0,0,1,2,1,0,1,1,0,0,3,0,0,0,0,0,0,0,0,0,0,0,1,3,1,0,0,0,0,0,1,0,0,2,1,0,0,0,0,0,0,0,0,2),
-(0,4,0,4,0,4,0,3,0,4,4,3,4,2,4,3,2,0,4,4,4,3,5,3,5,3,3,2,4,2,4,3,4,3,1,4,0,2,3,4,4,4,3,3,3,4,4,4,3,4,1,3,4,3,2,1,2,1,3,3,3,4,4,3,3,5,0,4,0,3,0,4,3,3,3,2,1,0,3,0,0,3,3),
-(0,4,0,3,0,3,0,3,0,3,5,5,3,3,3,3,4,3,4,3,3,3,4,4,4,3,3,3,3,4,3,5,3,3,1,3,2,4,5,5,5,5,4,3,4,5,5,3,2,2,3,3,3,3,2,3,3,1,2,3,2,4,3,3,3,4,0,4,0,2,0,4,3,2,2,1,2,0,3,0,0,4,1),
-)
-
-class JapaneseContextAnalysis:
- def __init__(self):
- self.reset()
-
- def reset(self):
- self._mTotalRel = 0 # total sequence received
- self._mRelSample = [0] * NUM_OF_CATEGORY # category counters, each interger counts sequence in its category
- self._mNeedToSkipCharNum = 0 # if last byte in current buffer is not the last byte of a character, we need to know how many bytes to skip in next buffer
- self._mLastCharOrder = -1 # The order of previous char
- self._mDone = constants.False # If this flag is set to constants.True, detection is done and conclusion has been made
-
- def feed(self, aBuf, aLen):
- if self._mDone: return
-
- # The buffer we got is byte oriented, and a character may span in more than one
- # buffers. In case the last one or two byte in last buffer is not complete, we
- # record how many byte needed to complete that character and skip these bytes here.
- # We can choose to record those bytes as well and analyse the character once it
- # is complete, but since a character will not make much difference, by simply skipping
- # this character will simply our logic and improve performance.
- i = self._mNeedToSkipCharNum
- while i < aLen:
- order, charLen = self.get_order(aBuf[i:i+2])
- i += charLen
- if i > aLen:
- self._mNeedToSkipCharNum = i - aLen
- self._mLastCharOrder = -1
- else:
- if (order != -1) and (self._mLastCharOrder != -1):
- self._mTotalRel += 1
- if self._mTotalRel > MAX_REL_THRESHOLD:
- self._mDone = constants.True
- break
- self._mRelSample[jp2CharContext[self._mLastCharOrder][order]] += 1
- self._mLastCharOrder = order
-
- def got_enough_data(self):
- return self._mTotalRel > ENOUGH_REL_THRESHOLD
-
- def get_confidence(self):
- # This is just one way to calculate confidence. It works well for me.
- if self._mTotalRel > MINIMUM_DATA_THRESHOLD:
- return (self._mTotalRel - self._mRelSample[0]) / self._mTotalRel
- else:
- return DONT_KNOW
-
- def get_order(self, aStr):
- return -1, 1
-
-class SJISContextAnalysis(JapaneseContextAnalysis):
- def get_order(self, aStr):
- if not aStr: return -1, 1
- # find out current char's byte length
- if ((aStr[0] >= '\x81') and (aStr[0] <= '\x9F')) or \
- ((aStr[0] >= '\xE0') and (aStr[0] <= '\xFC')):
- charLen = 2
- else:
- charLen = 1
-
- # return its order if it is hiragana
- if len(aStr) > 1:
- if (aStr[0] == '\202') and \
- (aStr[1] >= '\x9F') and \
- (aStr[1] <= '\xF1'):
- return ord(aStr[1]) - 0x9F, charLen
-
- return -1, charLen
-
-class EUCJPContextAnalysis(JapaneseContextAnalysis):
- def get_order(self, aStr):
- if not aStr: return -1, 1
- # find out current char's byte length
- if (aStr[0] == '\x8E') or \
- ((aStr[0] >= '\xA1') and (aStr[0] <= '\xFE')):
- charLen = 2
- elif aStr[0] == '\x8F':
- charLen = 3
- else:
- charLen = 1
-
- # return its order if it is hiragana
- if len(aStr) > 1:
- if (aStr[0] == '\xA4') and \
- (aStr[1] >= '\xA1') and \
- (aStr[1] <= '\xF3'):
- return ord(aStr[1]) - 0xA1, charLen
-
- return -1, charLen
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/langbulgarianmodel.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/langbulgarianmodel.py
deleted file mode 100644
index bf5641e..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/langbulgarianmodel.py
+++ /dev/null
@@ -1,228 +0,0 @@
-######################## BEGIN LICENSE BLOCK ########################
-# The Original Code is Mozilla Communicator client code.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 1998
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-# Mark Pilgrim - port to Python
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301 USA
-######################### END LICENSE BLOCK #########################
-
-import constants
-
-# 255: Control characters that usually does not exist in any text
-# 254: Carriage/Return
-# 253: symbol (punctuation) that does not belong to word
-# 252: 0 - 9
-
-# Character Mapping Table:
-# this table is modified base on win1251BulgarianCharToOrderMap, so
-# only number <64 is sure valid
-
-Latin5_BulgarianCharToOrderMap = ( \
-255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10
-253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20
-252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30
-253, 77, 90, 99,100, 72,109,107,101, 79,185, 81,102, 76, 94, 82, # 40
-110,186,108, 91, 74,119, 84, 96,111,187,115,253,253,253,253,253, # 50
-253, 65, 69, 70, 66, 63, 68,112,103, 92,194,104, 95, 86, 87, 71, # 60
-116,195, 85, 93, 97,113,196,197,198,199,200,253,253,253,253,253, # 70
-194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209, # 80
-210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225, # 90
- 81,226,227,228,229,230,105,231,232,233,234,235,236, 45,237,238, # a0
- 31, 32, 35, 43, 37, 44, 55, 47, 40, 59, 33, 46, 38, 36, 41, 30, # b0
- 39, 28, 34, 51, 48, 49, 53, 50, 54, 57, 61,239, 67,240, 60, 56, # c0
- 1, 18, 9, 20, 11, 3, 23, 15, 2, 26, 12, 10, 14, 6, 4, 13, # d0
- 7, 8, 5, 19, 29, 25, 22, 21, 27, 24, 17, 75, 52,241, 42, 16, # e0
- 62,242,243,244, 58,245, 98,246,247,248,249,250,251, 91,252,253, # f0
-)
-
-win1251BulgarianCharToOrderMap = ( \
-255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10
-253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20
-252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30
-253, 77, 90, 99,100, 72,109,107,101, 79,185, 81,102, 76, 94, 82, # 40
-110,186,108, 91, 74,119, 84, 96,111,187,115,253,253,253,253,253, # 50
-253, 65, 69, 70, 66, 63, 68,112,103, 92,194,104, 95, 86, 87, 71, # 60
-116,195, 85, 93, 97,113,196,197,198,199,200,253,253,253,253,253, # 70
-206,207,208,209,210,211,212,213,120,214,215,216,217,218,219,220, # 80
-221, 78, 64, 83,121, 98,117,105,222,223,224,225,226,227,228,229, # 90
- 88,230,231,232,233,122, 89,106,234,235,236,237,238, 45,239,240, # a0
- 73, 80,118,114,241,242,243,244,245, 62, 58,246,247,248,249,250, # b0
- 31, 32, 35, 43, 37, 44, 55, 47, 40, 59, 33, 46, 38, 36, 41, 30, # c0
- 39, 28, 34, 51, 48, 49, 53, 50, 54, 57, 61,251, 67,252, 60, 56, # d0
- 1, 18, 9, 20, 11, 3, 23, 15, 2, 26, 12, 10, 14, 6, 4, 13, # e0
- 7, 8, 5, 19, 29, 25, 22, 21, 27, 24, 17, 75, 52,253, 42, 16, # f0
-)
-
-# Model Table:
-# total sequences: 100%
-# first 512 sequences: 96.9392%
-# first 1024 sequences:3.0618%
-# rest sequences: 0.2992%
-# negative sequences: 0.0020%
-BulgarianLangModel = ( \
-0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,2,3,3,3,3,3,
-3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,3,3,3,2,2,3,2,2,1,2,2,
-3,1,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,0,3,3,3,3,3,3,3,3,3,3,0,3,0,1,
-0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
-3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,3,3,3,3,3,3,3,3,0,3,1,0,
-0,1,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
-3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,1,3,2,3,3,3,3,3,3,3,3,0,3,0,0,
-0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,1,3,2,3,3,3,3,3,3,3,3,0,3,0,0,
-0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,3,3,3,3,3,3,3,3,3,3,2,3,2,2,1,3,3,3,3,2,2,2,1,1,2,0,1,0,1,0,0,
-0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1,
-3,3,3,3,3,3,3,2,3,2,2,3,3,1,1,2,3,3,2,3,3,3,3,2,1,2,0,2,0,3,0,0,
-0,0,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1,
-3,3,3,3,3,3,3,1,3,3,3,3,3,2,3,2,3,3,3,3,3,2,3,3,1,3,0,3,0,2,0,0,
-0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,
-3,3,3,3,3,3,3,3,1,3,3,2,3,3,3,1,3,3,2,3,2,2,2,0,0,2,0,2,0,2,0,0,
-0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1,
-3,3,3,3,3,3,3,3,3,0,3,3,3,2,2,3,3,3,1,2,2,3,2,1,1,2,0,2,0,0,0,0,
-1,0,0,0,0,0,0,0,0,0,2,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,
-3,3,3,3,3,3,3,2,3,3,1,2,3,2,2,2,3,3,3,3,3,2,2,3,1,2,0,2,1,2,0,0,
-0,0,0,0,0,0,0,0,0,0,3,0,0,1,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1,
-3,3,3,3,3,1,3,3,3,3,3,2,3,3,3,2,3,3,2,3,2,2,2,3,1,2,0,1,0,1,0,0,
-0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,
-3,3,3,3,3,3,3,3,3,3,3,1,1,1,2,2,1,3,1,3,2,2,3,0,0,1,0,1,0,1,0,0,
-0,0,0,1,0,0,0,0,1,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,
-3,3,3,3,3,2,2,3,2,2,3,1,2,1,1,1,2,3,1,3,1,2,2,0,1,1,1,1,0,1,0,0,
-0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,
-3,3,3,3,3,1,3,2,2,3,3,1,2,3,1,1,3,3,3,3,1,2,2,1,1,1,0,2,0,2,0,1,
-0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,
-3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,2,2,3,3,3,2,2,1,1,2,0,2,0,1,0,0,
-0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,
-3,0,1,2,1,3,3,2,3,3,3,3,3,2,3,2,1,0,3,1,2,1,2,1,2,3,2,1,0,1,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-1,1,1,2,3,3,3,3,3,3,3,3,3,3,3,3,0,0,3,1,3,3,2,3,3,2,2,2,0,1,0,0,
-0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-2,3,3,3,3,0,3,3,3,3,3,2,1,1,2,1,3,3,0,3,1,1,1,1,3,2,0,1,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,
-3,3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,1,1,3,1,3,3,2,3,2,2,2,3,0,2,0,0,
-0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,3,3,3,3,2,3,3,2,2,3,2,1,1,1,1,1,3,1,3,1,1,0,0,0,1,0,0,0,1,0,0,
-0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,
-3,3,3,3,3,2,3,2,0,3,2,0,3,0,2,0,0,2,1,3,1,0,0,1,0,0,0,1,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
-3,3,3,3,2,1,1,1,1,2,1,1,2,1,1,1,2,2,1,2,1,1,1,0,1,1,0,1,0,1,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,
-3,3,3,3,2,1,3,1,1,2,1,3,2,1,1,0,1,2,3,2,1,1,1,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-2,3,3,3,3,2,2,1,0,1,0,0,1,0,0,0,2,1,0,3,0,0,1,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
-3,3,3,2,3,2,3,3,1,3,2,1,1,1,2,1,1,2,1,3,0,1,0,0,0,1,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,1,1,2,2,3,3,2,3,2,2,2,3,1,2,2,1,1,2,1,1,2,2,0,1,1,0,1,0,2,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,3,3,3,2,1,3,1,0,2,2,1,3,2,1,0,0,2,0,2,0,1,0,0,0,0,0,0,0,1,0,0,
-0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,
-3,3,3,3,3,3,1,2,0,2,3,1,2,3,2,0,1,3,1,2,1,1,1,0,0,1,0,0,2,2,2,3,
-2,2,2,2,1,2,1,1,2,2,1,1,2,0,1,1,1,0,0,1,1,0,0,1,1,0,0,0,1,1,0,1,
-3,3,3,3,3,2,1,2,2,1,2,0,2,0,1,0,1,2,1,2,1,1,0,0,0,1,0,1,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1,
-3,3,2,3,3,1,1,3,1,0,3,2,1,0,0,0,1,2,0,2,0,1,0,0,0,1,0,1,2,1,2,2,
-1,1,1,1,1,1,1,2,2,2,1,1,1,1,1,1,1,0,1,2,1,1,1,0,0,0,0,0,1,1,0,0,
-3,1,0,1,0,2,3,2,2,2,3,2,2,2,2,2,1,0,2,1,2,1,1,1,0,1,2,1,2,2,2,1,
-1,1,2,2,2,2,1,2,1,1,0,1,2,1,2,2,2,1,1,1,0,1,1,1,1,2,0,1,0,0,0,0,
-2,3,2,3,3,0,0,2,1,0,2,1,0,0,0,0,2,3,0,2,0,0,0,0,0,1,0,0,2,0,1,2,
-2,1,2,1,2,2,1,1,1,2,1,1,1,0,1,2,2,1,1,1,1,1,0,1,1,1,0,0,1,2,0,0,
-3,3,2,2,3,0,2,3,1,1,2,0,0,0,1,0,0,2,0,2,0,0,0,1,0,1,0,1,2,0,2,2,
-1,1,1,1,2,1,0,1,2,2,2,1,1,1,1,1,1,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,
-2,3,2,3,3,0,0,3,0,1,1,0,1,0,0,0,2,2,1,2,0,0,0,0,0,0,0,0,2,0,1,2,
-2,2,1,1,1,1,1,2,2,2,1,0,2,0,1,0,1,0,0,1,0,1,0,0,1,0,0,0,0,1,0,0,
-3,3,3,3,2,2,2,2,2,0,2,1,1,1,1,2,1,2,1,1,0,2,0,1,0,1,0,0,2,0,1,2,
-1,1,1,1,1,1,1,2,2,1,1,0,2,0,1,0,2,0,0,1,1,1,0,0,2,0,0,0,1,1,0,0,
-2,3,3,3,3,1,0,0,0,0,0,0,0,0,0,0,2,0,0,1,1,0,0,0,0,0,0,1,2,0,1,2,
-2,2,2,1,1,2,1,1,2,2,2,1,2,0,1,1,1,1,1,1,0,1,1,1,1,0,0,1,1,1,0,0,
-2,3,3,3,3,0,2,2,0,2,1,0,0,0,1,1,1,2,0,2,0,0,0,3,0,0,0,0,2,0,2,2,
-1,1,1,2,1,2,1,1,2,2,2,1,2,0,1,1,1,0,1,1,1,1,0,2,1,0,0,0,1,1,0,0,
-2,3,3,3,3,0,2,1,0,0,2,0,0,0,0,0,1,2,0,2,0,0,0,0,0,0,0,0,2,0,1,2,
-1,1,1,2,1,1,1,1,2,2,2,0,1,0,1,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,
-3,3,2,2,3,0,1,0,1,0,0,0,0,0,0,0,1,1,0,3,0,0,0,0,0,0,0,0,1,0,2,2,
-1,1,1,1,1,2,1,1,2,2,1,2,2,1,0,1,1,1,1,1,0,1,0,0,1,0,0,0,1,1,0,0,
-3,1,0,1,0,2,2,2,2,3,2,1,1,1,2,3,0,0,1,0,2,1,1,0,1,1,1,1,2,1,1,1,
-1,2,2,1,2,1,2,2,1,1,0,1,2,1,2,2,1,1,1,0,0,1,1,1,2,1,0,1,0,0,0,0,
-2,1,0,1,0,3,1,2,2,2,2,1,2,2,1,1,1,0,2,1,2,2,1,1,2,1,1,0,2,1,1,1,
-1,2,2,2,2,2,2,2,1,2,0,1,1,0,2,1,1,1,1,1,0,0,1,1,1,1,0,1,0,0,0,0,
-2,1,1,1,1,2,2,2,2,1,2,2,2,1,2,2,1,1,2,1,2,3,2,2,1,1,1,1,0,1,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-2,2,2,3,2,0,1,2,0,1,2,1,1,0,1,0,1,2,1,2,0,0,0,1,1,0,0,0,1,0,0,2,
-1,1,0,0,1,1,0,1,1,1,1,0,2,0,1,1,1,0,0,1,1,0,0,0,0,1,0,0,0,1,0,0,
-2,0,0,0,0,1,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,0,1,1,1,1,1,2,1,1,1,
-1,2,2,2,2,1,1,2,1,2,1,1,1,0,2,1,2,1,1,1,0,2,1,1,1,1,0,1,0,0,0,0,
-3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,
-1,1,0,1,0,1,1,1,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-2,2,2,3,2,0,0,0,0,1,0,0,0,0,0,0,1,1,0,2,0,0,0,0,0,0,0,0,1,0,1,2,
-1,1,1,1,1,1,0,0,2,2,2,2,2,0,1,1,0,1,1,1,1,1,0,0,1,0,0,0,1,1,0,1,
-2,3,1,2,1,0,1,1,0,2,2,2,0,0,1,0,0,1,1,1,1,0,0,0,0,0,0,0,1,0,1,2,
-1,1,1,1,2,1,1,1,1,1,1,1,1,0,1,1,0,1,0,1,0,1,0,0,1,0,0,0,0,1,0,0,
-2,2,2,2,2,0,0,2,0,0,2,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,2,0,2,2,
-1,1,1,1,1,0,0,1,2,1,1,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,
-1,2,2,2,2,0,0,2,0,1,1,0,0,0,1,0,0,2,0,2,0,0,0,0,0,0,0,0,0,0,1,1,
-0,0,0,1,1,1,1,1,1,1,1,1,1,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,
-1,2,2,3,2,0,0,1,0,0,1,0,0,0,0,0,0,1,0,2,0,0,0,1,0,0,0,0,0,0,0,2,
-1,1,0,0,1,0,0,0,1,1,0,0,1,0,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,
-2,1,2,2,2,1,2,1,2,2,1,1,2,1,1,1,0,1,1,1,1,2,0,1,0,1,1,1,1,0,1,1,
-1,1,2,1,1,1,1,1,1,0,0,1,2,1,1,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,
-1,0,0,1,3,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-2,2,2,2,1,0,0,1,0,2,0,0,0,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,2,0,0,1,
-0,2,0,1,0,0,1,1,2,0,1,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,
-1,2,2,2,2,0,1,1,0,2,1,0,1,1,1,0,0,1,0,2,0,1,0,0,0,0,0,0,0,0,0,1,
-0,1,0,0,1,0,0,0,1,1,0,0,1,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,
-2,2,2,2,2,0,0,1,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1,
-0,1,0,1,1,1,0,0,1,1,1,0,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,
-2,0,1,0,0,1,2,1,1,1,1,1,1,2,2,1,0,0,1,0,1,0,0,0,0,1,1,1,1,0,0,0,
-1,1,2,1,1,1,1,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-2,2,1,2,1,0,0,1,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1,
-0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-1,0,0,1,2,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,
-0,1,1,0,1,1,1,0,0,1,0,0,1,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,
-1,0,1,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,1,0,2,0,0,2,0,1,0,0,1,0,0,1,
-1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,
-1,1,1,1,1,1,1,2,0,0,0,0,0,0,2,1,0,1,1,0,0,1,1,1,0,1,0,0,0,0,0,0,
-2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,0,1,1,1,1,1,0,1,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
-)
-
-Latin5BulgarianModel = { \
- 'charToOrderMap': Latin5_BulgarianCharToOrderMap,
- 'precedenceMatrix': BulgarianLangModel,
- 'mTypicalPositiveRatio': 0.969392,
- 'keepEnglishLetter': constants.False,
- 'charsetName': "ISO-8859-5"
-}
-
-Win1251BulgarianModel = { \
- 'charToOrderMap': win1251BulgarianCharToOrderMap,
- 'precedenceMatrix': BulgarianLangModel,
- 'mTypicalPositiveRatio': 0.969392,
- 'keepEnglishLetter': constants.False,
- 'charsetName': "windows-1251"
-}
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/langcyrillicmodel.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/langcyrillicmodel.py
deleted file mode 100644
index e604cc7..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/langcyrillicmodel.py
+++ /dev/null
@@ -1,329 +0,0 @@
-######################## BEGIN LICENSE BLOCK ########################
-# The Original Code is Mozilla Communicator client code.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 1998
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-# Mark Pilgrim - port to Python
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301 USA
-######################### END LICENSE BLOCK #########################
-
-import constants
-
-# KOI8-R language model
-# Character Mapping Table:
-KOI8R_CharToOrderMap = ( \
-255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10
-253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20
-252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30
-253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, # 40
-155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, # 50
-253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, # 60
- 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, # 70
-191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206, # 80
-207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222, # 90
-223,224,225, 68,226,227,228,229,230,231,232,233,234,235,236,237, # a0
-238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253, # b0
- 27, 3, 21, 28, 13, 2, 39, 19, 26, 4, 23, 11, 8, 12, 5, 1, # c0
- 15, 16, 9, 7, 6, 14, 24, 10, 17, 18, 20, 25, 30, 29, 22, 54, # d0
- 59, 37, 44, 58, 41, 48, 53, 46, 55, 42, 60, 36, 49, 38, 31, 34, # e0
- 35, 43, 45, 32, 40, 52, 56, 33, 61, 62, 51, 57, 47, 63, 50, 70, # f0
-)
-
-win1251_CharToOrderMap = ( \
-255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10
-253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20
-252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30
-253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, # 40
-155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, # 50
-253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, # 60
- 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, # 70
-191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,
-207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,
-223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,
-239,240,241,242,243,244,245,246, 68,247,248,249,250,251,252,253,
- 37, 44, 33, 46, 41, 48, 56, 51, 42, 60, 36, 49, 38, 31, 34, 35,
- 45, 32, 40, 52, 53, 55, 58, 50, 57, 63, 70, 62, 61, 47, 59, 43,
- 3, 21, 10, 19, 13, 2, 24, 20, 4, 23, 11, 8, 12, 5, 1, 15,
- 9, 7, 6, 14, 39, 26, 28, 22, 25, 29, 54, 18, 17, 30, 27, 16,
-)
-
-latin5_CharToOrderMap = ( \
-255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10
-253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20
-252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30
-253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, # 40
-155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, # 50
-253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, # 60
- 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, # 70
-191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,
-207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,
-223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,
- 37, 44, 33, 46, 41, 48, 56, 51, 42, 60, 36, 49, 38, 31, 34, 35,
- 45, 32, 40, 52, 53, 55, 58, 50, 57, 63, 70, 62, 61, 47, 59, 43,
- 3, 21, 10, 19, 13, 2, 24, 20, 4, 23, 11, 8, 12, 5, 1, 15,
- 9, 7, 6, 14, 39, 26, 28, 22, 25, 29, 54, 18, 17, 30, 27, 16,
-239, 68,240,241,242,243,244,245,246,247,248,249,250,251,252,255,
-)
-
-macCyrillic_CharToOrderMap = ( \
-255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10
-253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20
-252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30
-253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, # 40
-155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, # 50
-253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, # 60
- 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, # 70
- 37, 44, 33, 46, 41, 48, 56, 51, 42, 60, 36, 49, 38, 31, 34, 35,
- 45, 32, 40, 52, 53, 55, 58, 50, 57, 63, 70, 62, 61, 47, 59, 43,
-191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,
-207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,
-223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,
-239,240,241,242,243,244,245,246,247,248,249,250,251,252, 68, 16,
- 3, 21, 10, 19, 13, 2, 24, 20, 4, 23, 11, 8, 12, 5, 1, 15,
- 9, 7, 6, 14, 39, 26, 28, 22, 25, 29, 54, 18, 17, 30, 27,255,
-)
-
-IBM855_CharToOrderMap = ( \
-255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10
-253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20
-252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30
-253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, # 40
-155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, # 50
-253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, # 60
- 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, # 70
-191,192,193,194, 68,195,196,197,198,199,200,201,202,203,204,205,
-206,207,208,209,210,211,212,213,214,215,216,217, 27, 59, 54, 70,
- 3, 37, 21, 44, 28, 58, 13, 41, 2, 48, 39, 53, 19, 46,218,219,
-220,221,222,223,224, 26, 55, 4, 42,225,226,227,228, 23, 60,229,
-230,231,232,233,234,235, 11, 36,236,237,238,239,240,241,242,243,
- 8, 49, 12, 38, 5, 31, 1, 34, 15,244,245,246,247, 35, 16,248,
- 43, 9, 45, 7, 32, 6, 40, 14, 52, 24, 56, 10, 33, 17, 61,249,
-250, 18, 62, 20, 51, 25, 57, 30, 47, 29, 63, 22, 50,251,252,255,
-)
-
-IBM866_CharToOrderMap = ( \
-255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10
-253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20
-252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30
-253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, # 40
-155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, # 50
-253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, # 60
- 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, # 70
- 37, 44, 33, 46, 41, 48, 56, 51, 42, 60, 36, 49, 38, 31, 34, 35,
- 45, 32, 40, 52, 53, 55, 58, 50, 57, 63, 70, 62, 61, 47, 59, 43,
- 3, 21, 10, 19, 13, 2, 24, 20, 4, 23, 11, 8, 12, 5, 1, 15,
-191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,
-207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,
-223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,
- 9, 7, 6, 14, 39, 26, 28, 22, 25, 29, 54, 18, 17, 30, 27, 16,
-239, 68,240,241,242,243,244,245,246,247,248,249,250,251,252,255,
-)
-
-# Model Table:
-# total sequences: 100%
-# first 512 sequences: 97.6601%
-# first 1024 sequences: 2.3389%
-# rest sequences: 0.1237%
-# negative sequences: 0.0009%
-RussianLangModel = ( \
-0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,1,3,3,3,3,1,3,3,3,2,3,2,3,3,
-3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,3,2,2,2,2,2,0,0,2,
-3,3,3,2,3,3,3,3,3,3,3,3,3,3,2,3,3,0,0,3,3,3,3,3,3,3,3,3,2,3,2,0,
-0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,3,3,2,2,3,3,3,3,3,3,3,3,3,2,3,3,0,0,3,3,3,3,3,3,3,3,2,3,3,1,0,
-0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,3,3,3,3,3,3,3,3,3,3,3,2,1,
-0,0,0,0,0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,0,0,3,3,3,3,3,3,3,3,3,3,3,2,1,
-0,0,0,0,0,1,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,3,3,3,3,3,3,3,2,2,2,3,1,3,3,1,3,3,3,3,2,2,3,0,2,2,2,3,3,2,1,0,
-0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,
-3,3,3,3,3,3,2,3,3,3,3,3,2,2,3,2,3,3,3,2,1,2,2,0,1,2,2,2,2,2,2,0,
-0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,
-3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,3,0,2,2,3,3,2,1,2,0,
-0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,0,0,0,
-3,3,3,3,3,3,2,3,3,1,2,3,2,2,3,2,3,3,3,3,2,2,3,0,3,2,2,3,1,1,1,0,
-0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,2,3,3,3,3,2,2,2,0,3,3,3,2,2,2,2,0,
-0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,3,3,3,3,3,3,3,3,3,2,3,2,3,3,3,3,3,3,2,3,2,2,0,1,3,2,1,2,2,1,0,
-0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,
-3,3,3,3,3,3,3,3,3,3,3,2,1,1,3,0,1,1,1,1,2,1,1,0,2,2,2,1,2,0,1,0,
-0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,3,3,3,3,3,2,3,3,2,2,2,2,1,3,2,3,2,3,2,1,2,2,0,1,1,2,1,2,1,2,0,
-0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,3,3,3,2,2,2,2,0,2,2,2,2,3,1,1,0,
-0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,
-3,2,3,2,2,3,3,3,3,3,3,3,3,3,1,3,2,0,0,3,3,3,3,2,3,3,3,3,2,3,2,0,
-0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-2,3,3,3,3,3,2,2,3,3,0,2,1,0,3,2,3,2,3,0,0,1,2,0,0,1,0,1,2,1,1,0,
-0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,0,3,0,2,3,3,3,3,2,3,3,3,3,1,2,2,0,0,2,3,2,2,2,3,2,3,2,2,3,0,0,
-0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,2,3,0,2,3,2,3,0,1,2,3,3,2,0,2,3,0,0,2,3,2,2,0,1,3,1,3,2,2,1,0,
-0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,1,3,0,2,3,3,3,3,3,3,3,3,2,1,3,2,0,0,2,2,3,3,3,2,3,3,0,2,2,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,3,3,3,3,3,2,2,3,3,2,2,2,3,3,0,0,1,1,1,1,1,2,0,0,1,1,1,1,0,1,0,
-0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,3,3,3,3,3,2,2,3,3,3,3,3,3,3,0,3,2,3,3,2,3,2,0,2,1,0,1,1,0,1,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,
-3,3,3,3,3,3,2,3,3,3,2,2,2,2,3,1,3,2,3,1,1,2,1,0,2,2,2,2,1,3,1,0,
-0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,
-2,2,3,3,3,3,3,1,2,2,1,3,1,0,3,0,0,3,0,0,0,1,1,0,1,2,1,0,0,0,0,0,
-0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,2,2,1,1,3,3,3,2,2,1,2,2,3,1,1,2,0,0,2,2,1,3,0,0,2,1,1,2,1,1,0,
-0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,2,3,3,3,3,1,2,2,2,1,2,1,3,3,1,1,2,1,2,1,2,2,0,2,0,0,1,1,0,1,0,
-0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-2,3,3,3,3,3,2,1,3,2,2,3,2,0,3,2,0,3,0,1,0,1,1,0,0,1,1,1,1,0,1,0,
-0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,3,2,3,3,3,2,2,2,3,3,1,2,1,2,1,0,1,0,1,1,0,1,0,0,2,1,1,1,0,1,0,
-0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,
-3,1,1,2,1,2,3,3,2,2,1,2,2,3,0,2,1,0,0,2,2,3,2,1,2,2,2,2,2,3,1,0,
-0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,3,3,3,3,1,1,0,1,1,2,2,1,1,3,0,0,1,3,1,1,1,0,0,0,1,0,1,1,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-2,1,3,3,3,2,0,0,0,2,1,0,1,0,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-2,0,1,0,0,2,3,2,2,2,1,2,2,2,1,2,1,0,0,1,1,1,0,2,0,1,1,1,0,0,1,1,
-1,0,0,0,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,
-2,3,3,3,3,0,0,0,0,1,0,0,0,0,3,0,1,2,1,0,0,0,0,0,0,0,1,1,0,0,1,1,
-1,0,1,0,1,2,0,0,1,1,2,1,0,1,1,1,1,0,1,1,1,1,0,1,0,0,1,0,0,1,1,0,
-2,2,3,2,2,2,3,1,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,0,1,0,1,1,1,0,2,1,
-1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,0,1,1,1,0,1,1,0,
-3,3,3,2,2,2,2,3,2,2,1,1,2,2,2,2,1,1,3,1,2,1,2,0,0,1,1,0,1,0,2,1,
-1,1,1,1,1,2,1,0,1,1,1,1,0,1,0,0,1,1,0,0,1,0,1,0,0,1,0,0,0,1,1,0,
-2,0,0,1,0,3,2,2,2,2,1,2,1,2,1,2,0,0,0,2,1,2,2,1,1,2,2,0,1,1,0,2,
-1,1,1,1,1,0,1,1,1,2,1,1,1,2,1,0,1,2,1,1,1,1,0,1,1,1,0,0,1,0,0,1,
-1,3,2,2,2,1,1,1,2,3,0,0,0,0,2,0,2,2,1,0,0,0,0,0,0,1,0,0,0,0,1,1,
-1,0,1,1,0,1,0,1,1,0,1,1,0,2,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,1,1,0,
-2,3,2,3,2,1,2,2,2,2,1,0,0,0,2,0,0,1,1,0,0,0,0,0,0,0,1,1,0,0,2,1,
-1,1,2,1,0,2,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,
-3,0,0,1,0,2,2,2,3,2,2,2,2,2,2,2,0,0,0,2,1,2,1,1,1,2,2,0,0,0,1,2,
-1,1,1,1,1,0,1,2,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,0,1,
-2,3,2,3,3,2,0,1,1,1,0,0,1,0,2,0,1,1,3,1,0,0,0,0,0,0,0,1,0,0,2,1,
-1,1,1,1,1,1,1,0,1,0,1,1,1,1,0,1,1,1,0,0,1,1,0,1,0,0,0,0,0,0,1,0,
-2,3,3,3,3,1,2,2,2,2,0,1,1,0,2,1,1,1,2,1,0,1,1,0,0,1,0,1,0,0,2,0,
-0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-2,3,3,3,2,0,0,1,1,2,2,1,0,0,2,0,1,1,3,0,0,1,0,0,0,0,0,1,0,1,2,1,
-1,1,2,0,1,1,1,0,1,0,1,1,0,1,0,1,1,1,1,0,1,0,0,0,0,0,0,1,0,1,1,0,
-1,3,2,3,2,1,0,0,2,2,2,0,1,0,2,0,1,1,1,0,1,0,0,0,3,0,1,1,0,0,2,1,
-1,1,1,0,1,1,0,0,0,0,1,1,0,1,0,0,2,1,1,0,1,0,0,0,1,0,1,0,0,1,1,0,
-3,1,2,1,1,2,2,2,2,2,2,1,2,2,1,1,0,0,0,2,2,2,0,0,0,1,2,1,0,1,0,1,
-2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,2,1,1,1,0,1,0,1,1,0,1,1,1,0,0,1,
-3,0,0,0,0,2,0,1,1,1,1,1,1,1,0,1,0,0,0,1,1,1,0,1,0,1,1,0,0,1,0,1,
-1,1,0,0,1,0,0,0,1,0,1,1,0,0,1,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,
-1,3,3,2,2,0,0,0,2,2,0,0,0,1,2,0,1,1,2,0,0,0,0,0,0,0,0,1,0,0,2,1,
-0,1,1,0,0,1,1,0,0,0,1,1,0,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,0,
-2,3,2,3,2,0,0,0,0,1,1,0,0,0,2,0,2,0,2,0,0,0,0,0,1,0,0,1,0,0,1,1,
-1,1,2,0,1,2,1,0,1,1,2,1,1,1,1,1,2,1,1,0,1,0,0,1,1,1,1,1,0,1,1,0,
-1,3,2,2,2,1,0,0,2,2,1,0,1,2,2,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,1,
-0,0,1,1,0,1,1,0,0,1,1,0,1,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,
-1,0,0,1,0,2,3,1,2,2,2,2,2,2,1,1,0,0,0,1,0,1,0,2,1,1,1,0,0,0,0,1,
-1,1,0,1,1,0,1,1,1,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,
-2,0,2,0,0,1,0,3,2,1,2,1,2,2,0,1,0,0,0,2,1,0,0,2,1,1,1,1,0,2,0,2,
-2,1,1,1,1,1,1,1,1,1,1,1,1,2,1,0,1,1,1,1,0,0,0,1,1,1,1,0,1,0,0,1,
-1,2,2,2,2,1,0,0,1,0,0,0,0,0,2,0,1,1,1,1,0,0,0,0,1,0,1,2,0,0,2,0,
-1,0,1,1,1,2,1,0,1,0,1,1,0,0,1,0,1,1,1,0,1,0,0,0,1,0,0,1,0,1,1,0,
-2,1,2,2,2,0,3,0,1,1,0,0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
-0,0,0,1,1,1,0,0,1,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,
-1,2,2,3,2,2,0,0,1,1,2,0,1,2,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,1,
-0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,1,1,0,
-2,2,1,1,2,1,2,2,2,2,2,1,2,2,0,1,0,0,0,1,2,2,2,1,2,1,1,1,1,1,2,1,
-1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,0,1,1,1,0,0,0,0,1,1,1,0,1,1,0,0,1,
-1,2,2,2,2,0,1,0,2,2,0,0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,0,
-0,0,1,0,0,1,0,0,0,0,1,0,1,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,
-0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-1,2,2,2,2,0,0,0,2,2,2,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
-0,1,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-1,2,2,2,2,0,0,0,0,1,0,0,1,1,2,0,0,0,0,1,0,1,0,0,1,0,0,2,0,0,0,1,
-0,0,1,0,0,1,0,0,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,
-1,2,2,2,1,1,2,0,2,1,1,1,1,0,2,2,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,
-0,0,1,0,1,1,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,
-1,0,2,1,2,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,
-0,0,1,0,1,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,
-1,0,0,0,0,2,0,1,2,1,0,1,1,1,0,1,0,0,0,1,0,1,0,0,1,0,1,0,0,0,0,1,
-0,0,0,0,0,1,0,0,1,1,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,
-2,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
-1,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,
-2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
-1,1,1,0,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0,
-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
-1,1,0,1,1,0,1,0,1,0,0,0,0,1,1,0,1,1,0,0,0,0,0,1,0,1,1,0,1,0,0,0,
-0,1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,
-)
-
-Koi8rModel = { \
- 'charToOrderMap': KOI8R_CharToOrderMap,
- 'precedenceMatrix': RussianLangModel,
- 'mTypicalPositiveRatio': 0.976601,
- 'keepEnglishLetter': constants.False,
- 'charsetName': "KOI8-R"
-}
-
-Win1251CyrillicModel = { \
- 'charToOrderMap': win1251_CharToOrderMap,
- 'precedenceMatrix': RussianLangModel,
- 'mTypicalPositiveRatio': 0.976601,
- 'keepEnglishLetter': constants.False,
- 'charsetName': "windows-1251"
-}
-
-Latin5CyrillicModel = { \
- 'charToOrderMap': latin5_CharToOrderMap,
- 'precedenceMatrix': RussianLangModel,
- 'mTypicalPositiveRatio': 0.976601,
- 'keepEnglishLetter': constants.False,
- 'charsetName': "ISO-8859-5"
-}
-
-MacCyrillicModel = { \
- 'charToOrderMap': macCyrillic_CharToOrderMap,
- 'precedenceMatrix': RussianLangModel,
- 'mTypicalPositiveRatio': 0.976601,
- 'keepEnglishLetter': constants.False,
- 'charsetName': "MacCyrillic"
-};
-
-Ibm866Model = { \
- 'charToOrderMap': IBM866_CharToOrderMap,
- 'precedenceMatrix': RussianLangModel,
- 'mTypicalPositiveRatio': 0.976601,
- 'keepEnglishLetter': constants.False,
- 'charsetName': "IBM866"
-}
-
-Ibm855Model = { \
- 'charToOrderMap': IBM855_CharToOrderMap,
- 'precedenceMatrix': RussianLangModel,
- 'mTypicalPositiveRatio': 0.976601,
- 'keepEnglishLetter': constants.False,
- 'charsetName': "IBM855"
-}
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/langgreekmodel.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/langgreekmodel.py
deleted file mode 100644
index ec6d49e..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/langgreekmodel.py
+++ /dev/null
@@ -1,225 +0,0 @@
-######################## BEGIN LICENSE BLOCK ########################
-# The Original Code is Mozilla Communicator client code.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 1998
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-# Mark Pilgrim - port to Python
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301 USA
-######################### END LICENSE BLOCK #########################
-
-import constants
-
-# 255: Control characters that usually does not exist in any text
-# 254: Carriage/Return
-# 253: symbol (punctuation) that does not belong to word
-# 252: 0 - 9
-
-# Character Mapping Table:
-Latin7_CharToOrderMap = ( \
-255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10
-253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20
-252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30
-253, 82,100,104, 94, 98,101,116,102,111,187,117, 92, 88,113, 85, # 40
- 79,118,105, 83, 67,114,119, 95, 99,109,188,253,253,253,253,253, # 50
-253, 72, 70, 80, 81, 60, 96, 93, 89, 68,120, 97, 77, 86, 69, 55, # 60
- 78,115, 65, 66, 58, 76,106,103, 87,107,112,253,253,253,253,253, # 70
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 80
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 90
-253,233, 90,253,253,253,253,253,253,253,253,253,253, 74,253,253, # a0
-253,253,253,253,247,248, 61, 36, 46, 71, 73,253, 54,253,108,123, # b0
-110, 31, 51, 43, 41, 34, 91, 40, 52, 47, 44, 53, 38, 49, 59, 39, # c0
- 35, 48,250, 37, 33, 45, 56, 50, 84, 57,120,121, 17, 18, 22, 15, # d0
-124, 1, 29, 20, 21, 3, 32, 13, 25, 5, 11, 16, 10, 6, 30, 4, # e0
- 9, 8, 14, 7, 2, 12, 28, 23, 42, 24, 64, 75, 19, 26, 27,253, # f0
-)
-
-win1253_CharToOrderMap = ( \
-255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10
-253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20
-252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30
-253, 82,100,104, 94, 98,101,116,102,111,187,117, 92, 88,113, 85, # 40
- 79,118,105, 83, 67,114,119, 95, 99,109,188,253,253,253,253,253, # 50
-253, 72, 70, 80, 81, 60, 96, 93, 89, 68,120, 97, 77, 86, 69, 55, # 60
- 78,115, 65, 66, 58, 76,106,103, 87,107,112,253,253,253,253,253, # 70
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 80
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 90
-253,233, 61,253,253,253,253,253,253,253,253,253,253, 74,253,253, # a0
-253,253,253,253,247,253,253, 36, 46, 71, 73,253, 54,253,108,123, # b0
-110, 31, 51, 43, 41, 34, 91, 40, 52, 47, 44, 53, 38, 49, 59, 39, # c0
- 35, 48,250, 37, 33, 45, 56, 50, 84, 57,120,121, 17, 18, 22, 15, # d0
-124, 1, 29, 20, 21, 3, 32, 13, 25, 5, 11, 16, 10, 6, 30, 4, # e0
- 9, 8, 14, 7, 2, 12, 28, 23, 42, 24, 64, 75, 19, 26, 27,253, # f0
-)
-
-# Model Table:
-# total sequences: 100%
-# first 512 sequences: 98.2851%
-# first 1024 sequences:1.7001%
-# rest sequences: 0.0359%
-# negative sequences: 0.0148%
-GreekLangModel = ( \
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,3,2,2,3,3,3,3,3,3,3,3,1,3,3,3,0,2,2,3,3,0,3,0,3,2,0,3,3,3,0,
-3,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,3,3,3,3,3,0,3,3,0,3,2,3,3,0,3,2,3,3,3,0,0,3,0,3,0,3,3,2,0,0,0,
-2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,
-0,2,3,2,2,3,3,3,3,3,3,3,3,0,3,3,3,3,0,2,3,3,0,3,3,3,3,2,3,3,3,0,
-2,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,0,2,1,3,3,3,3,2,3,3,2,3,3,2,0,
-0,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,3,3,3,3,0,3,3,3,3,3,3,0,3,3,0,3,3,3,3,3,3,3,3,3,3,0,3,2,3,3,0,
-2,0,1,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,
-0,3,3,3,3,3,2,3,0,0,0,0,3,3,0,3,1,3,3,3,0,3,3,0,3,3,3,3,0,0,0,0,
-2,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,3,3,3,3,3,0,3,0,3,3,3,3,3,0,3,2,2,2,3,0,2,3,3,3,3,3,2,3,3,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,3,3,3,3,3,3,2,2,2,3,3,3,3,0,3,1,3,3,3,3,2,3,3,3,3,3,3,3,2,2,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,3,3,3,3,3,2,0,3,0,0,0,3,3,2,3,3,3,3,3,0,0,3,2,3,0,2,3,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,3,0,3,3,3,3,0,0,3,3,0,2,3,0,3,0,3,3,3,0,0,3,0,3,0,2,2,3,3,0,0,
-0,0,1,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,3,3,3,3,3,2,0,3,2,3,3,3,3,0,3,3,3,3,3,0,3,3,2,3,2,3,3,2,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,3,3,2,3,2,3,3,3,3,3,3,0,2,3,2,3,2,2,2,3,2,3,3,2,3,0,2,2,2,3,0,
-2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,3,0,0,0,3,3,3,2,3,3,0,0,3,0,3,0,0,0,3,2,0,3,0,3,0,0,2,0,2,0,
-0,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,3,3,3,3,0,3,3,3,3,3,3,0,3,3,0,3,0,0,0,3,3,0,3,3,3,0,0,1,2,3,0,
-3,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,3,3,3,3,3,2,0,0,3,2,2,3,3,0,3,3,3,3,3,2,1,3,0,3,2,3,3,2,1,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,3,3,0,2,3,3,3,3,3,3,0,0,3,0,3,0,0,0,3,3,0,3,2,3,0,0,3,3,3,0,
-3,0,0,0,2,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,3,3,3,3,0,3,3,3,3,3,3,0,0,3,0,3,0,0,0,3,2,0,3,2,3,0,0,3,2,3,0,
-2,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,3,1,2,2,3,3,3,3,3,3,0,2,3,0,3,0,0,0,3,3,0,3,0,2,0,0,2,3,1,0,
-2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,3,0,3,3,3,3,0,3,0,3,3,2,3,0,3,3,3,3,3,3,0,3,3,3,0,2,3,0,0,3,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,3,0,3,3,3,0,0,3,0,0,0,3,3,0,3,0,2,3,3,0,0,3,0,3,0,3,3,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,3,0,0,0,3,3,3,3,3,3,0,0,3,0,2,0,0,0,3,3,0,3,0,3,0,0,2,0,2,0,
-0,0,0,0,1,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,3,3,3,3,3,3,0,3,0,2,0,3,2,0,3,2,3,2,3,0,0,3,2,3,2,3,3,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,3,0,0,2,3,3,3,3,3,0,0,0,3,0,2,1,0,0,3,2,2,2,0,3,0,0,2,2,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,3,0,3,3,3,2,0,3,0,3,0,3,3,0,2,1,2,3,3,0,0,3,0,3,0,3,3,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,2,3,3,3,0,3,3,3,3,3,3,0,2,3,0,3,0,0,0,2,1,0,2,2,3,0,0,2,2,2,0,
-0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,3,0,0,2,3,3,3,2,3,0,0,1,3,0,2,0,0,0,0,3,0,1,0,2,0,0,1,1,1,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,3,3,3,3,3,1,0,3,0,0,0,3,2,0,3,2,3,3,3,0,0,3,0,3,2,2,2,1,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,3,0,3,3,3,0,0,3,0,0,0,0,2,0,2,3,3,2,2,2,2,3,0,2,0,2,2,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,3,3,3,3,2,0,0,0,0,0,0,2,3,0,2,0,2,3,2,0,0,3,0,3,0,3,1,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,3,2,3,3,2,2,3,0,2,0,3,0,0,0,2,0,0,0,0,1,2,0,2,0,2,0,
-0,2,0,2,0,2,2,0,0,1,0,2,2,2,0,2,2,2,0,2,2,2,0,0,2,0,0,1,0,0,0,0,
-0,2,0,3,3,2,0,0,0,0,0,0,1,3,0,2,0,2,2,2,0,0,2,0,3,0,0,2,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,3,0,2,3,2,0,2,2,0,2,0,2,2,0,2,0,2,2,2,0,0,0,0,0,0,2,3,0,0,0,2,
-0,1,2,0,0,0,0,2,2,0,0,0,2,1,0,2,2,0,0,0,0,0,0,1,0,2,0,0,0,0,0,0,
-0,0,2,1,0,2,3,2,2,3,2,3,2,0,0,3,3,3,0,0,3,2,0,0,0,1,1,0,2,0,2,2,
-0,2,0,2,0,2,2,0,0,2,0,2,2,2,0,2,2,2,2,0,0,2,0,0,0,2,0,1,0,0,0,0,
-0,3,0,3,3,2,2,0,3,0,0,0,2,2,0,2,2,2,1,2,0,0,1,2,2,0,0,3,0,0,0,2,
-0,1,2,0,0,0,1,2,0,0,0,0,0,0,0,2,2,0,1,0,0,2,0,0,0,2,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,2,3,3,2,2,0,0,0,2,0,2,3,3,0,2,0,0,0,0,0,0,2,2,2,0,2,2,0,2,0,2,
-0,2,2,0,0,2,2,2,2,1,0,0,2,2,0,2,0,0,2,0,0,0,0,0,0,2,0,0,0,0,0,0,
-0,2,0,3,2,3,0,0,0,3,0,0,2,2,0,2,0,2,2,2,0,0,2,0,0,0,0,0,0,0,0,2,
-0,0,2,2,0,0,2,2,2,0,0,0,0,0,0,2,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,2,0,0,3,2,0,2,2,2,2,2,0,0,0,2,0,0,0,0,2,0,1,0,0,2,0,1,0,0,0,
-0,2,2,2,0,2,2,0,1,2,0,2,2,2,0,2,2,2,2,1,2,2,0,0,2,0,0,0,0,0,0,0,
-0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,
-0,2,0,2,0,2,2,0,0,0,0,1,2,1,0,0,2,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,3,2,3,0,0,2,0,0,0,2,2,0,2,0,0,0,1,0,0,2,0,2,0,2,2,0,0,0,0,
-0,0,2,0,0,0,0,2,2,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,
-0,2,2,3,2,2,0,0,0,0,0,0,1,3,0,2,0,2,2,0,0,0,1,0,2,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,2,0,2,0,3,2,0,2,0,0,0,0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
-0,0,2,0,0,0,0,1,1,0,0,2,1,2,0,2,2,0,1,0,0,1,0,0,0,2,0,0,0,0,0,0,
-0,3,0,2,2,2,0,0,2,0,0,0,2,0,0,0,2,3,0,2,0,0,0,0,0,0,2,2,0,0,0,2,
-0,1,2,0,0,0,1,2,2,1,0,0,0,2,0,0,2,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,2,1,2,0,2,2,0,2,0,0,2,0,0,0,0,1,2,1,0,2,1,0,0,0,0,0,0,0,0,0,0,
-0,0,2,0,0,0,3,1,2,2,0,2,0,0,0,0,2,0,0,0,2,0,0,3,0,0,0,0,2,2,2,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,2,1,0,2,0,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,1,0,0,0,0,0,0,2,
-0,2,2,0,0,2,2,2,2,2,0,1,2,0,0,0,2,2,0,1,0,2,0,0,2,2,0,0,0,0,0,0,
-0,0,0,0,1,0,0,0,0,0,0,0,3,0,0,2,0,0,0,0,0,0,0,0,2,0,2,0,0,0,0,2,
-0,1,2,0,0,0,0,2,2,1,0,1,0,1,0,2,2,2,1,0,0,0,0,0,0,1,0,0,0,0,0,0,
-0,2,0,1,2,0,0,0,0,0,0,0,0,0,0,2,0,0,2,2,0,0,0,0,1,0,0,0,0,0,0,2,
-0,2,2,0,0,0,0,2,2,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,2,0,0,0,
-0,2,2,2,2,0,0,0,3,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,2,0,0,0,0,0,0,1,
-0,0,2,0,0,0,0,1,2,0,0,0,0,0,0,2,2,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,
-0,2,0,2,2,2,0,0,2,0,0,0,0,0,0,0,2,2,2,0,0,0,2,0,0,0,0,0,0,0,0,2,
-0,0,1,0,0,0,0,2,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,
-0,3,0,2,0,0,0,0,0,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,2,0,0,0,0,2,
-0,0,2,0,0,0,0,2,2,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,2,0,2,2,1,0,0,0,0,0,0,2,0,0,2,0,2,2,2,0,0,0,0,0,0,2,0,0,0,0,2,
-0,0,2,0,0,2,0,2,2,0,0,0,0,2,0,2,0,0,0,0,0,2,0,0,0,2,0,0,0,0,0,0,
-0,0,3,0,0,0,2,2,0,2,2,0,0,0,0,0,2,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,2,0,0,0,0,0,
-0,2,2,2,2,2,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,
-0,0,0,0,0,0,0,2,1,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,2,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,
-0,2,0,0,0,2,0,0,0,0,0,1,0,0,0,0,2,2,0,0,0,1,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,2,0,0,0,
-0,2,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,2,0,2,0,0,0,
-0,0,0,0,0,0,0,0,2,1,0,0,0,0,0,0,2,0,0,0,1,2,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-)
-
-Latin7GreekModel = { \
- 'charToOrderMap': Latin7_CharToOrderMap,
- 'precedenceMatrix': GreekLangModel,
- 'mTypicalPositiveRatio': 0.982851,
- 'keepEnglishLetter': constants.False,
- 'charsetName': "ISO-8859-7"
-}
-
-Win1253GreekModel = { \
- 'charToOrderMap': win1253_CharToOrderMap,
- 'precedenceMatrix': GreekLangModel,
- 'mTypicalPositiveRatio': 0.982851,
- 'keepEnglishLetter': constants.False,
- 'charsetName': "windows-1253"
-}
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/langhebrewmodel.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/langhebrewmodel.py
deleted file mode 100644
index a8bcc65..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/langhebrewmodel.py
+++ /dev/null
@@ -1,201 +0,0 @@
-######################## BEGIN LICENSE BLOCK ########################
-# The Original Code is Mozilla Universal charset detector code.
-#
-# The Initial Developer of the Original Code is
-# Simon Montagu
-# Portions created by the Initial Developer are Copyright (C) 2005
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-# Mark Pilgrim - port to Python
-# Shy Shalom - original C code
-# Shoshannah Forbes - original C code (?)
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301 USA
-######################### END LICENSE BLOCK #########################
-
-import constants
-
-# 255: Control characters that usually does not exist in any text
-# 254: Carriage/Return
-# 253: symbol (punctuation) that does not belong to word
-# 252: 0 - 9
-
-# Windows-1255 language model
-# Character Mapping Table:
-win1255_CharToOrderMap = ( \
-255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10
-253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20
-252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30
-253, 69, 91, 79, 80, 92, 89, 97, 90, 68,111,112, 82, 73, 95, 85, # 40
- 78,121, 86, 71, 67,102,107, 84,114,103,115,253,253,253,253,253, # 50
-253, 50, 74, 60, 61, 42, 76, 70, 64, 53,105, 93, 56, 65, 54, 49, # 60
- 66,110, 51, 43, 44, 63, 81, 77, 98, 75,108,253,253,253,253,253, # 70
-124,202,203,204,205, 40, 58,206,207,208,209,210,211,212,213,214,
-215, 83, 52, 47, 46, 72, 32, 94,216,113,217,109,218,219,220,221,
- 34,116,222,118,100,223,224,117,119,104,125,225,226, 87, 99,227,
-106,122,123,228, 55,229,230,101,231,232,120,233, 48, 39, 57,234,
- 30, 59, 41, 88, 33, 37, 36, 31, 29, 35,235, 62, 28,236,126,237,
-238, 38, 45,239,240,241,242,243,127,244,245,246,247,248,249,250,
- 9, 8, 20, 16, 3, 2, 24, 14, 22, 1, 25, 15, 4, 11, 6, 23,
- 12, 19, 13, 26, 18, 27, 21, 17, 7, 10, 5,251,252,128, 96,253,
-)
-
-# Model Table:
-# total sequences: 100%
-# first 512 sequences: 98.4004%
-# first 1024 sequences: 1.5981%
-# rest sequences: 0.087%
-# negative sequences: 0.0015%
-HebrewLangModel = ( \
-0,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,2,3,2,1,2,0,1,0,0,
-3,0,3,1,0,0,1,3,2,0,1,1,2,0,2,2,2,1,1,1,1,2,1,1,1,2,0,0,2,2,0,1,
-3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,
-1,2,1,2,1,2,0,0,2,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,
-3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,
-1,2,1,3,1,1,0,0,2,0,0,0,1,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,
-3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,0,1,2,2,1,3,
-1,2,1,1,2,2,0,0,2,2,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,1,0,1,1,0,
-3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,3,2,
-1,2,1,2,2,2,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,
-3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,3,2,2,3,2,2,2,1,2,2,2,2,
-1,2,1,1,2,2,0,1,2,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,
-3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,0,2,2,2,2,2,
-0,2,0,2,2,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,
-3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,0,2,2,2,
-0,2,1,2,2,2,0,0,2,1,0,0,0,0,1,0,1,0,0,0,0,0,0,2,0,0,0,0,0,0,1,0,
-3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,1,2,3,2,2,2,
-1,2,1,2,2,2,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,
-3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,1,0,2,0,2,
-0,2,1,2,2,2,0,0,1,2,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,2,0,0,1,0,
-3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,3,2,2,3,2,1,2,1,1,1,
-0,1,1,1,1,1,3,0,1,0,0,0,0,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,
-3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,0,
-0,0,1,0,0,0,0,0,2,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,
-0,2,0,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,
-3,3,3,3,3,3,3,3,3,2,3,3,3,2,1,2,3,3,2,3,3,3,3,2,3,2,1,2,0,2,1,2,
-0,2,0,2,2,2,0,0,1,2,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,
-3,3,3,3,3,3,3,3,3,2,3,3,3,1,2,2,3,3,2,3,2,3,2,2,3,1,2,2,0,2,2,2,
-0,2,1,2,2,2,0,0,1,2,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,1,0,
-3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,2,2,2,3,3,3,3,1,3,2,2,2,
-0,2,0,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,
-3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,2,3,2,2,2,1,2,2,0,2,2,2,2,
-0,2,0,2,2,2,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,
-3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,1,3,2,3,3,2,3,3,2,2,1,2,2,2,2,2,2,
-0,2,1,2,1,2,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,
-3,3,3,3,3,3,2,3,2,3,3,2,3,3,3,3,2,3,2,3,3,3,3,3,2,2,2,2,2,2,2,1,
-0,2,0,1,2,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,
-3,3,3,3,3,3,3,3,3,2,1,2,3,3,3,3,3,3,3,2,3,2,3,2,1,2,3,0,2,1,2,2,
-0,2,1,1,2,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,2,0,
-3,3,3,3,3,3,3,3,3,2,3,3,3,3,2,1,3,1,2,2,2,1,2,3,3,1,2,1,2,2,2,2,
-0,1,1,1,1,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,0,0,
-3,3,3,3,3,3,3,3,3,3,0,2,3,3,3,1,3,3,3,1,2,2,2,2,1,1,2,2,2,2,2,2,
-0,2,0,1,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,
-3,3,3,3,3,3,2,3,3,3,2,2,3,3,3,2,1,2,3,2,3,2,2,2,2,1,2,1,1,1,2,2,
-0,2,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,
-3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,1,0,0,0,0,0,
-1,0,1,0,0,0,0,0,2,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,3,3,3,3,2,3,3,2,3,1,2,2,2,2,3,2,3,1,1,2,2,1,2,2,1,1,0,2,2,2,2,
-0,1,0,1,2,2,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,
-3,0,0,1,1,0,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,2,0,
-0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,0,1,0,1,0,1,1,0,1,1,0,0,0,1,1,0,1,1,1,0,0,0,0,0,0,1,0,0,0,0,0,
-0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,0,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,
-3,2,2,1,2,2,2,2,2,2,2,1,2,2,1,2,2,1,1,1,1,1,1,1,1,2,1,1,0,3,3,3,
-0,3,0,2,2,2,2,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,
-2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,2,2,2,1,1,1,2,0,1,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,0,0,0,0,0,
-0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-2,3,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,0,2,1,0,
-0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,
-0,3,1,1,2,2,2,2,2,1,2,2,2,1,1,2,2,2,2,2,2,2,1,2,2,1,0,1,1,1,1,0,
-0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,2,1,1,1,1,2,1,1,2,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0,
-0,0,2,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,0,0,
-2,1,1,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,1,2,1,2,1,1,1,1,0,0,0,0,
-0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-1,2,1,2,2,2,2,2,2,2,2,2,2,1,2,1,2,1,1,2,1,1,1,2,1,2,1,2,0,1,0,1,
-0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,3,1,2,2,2,1,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,2,1,2,1,1,0,1,0,1,
-0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-2,1,2,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,
-0,2,0,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,
-3,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-2,1,1,1,1,1,1,1,0,1,1,0,1,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,2,0,1,1,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,0,1,1,0,0,
-0,1,1,1,2,1,2,2,2,0,2,0,2,0,1,1,2,1,1,1,1,2,1,0,1,1,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,
-1,0,1,0,0,0,0,0,1,0,1,2,2,0,1,0,0,1,1,2,2,1,2,0,2,0,0,0,1,2,0,1,
-2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,2,0,2,1,2,0,2,0,0,1,1,1,1,1,1,0,1,0,0,0,1,0,0,1,
-2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,1,0,0,0,0,0,1,0,2,1,1,0,1,0,0,1,1,1,2,2,0,0,1,0,0,0,1,0,0,1,
-1,1,2,1,0,1,1,1,0,1,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,2,2,1,
-0,2,0,1,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-2,1,0,0,1,0,1,1,1,1,0,0,0,0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-1,1,1,1,1,1,1,1,1,2,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,1,1,0,1,1,0,1,0,0,0,1,1,0,1,
-2,0,1,0,1,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,0,1,1,2,1,1,2,0,1,0,0,0,1,1,0,1,
-1,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,1,0,1,1,2,0,1,0,0,0,0,2,1,1,2,0,2,0,0,0,1,1,0,1,
-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,1,0,2,1,1,0,1,0,0,2,2,1,2,1,1,0,1,0,0,0,1,1,0,1,
-2,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,1,2,2,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,1,0,1,
-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,1,2,2,0,0,0,0,2,1,1,1,0,2,1,1,0,0,0,2,1,0,1,
-1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,1,0,1,1,2,0,1,0,0,1,1,0,2,1,1,0,1,0,0,0,1,1,0,1,
-2,2,1,1,1,0,1,1,0,1,1,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,1,0,2,1,1,0,1,0,0,1,1,0,1,2,1,0,2,0,0,0,1,1,0,1,
-2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,
-0,1,0,0,2,0,2,1,1,0,1,0,1,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,1,0,1,1,2,0,1,0,0,1,1,1,0,1,0,0,1,0,0,0,1,0,0,1,
-1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-1,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,0,2,1,1,1,1,1,0,1,0,0,0,0,1,0,1,
-0,1,1,1,2,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,1,2,1,0,0,0,0,0,1,1,1,1,1,0,1,0,0,0,1,1,0,0,
-)
-
-Win1255HebrewModel = { \
- 'charToOrderMap': win1255_CharToOrderMap,
- 'precedenceMatrix': HebrewLangModel,
- 'mTypicalPositiveRatio': 0.984004,
- 'keepEnglishLetter': constants.False,
- 'charsetName': "windows-1255"
-}
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/langhungarianmodel.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/langhungarianmodel.py
deleted file mode 100644
index d635f03..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/langhungarianmodel.py
+++ /dev/null
@@ -1,225 +0,0 @@
-######################## BEGIN LICENSE BLOCK ########################
-# The Original Code is Mozilla Communicator client code.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 1998
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-# Mark Pilgrim - port to Python
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301 USA
-######################### END LICENSE BLOCK #########################
-
-import constants
-
-# 255: Control characters that usually does not exist in any text
-# 254: Carriage/Return
-# 253: symbol (punctuation) that does not belong to word
-# 252: 0 - 9
-
-# Character Mapping Table:
-Latin2_HungarianCharToOrderMap = ( \
-255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10
-253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20
-252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30
-253, 28, 40, 54, 45, 32, 50, 49, 38, 39, 53, 36, 41, 34, 35, 47,
- 46, 71, 43, 33, 37, 57, 48, 64, 68, 55, 52,253,253,253,253,253,
-253, 2, 18, 26, 17, 1, 27, 12, 20, 9, 22, 7, 6, 13, 4, 8,
- 23, 67, 10, 5, 3, 21, 19, 65, 62, 16, 11,253,253,253,253,253,
-159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,
-175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,
-191,192,193,194,195,196,197, 75,198,199,200,201,202,203,204,205,
- 79,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,
-221, 51, 81,222, 78,223,224,225,226, 44,227,228,229, 61,230,231,
-232,233,234, 58,235, 66, 59,236,237,238, 60, 69, 63,239,240,241,
- 82, 14, 74,242, 70, 80,243, 72,244, 15, 83, 77, 84, 30, 76, 85,
-245,246,247, 25, 73, 42, 24,248,249,250, 31, 56, 29,251,252,253,
-)
-
-win1250HungarianCharToOrderMap = ( \
-255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10
-253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20
-252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30
-253, 28, 40, 54, 45, 32, 50, 49, 38, 39, 53, 36, 41, 34, 35, 47,
- 46, 72, 43, 33, 37, 57, 48, 64, 68, 55, 52,253,253,253,253,253,
-253, 2, 18, 26, 17, 1, 27, 12, 20, 9, 22, 7, 6, 13, 4, 8,
- 23, 67, 10, 5, 3, 21, 19, 65, 62, 16, 11,253,253,253,253,253,
-161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,
-177,178,179,180, 78,181, 69,182,183,184,185,186,187,188,189,190,
-191,192,193,194,195,196,197, 76,198,199,200,201,202,203,204,205,
- 81,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,
-221, 51, 83,222, 80,223,224,225,226, 44,227,228,229, 61,230,231,
-232,233,234, 58,235, 66, 59,236,237,238, 60, 70, 63,239,240,241,
- 84, 14, 75,242, 71, 82,243, 73,244, 15, 85, 79, 86, 30, 77, 87,
-245,246,247, 25, 74, 42, 24,248,249,250, 31, 56, 29,251,252,253,
-)
-
-# Model Table:
-# total sequences: 100%
-# first 512 sequences: 94.7368%
-# first 1024 sequences:5.2623%
-# rest sequences: 0.8894%
-# negative sequences: 0.0009%
-HungarianLangModel = ( \
-0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
-3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,2,2,3,3,1,1,2,2,2,2,2,1,2,
-3,2,2,3,3,3,3,3,2,3,3,3,3,3,3,1,2,3,3,3,3,2,3,3,1,1,3,3,0,1,1,1,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,
-3,2,1,3,3,3,3,3,2,3,3,3,3,3,1,1,2,3,3,3,3,3,3,3,1,1,3,2,0,1,1,1,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,
-3,3,3,3,3,3,3,3,3,3,3,1,1,2,3,3,3,1,3,3,3,3,3,1,3,3,2,2,0,3,2,3,
-0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,
-3,3,3,3,3,3,2,3,3,3,2,3,3,2,3,3,3,3,3,2,3,3,2,2,3,2,3,2,0,3,2,2,
-0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,
-3,3,3,3,3,3,2,3,3,3,3,3,2,3,3,3,1,2,3,2,2,3,1,2,3,3,2,2,0,3,3,3,
-0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,
-3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,3,2,3,3,3,3,2,3,3,3,3,0,2,3,2,
-0,0,0,1,1,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,
-3,3,3,3,3,3,3,3,3,3,3,1,1,1,3,3,2,1,3,2,2,3,2,1,3,2,2,1,0,3,3,1,
-0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,
-3,2,2,3,3,3,3,3,1,2,3,3,3,3,1,2,1,3,3,3,3,2,2,3,1,1,3,2,0,1,1,1,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,
-3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,2,1,3,3,3,3,3,2,2,1,3,3,3,0,1,1,2,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,
-3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,2,3,3,3,2,0,3,2,3,
-0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,1,0,
-3,3,3,3,3,3,2,3,3,3,2,3,2,3,3,3,1,3,2,2,2,3,1,1,3,3,1,1,0,3,3,2,
-0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,
-3,3,3,3,3,3,3,2,3,3,3,2,3,2,3,3,3,2,3,3,3,3,3,1,2,3,2,2,0,2,2,2,
-0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,
-3,3,3,2,2,2,3,1,3,3,2,2,1,3,3,3,1,1,3,1,2,3,2,3,2,2,2,1,0,2,2,2,
-0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,
-3,1,1,3,3,3,3,3,1,2,3,3,3,3,1,2,1,3,3,3,2,2,3,2,1,0,3,2,0,1,1,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,1,1,3,3,3,3,3,1,2,3,3,3,3,1,1,0,3,3,3,3,0,2,3,0,0,2,1,0,1,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,3,3,3,3,3,2,2,3,3,2,2,2,2,3,3,0,1,2,3,2,3,2,2,3,2,1,2,0,2,2,2,
-0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,
-3,3,3,3,3,3,1,2,3,3,3,2,1,2,3,3,2,2,2,3,2,3,3,1,3,3,1,1,0,2,3,2,
-0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,
-3,3,3,1,2,2,2,2,3,3,3,1,1,1,3,3,1,1,3,1,1,3,2,1,2,3,1,1,0,2,2,2,
-0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,
-3,3,3,2,1,2,1,1,3,3,1,1,1,1,3,3,1,1,2,2,1,2,1,1,2,2,1,1,0,2,2,1,
-0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,
-3,3,3,1,1,2,1,1,3,3,1,0,1,1,3,3,2,0,1,1,2,3,1,0,2,2,1,0,0,1,3,2,
-0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,
-3,2,1,3,3,3,3,3,1,2,3,2,3,3,2,1,1,3,2,3,2,1,2,2,0,1,2,1,0,0,1,1,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,
-3,3,3,3,2,2,2,2,3,1,2,2,1,1,3,3,0,3,2,1,2,3,2,1,3,3,1,1,0,2,1,3,
-0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,
-3,3,3,2,2,2,3,2,3,3,3,2,1,1,3,3,1,1,1,2,2,3,2,3,2,2,2,1,0,2,2,1,
-0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,
-1,0,0,3,3,3,3,3,0,0,3,3,2,3,0,0,0,2,3,3,1,0,1,2,0,0,1,1,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,1,2,3,3,3,3,3,1,2,3,3,2,2,1,1,0,3,3,2,2,1,2,2,1,0,2,2,0,1,1,1,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,3,2,2,1,3,1,2,3,3,2,2,1,1,2,2,1,1,1,1,3,2,1,1,1,1,2,1,0,1,2,1,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,
-2,3,3,1,1,1,1,1,3,3,3,0,1,1,3,3,1,1,1,1,1,2,2,0,3,1,1,2,0,2,1,1,
-0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,
-3,1,0,1,2,1,2,2,0,1,2,3,1,2,0,0,0,2,1,1,1,1,1,2,0,0,1,1,0,0,0,0,
-1,2,1,2,2,2,1,2,1,2,0,2,0,2,2,1,1,2,1,1,2,1,1,1,0,1,0,0,0,1,1,0,
-1,1,1,2,3,2,3,3,0,1,2,2,3,1,0,1,0,2,1,2,2,0,1,1,0,0,1,1,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-1,0,0,3,3,2,2,1,0,0,3,2,3,2,0,0,0,1,1,3,0,0,1,1,0,0,2,1,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,1,1,2,2,3,3,1,0,1,3,2,3,1,1,1,0,1,1,1,1,1,3,1,0,0,2,2,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,1,1,1,2,2,2,1,0,1,2,3,3,2,0,0,0,2,1,1,1,2,1,1,1,0,1,1,1,0,0,0,
-1,2,2,2,2,2,1,1,1,2,0,2,1,1,1,1,1,2,1,1,1,1,1,1,0,1,1,1,0,0,1,1,
-3,2,2,1,0,0,1,1,2,2,0,3,0,1,2,1,1,0,0,1,1,1,0,1,1,1,1,0,2,1,1,1,
-2,2,1,1,1,2,1,2,1,1,1,1,1,1,1,2,1,1,1,2,3,1,1,1,1,1,1,1,1,1,0,1,
-2,3,3,0,1,0,0,0,3,3,1,0,0,1,2,2,1,0,0,0,0,2,0,0,1,1,1,0,2,1,1,1,
-2,1,1,1,1,1,1,2,1,1,0,1,1,0,1,1,1,0,1,2,1,1,0,1,1,1,1,1,1,1,0,1,
-2,3,3,0,1,0,0,0,2,2,0,0,0,0,1,2,2,0,0,0,0,1,0,0,1,1,0,0,2,0,1,0,
-2,1,1,1,1,2,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,2,0,1,1,1,1,1,0,1,
-3,2,2,0,1,0,1,0,2,3,2,0,0,1,2,2,1,0,0,1,1,1,0,0,2,1,0,1,2,2,1,1,
-2,1,1,1,1,1,1,2,1,1,1,1,1,1,0,2,1,0,1,1,0,1,1,1,0,1,1,2,1,1,0,1,
-2,2,2,0,0,1,0,0,2,2,1,1,0,0,2,1,1,0,0,0,1,2,0,0,2,1,0,0,2,1,1,1,
-2,1,1,1,1,2,1,2,1,1,1,2,2,1,1,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,0,1,
-1,2,3,0,0,0,1,0,3,2,1,0,0,1,2,1,1,0,0,0,0,2,1,0,1,1,0,0,2,1,2,1,
-1,1,0,0,0,1,0,1,1,1,1,1,2,0,0,1,0,0,0,2,0,0,1,1,1,1,1,1,1,1,0,1,
-3,0,0,2,1,2,2,1,0,0,2,1,2,2,0,0,0,2,1,1,1,0,1,1,0,0,1,1,2,0,0,0,
-1,2,1,2,2,1,1,2,1,2,0,1,1,1,1,1,1,1,1,1,2,1,1,0,0,1,1,1,1,0,0,1,
-1,3,2,0,0,0,1,0,2,2,2,0,0,0,2,2,1,0,0,0,0,3,1,1,1,1,0,0,2,1,1,1,
-2,1,0,1,1,1,0,1,1,1,1,1,1,1,0,2,1,0,0,1,0,1,1,0,1,1,1,1,1,1,0,1,
-2,3,2,0,0,0,1,0,2,2,0,0,0,0,2,1,1,0,0,0,0,2,1,0,1,1,0,0,2,1,1,0,
-2,1,1,1,1,2,1,2,1,2,0,1,1,1,0,2,1,1,1,2,1,1,1,1,0,1,1,1,1,1,0,1,
-3,1,1,2,2,2,3,2,1,1,2,2,1,1,0,1,0,2,2,1,1,1,1,1,0,0,1,1,0,1,1,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-2,2,2,0,0,0,0,0,2,2,0,0,0,0,2,2,1,0,0,0,1,1,0,0,1,2,0,0,2,1,1,1,
-2,2,1,1,1,2,1,2,1,1,0,1,1,1,1,2,1,1,1,2,1,1,1,1,0,1,2,1,1,1,0,1,
-1,0,0,1,2,3,2,1,0,0,2,0,1,1,0,0,0,1,1,1,1,0,1,1,0,0,1,0,0,0,0,0,
-1,2,1,2,1,2,1,1,1,2,0,2,1,1,1,0,1,2,0,0,1,1,1,0,0,0,0,0,0,0,0,0,
-2,3,2,0,0,0,0,0,1,1,2,1,0,0,1,1,1,0,0,0,0,2,0,0,1,1,0,0,2,1,1,1,
-2,1,1,1,1,1,1,2,1,0,1,1,1,1,0,2,1,1,1,1,1,1,0,1,0,1,1,1,1,1,0,1,
-1,2,2,0,1,1,1,0,2,2,2,0,0,0,3,2,1,0,0,0,1,1,0,0,1,1,0,1,1,1,0,0,
-1,1,0,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,2,1,1,1,0,0,1,1,1,0,1,0,1,
-2,1,0,2,1,1,2,2,1,1,2,1,1,1,0,0,0,1,1,0,1,1,1,1,0,0,1,1,1,0,0,0,
-1,2,2,2,2,2,1,1,1,2,0,2,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,0,1,0,
-1,2,3,0,0,0,1,0,2,2,0,0,0,0,2,2,0,0,0,0,0,1,0,0,1,0,0,0,2,0,1,0,
-2,1,1,1,1,1,0,2,0,0,0,1,2,1,1,1,1,0,1,2,0,1,0,1,0,1,1,1,0,1,0,1,
-2,2,2,0,0,0,1,0,2,1,2,0,0,0,1,1,2,0,0,0,0,1,0,0,1,1,0,0,2,1,0,1,
-2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,0,1,1,1,1,1,0,1,
-1,2,2,0,0,0,1,0,2,2,2,0,0,0,1,1,0,0,0,0,0,1,1,0,2,0,0,1,1,1,0,1,
-1,0,1,1,1,1,1,1,0,1,1,1,1,0,0,1,0,0,1,1,0,1,0,1,1,1,1,1,0,0,0,1,
-1,0,0,1,0,1,2,1,0,0,1,1,1,2,0,0,0,1,1,0,1,0,1,1,0,0,1,0,0,0,0,0,
-0,2,1,2,1,1,1,1,1,2,0,2,0,1,1,0,1,2,1,0,1,1,1,0,0,0,0,0,0,1,0,0,
-2,1,1,0,1,2,0,0,1,1,1,0,0,0,1,1,0,0,0,0,0,1,0,0,1,0,0,0,2,1,0,1,
-2,2,1,1,1,1,1,2,1,1,0,1,1,1,1,2,1,1,1,2,1,1,0,1,0,1,1,1,1,1,0,1,
-1,2,2,0,0,0,0,0,1,1,0,0,0,0,2,1,0,0,0,0,0,2,0,0,2,2,0,0,2,0,0,1,
-2,1,1,1,1,1,1,1,0,1,1,0,1,1,0,1,0,0,0,1,1,1,1,0,0,1,1,1,1,0,0,1,
-1,1,2,0,0,3,1,0,2,1,1,1,0,0,1,1,1,0,0,0,1,1,0,0,0,1,0,0,1,0,1,0,
-1,2,1,0,1,1,1,2,1,1,0,1,1,1,1,1,0,0,0,1,1,1,1,1,0,1,0,0,0,1,0,0,
-2,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,2,0,0,0,
-2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,1,1,0,0,1,1,1,1,1,0,1,
-2,1,1,1,2,1,1,1,0,1,1,2,1,0,0,0,0,1,1,1,1,0,1,0,0,0,0,1,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-1,1,0,1,1,1,1,1,0,0,1,1,2,1,0,0,0,1,1,0,0,0,1,1,0,0,1,0,1,0,0,0,
-1,2,1,1,1,1,1,1,1,1,0,1,0,1,1,1,1,1,1,0,1,1,1,0,0,0,0,0,0,1,0,0,
-2,0,0,0,1,1,1,1,0,0,1,1,0,0,0,0,0,1,1,1,2,0,0,1,0,0,1,0,1,0,0,0,
-0,1,1,1,1,1,1,1,1,2,0,1,1,1,1,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0,
-1,0,0,1,1,1,1,1,0,0,2,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,
-0,1,1,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,
-1,0,0,1,1,1,0,0,0,0,1,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,
-0,1,1,1,1,1,0,0,1,1,0,1,0,1,0,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0,
-0,0,0,1,0,0,0,0,0,0,1,1,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,1,1,1,0,1,0,0,1,1,0,1,0,1,1,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0,
-2,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,0,0,1,0,0,1,0,1,0,1,1,1,0,0,1,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-1,0,0,1,1,1,1,0,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,
-0,1,1,1,1,1,1,0,1,1,0,1,0,1,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,
-)
-
-Latin2HungarianModel = { \
- 'charToOrderMap': Latin2_HungarianCharToOrderMap,
- 'precedenceMatrix': HungarianLangModel,
- 'mTypicalPositiveRatio': 0.947368,
- 'keepEnglishLetter': constants.True,
- 'charsetName': "ISO-8859-2"
-}
-
-Win1250HungarianModel = { \
- 'charToOrderMap': win1250HungarianCharToOrderMap,
- 'precedenceMatrix': HungarianLangModel,
- 'mTypicalPositiveRatio': 0.947368,
- 'keepEnglishLetter': constants.True,
- 'charsetName': "windows-1250"
-}
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/langthaimodel.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/langthaimodel.py
deleted file mode 100644
index 96ec054..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/langthaimodel.py
+++ /dev/null
@@ -1,200 +0,0 @@
-######################## BEGIN LICENSE BLOCK ########################
-# The Original Code is Mozilla Communicator client code.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 1998
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-# Mark Pilgrim - port to Python
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301 USA
-######################### END LICENSE BLOCK #########################
-
-import constants
-
-# 255: Control characters that usually does not exist in any text
-# 254: Carriage/Return
-# 253: symbol (punctuation) that does not belong to word
-# 252: 0 - 9
-
-# The following result for thai was collected from a limited sample (1M).
-
-# Character Mapping Table:
-TIS620CharToOrderMap = ( \
-255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10
-253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20
-252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30
-253,182,106,107,100,183,184,185,101, 94,186,187,108,109,110,111, # 40
-188,189,190, 89, 95,112,113,191,192,193,194,253,253,253,253,253, # 50
-253, 64, 72, 73,114, 74,115,116,102, 81,201,117, 90,103, 78, 82, # 60
- 96,202, 91, 79, 84,104,105, 97, 98, 92,203,253,253,253,253,253, # 70
-209,210,211,212,213, 88,214,215,216,217,218,219,220,118,221,222,
-223,224, 99, 85, 83,225,226,227,228,229,230,231,232,233,234,235,
-236, 5, 30,237, 24,238, 75, 8, 26, 52, 34, 51,119, 47, 58, 57,
- 49, 53, 55, 43, 20, 19, 44, 14, 48, 3, 17, 25, 39, 62, 31, 54,
- 45, 9, 16, 2, 61, 15,239, 12, 42, 46, 18, 21, 76, 4, 66, 63,
- 22, 10, 1, 36, 23, 13, 40, 27, 32, 35, 86,240,241,242,243,244,
- 11, 28, 41, 29, 33,245, 50, 37, 6, 7, 67, 77, 38, 93,246,247,
- 68, 56, 59, 65, 69, 60, 70, 80, 71, 87,248,249,250,251,252,253,
-)
-
-# Model Table:
-# total sequences: 100%
-# first 512 sequences: 92.6386%
-# first 1024 sequences:7.3177%
-# rest sequences: 1.0230%
-# negative sequences: 0.0436%
-ThaiLangModel = ( \
-0,1,3,3,3,3,0,0,3,3,0,3,3,0,3,3,3,3,3,3,3,3,0,0,3,3,3,0,3,3,3,3,
-0,3,3,0,0,0,1,3,0,3,3,2,3,3,0,1,2,3,3,3,3,0,2,0,2,0,0,3,2,1,2,2,
-3,0,3,3,2,3,0,0,3,3,0,3,3,0,3,3,3,3,3,3,3,3,3,0,3,2,3,0,2,2,2,3,
-0,2,3,0,0,0,0,1,0,1,2,3,1,1,3,2,2,0,1,1,0,0,1,0,0,0,0,0,0,0,1,1,
-3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,3,3,2,3,2,3,3,2,2,2,
-3,1,2,3,0,3,3,2,2,1,2,3,3,1,2,0,1,3,0,1,0,0,1,0,0,0,0,0,0,0,1,1,
-3,3,2,2,3,3,3,3,1,2,3,3,3,3,3,2,2,2,2,3,3,2,2,3,3,2,2,3,2,3,2,2,
-3,3,1,2,3,1,2,2,3,3,1,0,2,1,0,0,3,1,2,1,0,0,1,0,0,0,0,0,0,1,0,1,
-3,3,3,3,3,3,2,2,3,3,3,3,2,3,2,2,3,3,2,2,3,2,2,2,2,1,1,3,1,2,1,1,
-3,2,1,0,2,1,0,1,0,1,1,0,1,1,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,
-3,3,3,2,3,2,3,3,2,2,3,2,3,3,2,3,1,1,2,3,2,2,2,3,2,2,2,2,2,1,2,1,
-2,2,1,1,3,3,2,1,0,1,2,2,0,1,3,0,0,0,1,1,0,0,0,0,0,2,3,0,0,2,1,1,
-3,3,2,3,3,2,0,0,3,3,0,3,3,0,2,2,3,1,2,2,1,1,1,0,2,2,2,0,2,2,1,1,
-0,2,1,0,2,0,0,2,0,1,0,0,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,0,
-3,3,2,3,3,2,0,0,3,3,0,2,3,0,2,1,2,2,2,2,1,2,0,0,2,2,2,0,2,2,1,1,
-0,2,1,0,2,0,0,2,0,1,1,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,
-3,3,2,3,2,3,2,0,2,2,1,3,2,1,3,2,1,2,3,2,2,3,0,2,3,2,2,1,2,2,2,2,
-1,2,2,0,0,0,0,2,0,1,2,0,1,1,1,0,1,0,3,1,1,0,0,0,0,0,0,0,0,0,1,0,
-3,3,2,3,3,2,3,2,2,2,3,2,2,3,2,2,1,2,3,2,2,3,1,3,2,2,2,3,2,2,2,3,
-3,2,1,3,0,1,1,1,0,2,1,1,1,1,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,2,0,0,
-1,0,0,3,0,3,3,3,3,3,0,0,3,0,2,2,3,3,3,3,3,0,0,0,1,1,3,0,0,0,0,2,
-0,0,1,0,0,0,0,0,0,0,2,3,0,0,0,3,0,2,0,0,0,0,0,3,0,0,0,0,0,0,0,0,
-2,0,3,3,3,3,0,0,2,3,0,0,3,0,3,3,2,3,3,3,3,3,0,0,3,3,3,0,0,0,3,3,
-0,0,3,0,0,0,0,2,0,0,2,1,1,3,0,0,1,0,0,2,3,0,1,0,0,0,0,0,0,0,1,0,
-3,3,3,3,2,3,3,3,3,3,3,3,1,2,1,3,3,2,2,1,2,2,2,3,1,1,2,0,2,1,2,1,
-2,2,1,0,0,0,1,1,0,1,0,1,1,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,
-3,0,2,1,2,3,3,3,0,2,0,2,2,0,2,1,3,2,2,1,2,1,0,0,2,2,1,0,2,1,2,2,
-0,1,1,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,3,3,3,2,1,3,3,1,1,3,0,2,3,1,1,3,2,1,1,2,0,2,2,3,2,1,1,1,1,1,2,
-3,0,0,1,3,1,2,1,2,0,3,0,0,0,1,0,3,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,
-3,3,1,1,3,2,3,3,3,1,3,2,1,3,2,1,3,2,2,2,2,1,3,3,1,2,1,3,1,2,3,0,
-2,1,1,3,2,2,2,1,2,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,
-3,3,2,3,2,3,3,2,3,2,3,2,3,3,2,1,0,3,2,2,2,1,2,2,2,1,2,2,1,2,1,1,
-2,2,2,3,0,1,3,1,1,1,1,0,1,1,0,2,1,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,3,3,3,2,3,2,2,1,1,3,2,3,2,3,2,0,3,2,2,1,2,0,2,2,2,1,2,2,2,2,1,
-3,2,1,2,2,1,0,2,0,1,0,0,1,1,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,1,
-3,3,3,3,3,2,3,1,2,3,3,2,2,3,0,1,1,2,0,3,3,2,2,3,0,1,1,3,0,0,0,0,
-3,1,0,3,3,0,2,0,2,1,0,0,3,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,3,3,2,3,2,3,3,0,1,3,1,1,2,1,2,1,1,3,1,1,0,2,3,1,1,1,1,1,1,1,1,
-3,1,1,2,2,2,2,1,1,1,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
-3,2,2,1,1,2,1,3,3,2,3,2,2,3,2,2,3,1,2,2,1,2,0,3,2,1,2,2,2,2,2,1,
-3,2,1,2,2,2,1,1,1,1,0,0,1,1,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,3,3,3,3,3,3,3,1,3,3,0,2,1,0,3,2,0,0,3,1,0,1,1,0,1,0,0,0,0,0,1,
-1,0,0,1,0,3,2,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,0,2,2,2,3,0,0,1,3,0,3,2,0,3,2,2,3,3,3,3,3,1,0,2,2,2,0,2,2,1,2,
-0,2,3,0,0,0,0,1,0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
-3,0,2,3,1,3,3,2,3,3,0,3,3,0,3,2,2,3,2,3,3,3,0,0,2,2,3,0,1,1,1,3,
-0,0,3,0,0,0,2,2,0,1,3,0,1,2,2,2,3,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,
-3,2,3,3,2,0,3,3,2,2,3,1,3,2,1,3,2,0,1,2,2,0,2,3,2,1,0,3,0,0,0,0,
-3,0,0,2,3,1,3,0,0,3,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,1,3,2,2,2,1,2,0,1,3,1,1,3,1,3,0,0,2,1,1,1,1,2,1,1,1,0,2,1,0,1,
-1,2,0,0,0,3,1,1,0,0,0,0,1,0,1,0,0,1,0,1,0,0,0,0,0,3,1,0,0,0,1,0,
-3,3,3,3,2,2,2,2,2,1,3,1,1,1,2,0,1,1,2,1,2,1,3,2,0,0,3,1,1,1,1,1,
-3,1,0,2,3,0,0,0,3,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,2,3,0,3,3,0,2,0,0,0,0,0,0,0,3,0,0,1,0,0,0,0,0,0,0,0,0,0,0,
-0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,2,3,1,3,0,0,1,2,0,0,2,0,3,3,2,3,3,3,2,3,0,0,2,2,2,0,0,0,2,2,
-0,0,1,0,0,0,0,3,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,
-0,0,0,3,0,2,0,0,0,0,0,0,0,0,0,0,1,2,3,1,3,3,0,0,1,0,3,0,0,0,0,0,
-0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,3,1,2,3,1,2,3,1,0,3,0,2,2,1,0,2,1,1,2,0,1,0,0,1,1,1,1,0,1,0,0,
-1,0,0,0,0,1,1,0,3,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,3,3,3,2,1,0,1,1,1,3,1,2,2,2,2,2,2,1,1,1,1,0,3,1,0,1,3,1,1,1,1,
-1,1,0,2,0,1,3,1,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,0,1,
-3,0,2,2,1,3,3,2,3,3,0,1,1,0,2,2,1,2,1,3,3,1,0,0,3,2,0,0,0,0,2,1,
-0,1,0,0,0,0,1,2,0,1,1,3,1,1,2,2,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,
-0,0,3,0,0,1,0,0,0,3,0,0,3,0,3,1,0,1,1,1,3,2,0,0,0,3,0,0,0,0,2,0,
-0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,0,0,0,
-3,3,1,3,2,1,3,3,1,2,2,0,1,2,1,0,1,2,0,0,0,0,0,3,0,0,0,3,0,0,0,0,
-3,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,0,1,2,0,3,3,3,2,2,0,1,1,0,1,3,0,0,0,2,2,0,0,0,0,3,1,0,1,0,0,0,
-0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,0,2,3,1,2,0,0,2,1,0,3,1,0,1,2,0,1,1,1,1,3,0,0,3,1,1,0,2,2,1,1,
-0,2,0,0,0,0,0,1,0,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,0,0,3,1,2,0,0,2,2,0,1,2,0,1,0,1,3,1,2,1,0,0,0,2,0,3,0,0,0,1,0,
-0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,0,1,1,2,2,0,0,0,2,0,2,1,0,1,1,0,1,1,1,2,1,0,0,1,1,1,0,2,1,1,1,
-0,1,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1,
-0,0,0,2,0,1,3,1,1,1,1,0,0,0,0,3,2,0,1,0,0,0,1,2,0,0,0,1,0,0,0,0,
-0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,3,3,3,3,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-1,0,2,3,2,2,0,0,0,1,0,0,0,0,2,3,2,1,2,2,3,0,0,0,2,3,1,0,0,0,1,1,
-0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,
-3,3,2,2,0,1,0,0,0,0,2,0,2,0,1,0,0,0,1,1,0,0,0,2,1,0,1,0,1,1,0,0,
-0,1,0,2,0,0,1,0,3,0,1,0,0,0,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,3,1,0,0,1,0,0,0,0,0,1,1,2,0,0,0,0,1,0,0,1,3,1,0,0,0,0,1,1,0,0,
-0,1,0,0,0,0,3,0,0,0,0,0,0,3,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,
-3,3,1,1,1,1,2,3,0,0,2,1,1,1,1,1,0,2,1,1,0,0,0,2,1,0,1,2,1,1,0,1,
-2,1,0,3,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-1,3,1,0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,
-0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,3,2,0,0,0,0,0,0,1,2,1,0,1,1,0,2,0,0,1,0,0,2,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,2,0,0,0,1,3,0,1,0,0,0,2,0,0,0,0,0,0,0,1,2,0,0,0,0,0,
-3,3,0,0,1,1,2,0,0,1,2,1,0,1,1,1,0,1,1,0,0,2,1,1,0,1,0,0,1,1,1,0,
-0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,
-2,2,2,1,0,0,0,0,1,0,0,0,0,3,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,
-2,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-2,3,0,0,1,1,0,0,0,2,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-1,1,0,1,2,0,1,2,0,0,1,1,0,2,0,1,0,0,1,0,0,0,0,1,0,0,0,2,0,0,0,0,
-1,0,0,1,0,1,1,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,1,0,0,0,0,0,0,0,1,1,0,1,1,0,2,1,3,0,0,0,0,1,1,0,0,0,0,0,0,0,3,
-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-2,0,1,0,1,0,0,2,0,0,2,0,0,1,1,2,0,0,1,1,0,0,0,1,0,0,0,1,1,0,0,0,
-1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,
-1,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,1,1,0,0,0,
-2,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-2,0,0,0,0,2,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,3,0,0,0,
-2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,1,0,0,0,0,
-1,0,0,0,0,0,0,0,0,1,0,0,0,0,2,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,1,1,0,0,2,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-)
-
-TIS620ThaiModel = { \
- 'charToOrderMap': TIS620CharToOrderMap,
- 'precedenceMatrix': ThaiLangModel,
- 'mTypicalPositiveRatio': 0.926386,
- 'keepEnglishLetter': constants.False,
- 'charsetName': "TIS-620"
-}
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/latin1prober.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/latin1prober.py
deleted file mode 100644
index b46129b..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/latin1prober.py
+++ /dev/null
@@ -1,136 +0,0 @@
-######################## BEGIN LICENSE BLOCK ########################
-# The Original Code is Mozilla Universal charset detector code.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 2001
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-# Mark Pilgrim - port to Python
-# Shy Shalom - original C code
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301 USA
-######################### END LICENSE BLOCK #########################
-
-from charsetprober import CharSetProber
-import constants
-import operator
-
-FREQ_CAT_NUM = 4
-
-UDF = 0 # undefined
-OTH = 1 # other
-ASC = 2 # ascii capital letter
-ASS = 3 # ascii small letter
-ACV = 4 # accent capital vowel
-ACO = 5 # accent capital other
-ASV = 6 # accent small vowel
-ASO = 7 # accent small other
-CLASS_NUM = 8 # total classes
-
-Latin1_CharToClass = ( \
- OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 00 - 07
- OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 08 - 0F
- OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 10 - 17
- OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 18 - 1F
- OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 20 - 27
- OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 28 - 2F
- OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 30 - 37
- OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 38 - 3F
- OTH, ASC, ASC, ASC, ASC, ASC, ASC, ASC, # 40 - 47
- ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC, # 48 - 4F
- ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC, # 50 - 57
- ASC, ASC, ASC, OTH, OTH, OTH, OTH, OTH, # 58 - 5F
- OTH, ASS, ASS, ASS, ASS, ASS, ASS, ASS, # 60 - 67
- ASS, ASS, ASS, ASS, ASS, ASS, ASS, ASS, # 68 - 6F
- ASS, ASS, ASS, ASS, ASS, ASS, ASS, ASS, # 70 - 77
- ASS, ASS, ASS, OTH, OTH, OTH, OTH, OTH, # 78 - 7F
- OTH, UDF, OTH, ASO, OTH, OTH, OTH, OTH, # 80 - 87
- OTH, OTH, ACO, OTH, ACO, UDF, ACO, UDF, # 88 - 8F
- UDF, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 90 - 97
- OTH, OTH, ASO, OTH, ASO, UDF, ASO, ACO, # 98 - 9F
- OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # A0 - A7
- OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # A8 - AF
- OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # B0 - B7
- OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # B8 - BF
- ACV, ACV, ACV, ACV, ACV, ACV, ACO, ACO, # C0 - C7
- ACV, ACV, ACV, ACV, ACV, ACV, ACV, ACV, # C8 - CF
- ACO, ACO, ACV, ACV, ACV, ACV, ACV, OTH, # D0 - D7
- ACV, ACV, ACV, ACV, ACV, ACO, ACO, ACO, # D8 - DF
- ASV, ASV, ASV, ASV, ASV, ASV, ASO, ASO, # E0 - E7
- ASV, ASV, ASV, ASV, ASV, ASV, ASV, ASV, # E8 - EF
- ASO, ASO, ASV, ASV, ASV, ASV, ASV, OTH, # F0 - F7
- ASV, ASV, ASV, ASV, ASV, ASO, ASO, ASO, # F8 - FF
-)
-
-# 0 : illegal
-# 1 : very unlikely
-# 2 : normal
-# 3 : very likely
-Latin1ClassModel = ( \
-# UDF OTH ASC ASS ACV ACO ASV ASO
- 0, 0, 0, 0, 0, 0, 0, 0, # UDF
- 0, 3, 3, 3, 3, 3, 3, 3, # OTH
- 0, 3, 3, 3, 3, 3, 3, 3, # ASC
- 0, 3, 3, 3, 1, 1, 3, 3, # ASS
- 0, 3, 3, 3, 1, 2, 1, 2, # ACV
- 0, 3, 3, 3, 3, 3, 3, 3, # ACO
- 0, 3, 1, 3, 1, 1, 1, 3, # ASV
- 0, 3, 1, 3, 1, 1, 3, 3, # ASO
-)
-
-class Latin1Prober(CharSetProber):
- def __init__(self):
- CharSetProber.__init__(self)
- self.reset()
-
- def reset(self):
- self._mLastCharClass = OTH
- self._mFreqCounter = [0] * FREQ_CAT_NUM
- CharSetProber.reset(self)
-
- def get_charset_name(self):
- return "windows-1252"
-
- def feed(self, aBuf):
- aBuf = self.filter_with_english_letters(aBuf)
- for c in aBuf:
- charClass = Latin1_CharToClass[ord(c)]
- freq = Latin1ClassModel[(self._mLastCharClass * CLASS_NUM) + charClass]
- if freq == 0:
- self._mState = constants.eNotMe
- break
- self._mFreqCounter[freq] += 1
- self._mLastCharClass = charClass
-
- return self.get_state()
-
- def get_confidence(self):
- if self.get_state() == constants.eNotMe:
- return 0.01
-
- total = reduce(operator.add, self._mFreqCounter)
- if total < 0.01:
- confidence = 0.0
- else:
- confidence = (self._mFreqCounter[3] / total) - (self._mFreqCounter[1] * 20.0 / total)
- if confidence < 0.0:
- confidence = 0.0
- # lower the confidence of latin1 so that other more accurate detector
- # can take priority.
- confidence = confidence * 0.5
- return confidence
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/mbcharsetprober.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/mbcharsetprober.py
deleted file mode 100644
index a813144..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/mbcharsetprober.py
+++ /dev/null
@@ -1,82 +0,0 @@
-######################## BEGIN LICENSE BLOCK ########################
-# The Original Code is Mozilla Universal charset detector code.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 2001
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-# Mark Pilgrim - port to Python
-# Shy Shalom - original C code
-# Proofpoint, Inc.
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301 USA
-######################### END LICENSE BLOCK #########################
-
-import constants, sys
-from constants import eStart, eError, eItsMe
-from charsetprober import CharSetProber
-
-class MultiByteCharSetProber(CharSetProber):
- def __init__(self):
- CharSetProber.__init__(self)
- self._mDistributionAnalyzer = None
- self._mCodingSM = None
- self._mLastChar = ['\x00', '\x00']
-
- def reset(self):
- CharSetProber.reset(self)
- if self._mCodingSM:
- self._mCodingSM.reset()
- if self._mDistributionAnalyzer:
- self._mDistributionAnalyzer.reset()
- self._mLastChar = ['\x00', '\x00']
-
- def get_charset_name(self):
- pass
-
- def feed(self, aBuf):
- aLen = len(aBuf)
- for i in range(0, aLen):
- codingState = self._mCodingSM.next_state(aBuf[i])
- if codingState == eError:
- if constants._debug:
- sys.stderr.write(self.get_charset_name() + ' prober hit error at byte ' + str(i) + '\n')
- self._mState = constants.eNotMe
- break
- elif codingState == eItsMe:
- self._mState = constants.eFoundIt
- break
- elif codingState == eStart:
- charLen = self._mCodingSM.get_current_charlen()
- if i == 0:
- self._mLastChar[1] = aBuf[0]
- self._mDistributionAnalyzer.feed(self._mLastChar, charLen)
- else:
- self._mDistributionAnalyzer.feed(aBuf[i-1:i+1], charLen)
-
- self._mLastChar[0] = aBuf[aLen - 1]
-
- if self.get_state() == constants.eDetecting:
- if self._mDistributionAnalyzer.got_enough_data() and \
- (self.get_confidence() > constants.SHORTCUT_THRESHOLD):
- self._mState = constants.eFoundIt
-
- return self.get_state()
-
- def get_confidence(self):
- return self._mDistributionAnalyzer.get_confidence()
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/mbcsgroupprober.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/mbcsgroupprober.py
deleted file mode 100644
index 941cc3e..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/mbcsgroupprober.py
+++ /dev/null
@@ -1,50 +0,0 @@
-######################## BEGIN LICENSE BLOCK ########################
-# The Original Code is Mozilla Universal charset detector code.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 2001
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-# Mark Pilgrim - port to Python
-# Shy Shalom - original C code
-# Proofpoint, Inc.
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301 USA
-######################### END LICENSE BLOCK #########################
-
-from charsetgroupprober import CharSetGroupProber
-from utf8prober import UTF8Prober
-from sjisprober import SJISProber
-from eucjpprober import EUCJPProber
-from gb2312prober import GB2312Prober
-from euckrprober import EUCKRProber
-from big5prober import Big5Prober
-from euctwprober import EUCTWProber
-
-class MBCSGroupProber(CharSetGroupProber):
- def __init__(self):
- CharSetGroupProber.__init__(self)
- self._mProbers = [ \
- UTF8Prober(),
- SJISProber(),
- EUCJPProber(),
- GB2312Prober(),
- EUCKRProber(),
- Big5Prober(),
- EUCTWProber()]
- self.reset()
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/mbcssm.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/mbcssm.py
deleted file mode 100644
index e46c1ff..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/mbcssm.py
+++ /dev/null
@@ -1,514 +0,0 @@
-######################## BEGIN LICENSE BLOCK ########################
-# The Original Code is mozilla.org code.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 1998
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-# Mark Pilgrim - port to Python
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301 USA
-######################### END LICENSE BLOCK #########################
-
-from constants import eStart, eError, eItsMe
-
-# BIG5
-
-BIG5_cls = ( \
- 1,1,1,1,1,1,1,1, # 00 - 07 #allow 0x00 as legal value
- 1,1,1,1,1,1,0,0, # 08 - 0f
- 1,1,1,1,1,1,1,1, # 10 - 17
- 1,1,1,0,1,1,1,1, # 18 - 1f
- 1,1,1,1,1,1,1,1, # 20 - 27
- 1,1,1,1,1,1,1,1, # 28 - 2f
- 1,1,1,1,1,1,1,1, # 30 - 37
- 1,1,1,1,1,1,1,1, # 38 - 3f
- 2,2,2,2,2,2,2,2, # 40 - 47
- 2,2,2,2,2,2,2,2, # 48 - 4f
- 2,2,2,2,2,2,2,2, # 50 - 57
- 2,2,2,2,2,2,2,2, # 58 - 5f
- 2,2,2,2,2,2,2,2, # 60 - 67
- 2,2,2,2,2,2,2,2, # 68 - 6f
- 2,2,2,2,2,2,2,2, # 70 - 77
- 2,2,2,2,2,2,2,1, # 78 - 7f
- 4,4,4,4,4,4,4,4, # 80 - 87
- 4,4,4,4,4,4,4,4, # 88 - 8f
- 4,4,4,4,4,4,4,4, # 90 - 97
- 4,4,4,4,4,4,4,4, # 98 - 9f
- 4,3,3,3,3,3,3,3, # a0 - a7
- 3,3,3,3,3,3,3,3, # a8 - af
- 3,3,3,3,3,3,3,3, # b0 - b7
- 3,3,3,3,3,3,3,3, # b8 - bf
- 3,3,3,3,3,3,3,3, # c0 - c7
- 3,3,3,3,3,3,3,3, # c8 - cf
- 3,3,3,3,3,3,3,3, # d0 - d7
- 3,3,3,3,3,3,3,3, # d8 - df
- 3,3,3,3,3,3,3,3, # e0 - e7
- 3,3,3,3,3,3,3,3, # e8 - ef
- 3,3,3,3,3,3,3,3, # f0 - f7
- 3,3,3,3,3,3,3,0) # f8 - ff
-
-BIG5_st = ( \
- eError,eStart,eStart, 3,eError,eError,eError,eError,#00-07
- eError,eError,eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eError,#08-0f
- eError,eStart,eStart,eStart,eStart,eStart,eStart,eStart)#10-17
-
-Big5CharLenTable = (0, 1, 1, 2, 0)
-
-Big5SMModel = {'classTable': BIG5_cls,
- 'classFactor': 5,
- 'stateTable': BIG5_st,
- 'charLenTable': Big5CharLenTable,
- 'name': 'Big5'}
-
-# EUC-JP
-
-EUCJP_cls = ( \
- 4,4,4,4,4,4,4,4, # 00 - 07
- 4,4,4,4,4,4,5,5, # 08 - 0f
- 4,4,4,4,4,4,4,4, # 10 - 17
- 4,4,4,5,4,4,4,4, # 18 - 1f
- 4,4,4,4,4,4,4,4, # 20 - 27
- 4,4,4,4,4,4,4,4, # 28 - 2f
- 4,4,4,4,4,4,4,4, # 30 - 37
- 4,4,4,4,4,4,4,4, # 38 - 3f
- 4,4,4,4,4,4,4,4, # 40 - 47
- 4,4,4,4,4,4,4,4, # 48 - 4f
- 4,4,4,4,4,4,4,4, # 50 - 57
- 4,4,4,4,4,4,4,4, # 58 - 5f
- 4,4,4,4,4,4,4,4, # 60 - 67
- 4,4,4,4,4,4,4,4, # 68 - 6f
- 4,4,4,4,4,4,4,4, # 70 - 77
- 4,4,4,4,4,4,4,4, # 78 - 7f
- 5,5,5,5,5,5,5,5, # 80 - 87
- 5,5,5,5,5,5,1,3, # 88 - 8f
- 5,5,5,5,5,5,5,5, # 90 - 97
- 5,5,5,5,5,5,5,5, # 98 - 9f
- 5,2,2,2,2,2,2,2, # a0 - a7
- 2,2,2,2,2,2,2,2, # a8 - af
- 2,2,2,2,2,2,2,2, # b0 - b7
- 2,2,2,2,2,2,2,2, # b8 - bf
- 2,2,2,2,2,2,2,2, # c0 - c7
- 2,2,2,2,2,2,2,2, # c8 - cf
- 2,2,2,2,2,2,2,2, # d0 - d7
- 2,2,2,2,2,2,2,2, # d8 - df
- 0,0,0,0,0,0,0,0, # e0 - e7
- 0,0,0,0,0,0,0,0, # e8 - ef
- 0,0,0,0,0,0,0,0, # f0 - f7
- 0,0,0,0,0,0,0,5) # f8 - ff
-
-EUCJP_st = ( \
- 3, 4, 3, 5,eStart,eError,eError,eError,#00-07
- eError,eError,eError,eError,eItsMe,eItsMe,eItsMe,eItsMe,#08-0f
- eItsMe,eItsMe,eStart,eError,eStart,eError,eError,eError,#10-17
- eError,eError,eStart,eError,eError,eError, 3,eError,#18-1f
- 3,eError,eError,eError,eStart,eStart,eStart,eStart)#20-27
-
-EUCJPCharLenTable = (2, 2, 2, 3, 1, 0)
-
-EUCJPSMModel = {'classTable': EUCJP_cls,
- 'classFactor': 6,
- 'stateTable': EUCJP_st,
- 'charLenTable': EUCJPCharLenTable,
- 'name': 'EUC-JP'}
-
-# EUC-KR
-
-EUCKR_cls = ( \
- 1,1,1,1,1,1,1,1, # 00 - 07
- 1,1,1,1,1,1,0,0, # 08 - 0f
- 1,1,1,1,1,1,1,1, # 10 - 17
- 1,1,1,0,1,1,1,1, # 18 - 1f
- 1,1,1,1,1,1,1,1, # 20 - 27
- 1,1,1,1,1,1,1,1, # 28 - 2f
- 1,1,1,1,1,1,1,1, # 30 - 37
- 1,1,1,1,1,1,1,1, # 38 - 3f
- 1,1,1,1,1,1,1,1, # 40 - 47
- 1,1,1,1,1,1,1,1, # 48 - 4f
- 1,1,1,1,1,1,1,1, # 50 - 57
- 1,1,1,1,1,1,1,1, # 58 - 5f
- 1,1,1,1,1,1,1,1, # 60 - 67
- 1,1,1,1,1,1,1,1, # 68 - 6f
- 1,1,1,1,1,1,1,1, # 70 - 77
- 1,1,1,1,1,1,1,1, # 78 - 7f
- 0,0,0,0,0,0,0,0, # 80 - 87
- 0,0,0,0,0,0,0,0, # 88 - 8f
- 0,0,0,0,0,0,0,0, # 90 - 97
- 0,0,0,0,0,0,0,0, # 98 - 9f
- 0,2,2,2,2,2,2,2, # a0 - a7
- 2,2,2,2,2,3,3,3, # a8 - af
- 2,2,2,2,2,2,2,2, # b0 - b7
- 2,2,2,2,2,2,2,2, # b8 - bf
- 2,2,2,2,2,2,2,2, # c0 - c7
- 2,3,2,2,2,2,2,2, # c8 - cf
- 2,2,2,2,2,2,2,2, # d0 - d7
- 2,2,2,2,2,2,2,2, # d8 - df
- 2,2,2,2,2,2,2,2, # e0 - e7
- 2,2,2,2,2,2,2,2, # e8 - ef
- 2,2,2,2,2,2,2,2, # f0 - f7
- 2,2,2,2,2,2,2,0) # f8 - ff
-
-EUCKR_st = (
- eError,eStart, 3,eError,eError,eError,eError,eError,#00-07
- eItsMe,eItsMe,eItsMe,eItsMe,eError,eError,eStart,eStart)#08-0f
-
-EUCKRCharLenTable = (0, 1, 2, 0)
-
-EUCKRSMModel = {'classTable': EUCKR_cls,
- 'classFactor': 4,
- 'stateTable': EUCKR_st,
- 'charLenTable': EUCKRCharLenTable,
- 'name': 'EUC-KR'}
-
-# EUC-TW
-
-EUCTW_cls = ( \
- 2,2,2,2,2,2,2,2, # 00 - 07
- 2,2,2,2,2,2,0,0, # 08 - 0f
- 2,2,2,2,2,2,2,2, # 10 - 17
- 2,2,2,0,2,2,2,2, # 18 - 1f
- 2,2,2,2,2,2,2,2, # 20 - 27
- 2,2,2,2,2,2,2,2, # 28 - 2f
- 2,2,2,2,2,2,2,2, # 30 - 37
- 2,2,2,2,2,2,2,2, # 38 - 3f
- 2,2,2,2,2,2,2,2, # 40 - 47
- 2,2,2,2,2,2,2,2, # 48 - 4f
- 2,2,2,2,2,2,2,2, # 50 - 57
- 2,2,2,2,2,2,2,2, # 58 - 5f
- 2,2,2,2,2,2,2,2, # 60 - 67
- 2,2,2,2,2,2,2,2, # 68 - 6f
- 2,2,2,2,2,2,2,2, # 70 - 77
- 2,2,2,2,2,2,2,2, # 78 - 7f
- 0,0,0,0,0,0,0,0, # 80 - 87
- 0,0,0,0,0,0,6,0, # 88 - 8f
- 0,0,0,0,0,0,0,0, # 90 - 97
- 0,0,0,0,0,0,0,0, # 98 - 9f
- 0,3,4,4,4,4,4,4, # a0 - a7
- 5,5,1,1,1,1,1,1, # a8 - af
- 1,1,1,1,1,1,1,1, # b0 - b7
- 1,1,1,1,1,1,1,1, # b8 - bf
- 1,1,3,1,3,3,3,3, # c0 - c7
- 3,3,3,3,3,3,3,3, # c8 - cf
- 3,3,3,3,3,3,3,3, # d0 - d7
- 3,3,3,3,3,3,3,3, # d8 - df
- 3,3,3,3,3,3,3,3, # e0 - e7
- 3,3,3,3,3,3,3,3, # e8 - ef
- 3,3,3,3,3,3,3,3, # f0 - f7
- 3,3,3,3,3,3,3,0) # f8 - ff
-
-EUCTW_st = ( \
- eError,eError,eStart, 3, 3, 3, 4,eError,#00-07
- eError,eError,eError,eError,eError,eError,eItsMe,eItsMe,#08-0f
- eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eError,eStart,eError,#10-17
- eStart,eStart,eStart,eError,eError,eError,eError,eError,#18-1f
- 5,eError,eError,eError,eStart,eError,eStart,eStart,#20-27
- eStart,eError,eStart,eStart,eStart,eStart,eStart,eStart)#28-2f
-
-EUCTWCharLenTable = (0, 0, 1, 2, 2, 2, 3)
-
-EUCTWSMModel = {'classTable': EUCTW_cls,
- 'classFactor': 7,
- 'stateTable': EUCTW_st,
- 'charLenTable': EUCTWCharLenTable,
- 'name': 'x-euc-tw'}
-
-# GB2312
-
-GB2312_cls = ( \
- 1,1,1,1,1,1,1,1, # 00 - 07
- 1,1,1,1,1,1,0,0, # 08 - 0f
- 1,1,1,1,1,1,1,1, # 10 - 17
- 1,1,1,0,1,1,1,1, # 18 - 1f
- 1,1,1,1,1,1,1,1, # 20 - 27
- 1,1,1,1,1,1,1,1, # 28 - 2f
- 3,3,3,3,3,3,3,3, # 30 - 37
- 3,3,1,1,1,1,1,1, # 38 - 3f
- 2,2,2,2,2,2,2,2, # 40 - 47
- 2,2,2,2,2,2,2,2, # 48 - 4f
- 2,2,2,2,2,2,2,2, # 50 - 57
- 2,2,2,2,2,2,2,2, # 58 - 5f
- 2,2,2,2,2,2,2,2, # 60 - 67
- 2,2,2,2,2,2,2,2, # 68 - 6f
- 2,2,2,2,2,2,2,2, # 70 - 77
- 2,2,2,2,2,2,2,4, # 78 - 7f
- 5,6,6,6,6,6,6,6, # 80 - 87
- 6,6,6,6,6,6,6,6, # 88 - 8f
- 6,6,6,6,6,6,6,6, # 90 - 97
- 6,6,6,6,6,6,6,6, # 98 - 9f
- 6,6,6,6,6,6,6,6, # a0 - a7
- 6,6,6,6,6,6,6,6, # a8 - af
- 6,6,6,6,6,6,6,6, # b0 - b7
- 6,6,6,6,6,6,6,6, # b8 - bf
- 6,6,6,6,6,6,6,6, # c0 - c7
- 6,6,6,6,6,6,6,6, # c8 - cf
- 6,6,6,6,6,6,6,6, # d0 - d7
- 6,6,6,6,6,6,6,6, # d8 - df
- 6,6,6,6,6,6,6,6, # e0 - e7
- 6,6,6,6,6,6,6,6, # e8 - ef
- 6,6,6,6,6,6,6,6, # f0 - f7
- 6,6,6,6,6,6,6,0) # f8 - ff
-
-GB2312_st = ( \
- eError,eStart,eStart,eStart,eStart,eStart, 3,eError,#00-07
- eError,eError,eError,eError,eError,eError,eItsMe,eItsMe,#08-0f
- eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eError,eError,eStart,#10-17
- 4,eError,eStart,eStart,eError,eError,eError,eError,#18-1f
- eError,eError, 5,eError,eError,eError,eItsMe,eError,#20-27
- eError,eError,eStart,eStart,eStart,eStart,eStart,eStart)#28-2f
-
-# To be accurate, the length of class 6 can be either 2 or 4.
-# But it is not necessary to discriminate between the two since
-# it is used for frequency analysis only, and we are validing
-# each code range there as well. So it is safe to set it to be
-# 2 here.
-GB2312CharLenTable = (0, 1, 1, 1, 1, 1, 2)
-
-GB2312SMModel = {'classTable': GB2312_cls,
- 'classFactor': 7,
- 'stateTable': GB2312_st,
- 'charLenTable': GB2312CharLenTable,
- 'name': 'GB2312'}
-
-# Shift_JIS
-
-SJIS_cls = ( \
- 1,1,1,1,1,1,1,1, # 00 - 07
- 1,1,1,1,1,1,0,0, # 08 - 0f
- 1,1,1,1,1,1,1,1, # 10 - 17
- 1,1,1,0,1,1,1,1, # 18 - 1f
- 1,1,1,1,1,1,1,1, # 20 - 27
- 1,1,1,1,1,1,1,1, # 28 - 2f
- 1,1,1,1,1,1,1,1, # 30 - 37
- 1,1,1,1,1,1,1,1, # 38 - 3f
- 2,2,2,2,2,2,2,2, # 40 - 47
- 2,2,2,2,2,2,2,2, # 48 - 4f
- 2,2,2,2,2,2,2,2, # 50 - 57
- 2,2,2,2,2,2,2,2, # 58 - 5f
- 2,2,2,2,2,2,2,2, # 60 - 67
- 2,2,2,2,2,2,2,2, # 68 - 6f
- 2,2,2,2,2,2,2,2, # 70 - 77
- 2,2,2,2,2,2,2,1, # 78 - 7f
- 3,3,3,3,3,3,3,3, # 80 - 87
- 3,3,3,3,3,3,3,3, # 88 - 8f
- 3,3,3,3,3,3,3,3, # 90 - 97
- 3,3,3,3,3,3,3,3, # 98 - 9f
- #0xa0 is illegal in sjis encoding, but some pages does
- #contain such byte. We need to be more error forgiven.
- 2,2,2,2,2,2,2,2, # a0 - a7
- 2,2,2,2,2,2,2,2, # a8 - af
- 2,2,2,2,2,2,2,2, # b0 - b7
- 2,2,2,2,2,2,2,2, # b8 - bf
- 2,2,2,2,2,2,2,2, # c0 - c7
- 2,2,2,2,2,2,2,2, # c8 - cf
- 2,2,2,2,2,2,2,2, # d0 - d7
- 2,2,2,2,2,2,2,2, # d8 - df
- 3,3,3,3,3,3,3,3, # e0 - e7
- 3,3,3,3,3,4,4,4, # e8 - ef
- 4,4,4,4,4,4,4,4, # f0 - f7
- 4,4,4,4,4,0,0,0) # f8 - ff
-
-SJIS_st = ( \
- eError,eStart,eStart, 3,eError,eError,eError,eError,#00-07
- eError,eError,eError,eError,eItsMe,eItsMe,eItsMe,eItsMe,#08-0f
- eItsMe,eItsMe,eError,eError,eStart,eStart,eStart,eStart)#10-17
-
-SJISCharLenTable = (0, 1, 1, 2, 0, 0)
-
-SJISSMModel = {'classTable': SJIS_cls,
- 'classFactor': 6,
- 'stateTable': SJIS_st,
- 'charLenTable': SJISCharLenTable,
- 'name': 'Shift_JIS'}
-
-# UCS2-BE
-
-UCS2BE_cls = ( \
- 0,0,0,0,0,0,0,0, # 00 - 07
- 0,0,1,0,0,2,0,0, # 08 - 0f
- 0,0,0,0,0,0,0,0, # 10 - 17
- 0,0,0,3,0,0,0,0, # 18 - 1f
- 0,0,0,0,0,0,0,0, # 20 - 27
- 0,3,3,3,3,3,0,0, # 28 - 2f
- 0,0,0,0,0,0,0,0, # 30 - 37
- 0,0,0,0,0,0,0,0, # 38 - 3f
- 0,0,0,0,0,0,0,0, # 40 - 47
- 0,0,0,0,0,0,0,0, # 48 - 4f
- 0,0,0,0,0,0,0,0, # 50 - 57
- 0,0,0,0,0,0,0,0, # 58 - 5f
- 0,0,0,0,0,0,0,0, # 60 - 67
- 0,0,0,0,0,0,0,0, # 68 - 6f
- 0,0,0,0,0,0,0,0, # 70 - 77
- 0,0,0,0,0,0,0,0, # 78 - 7f
- 0,0,0,0,0,0,0,0, # 80 - 87
- 0,0,0,0,0,0,0,0, # 88 - 8f
- 0,0,0,0,0,0,0,0, # 90 - 97
- 0,0,0,0,0,0,0,0, # 98 - 9f
- 0,0,0,0,0,0,0,0, # a0 - a7
- 0,0,0,0,0,0,0,0, # a8 - af
- 0,0,0,0,0,0,0,0, # b0 - b7
- 0,0,0,0,0,0,0,0, # b8 - bf
- 0,0,0,0,0,0,0,0, # c0 - c7
- 0,0,0,0,0,0,0,0, # c8 - cf
- 0,0,0,0,0,0,0,0, # d0 - d7
- 0,0,0,0,0,0,0,0, # d8 - df
- 0,0,0,0,0,0,0,0, # e0 - e7
- 0,0,0,0,0,0,0,0, # e8 - ef
- 0,0,0,0,0,0,0,0, # f0 - f7
- 0,0,0,0,0,0,4,5) # f8 - ff
-
-UCS2BE_st = ( \
- 5, 7, 7,eError, 4, 3,eError,eError,#00-07
- eError,eError,eError,eError,eItsMe,eItsMe,eItsMe,eItsMe,#08-0f
- eItsMe,eItsMe, 6, 6, 6, 6,eError,eError,#10-17
- 6, 6, 6, 6, 6,eItsMe, 6, 6,#18-1f
- 6, 6, 6, 6, 5, 7, 7,eError,#20-27
- 5, 8, 6, 6,eError, 6, 6, 6,#28-2f
- 6, 6, 6, 6,eError,eError,eStart,eStart)#30-37
-
-UCS2BECharLenTable = (2, 2, 2, 0, 2, 2)
-
-UCS2BESMModel = {'classTable': UCS2BE_cls,
- 'classFactor': 6,
- 'stateTable': UCS2BE_st,
- 'charLenTable': UCS2BECharLenTable,
- 'name': 'UTF-16BE'}
-
-# UCS2-LE
-
-UCS2LE_cls = ( \
- 0,0,0,0,0,0,0,0, # 00 - 07
- 0,0,1,0,0,2,0,0, # 08 - 0f
- 0,0,0,0,0,0,0,0, # 10 - 17
- 0,0,0,3,0,0,0,0, # 18 - 1f
- 0,0,0,0,0,0,0,0, # 20 - 27
- 0,3,3,3,3,3,0,0, # 28 - 2f
- 0,0,0,0,0,0,0,0, # 30 - 37
- 0,0,0,0,0,0,0,0, # 38 - 3f
- 0,0,0,0,0,0,0,0, # 40 - 47
- 0,0,0,0,0,0,0,0, # 48 - 4f
- 0,0,0,0,0,0,0,0, # 50 - 57
- 0,0,0,0,0,0,0,0, # 58 - 5f
- 0,0,0,0,0,0,0,0, # 60 - 67
- 0,0,0,0,0,0,0,0, # 68 - 6f
- 0,0,0,0,0,0,0,0, # 70 - 77
- 0,0,0,0,0,0,0,0, # 78 - 7f
- 0,0,0,0,0,0,0,0, # 80 - 87
- 0,0,0,0,0,0,0,0, # 88 - 8f
- 0,0,0,0,0,0,0,0, # 90 - 97
- 0,0,0,0,0,0,0,0, # 98 - 9f
- 0,0,0,0,0,0,0,0, # a0 - a7
- 0,0,0,0,0,0,0,0, # a8 - af
- 0,0,0,0,0,0,0,0, # b0 - b7
- 0,0,0,0,0,0,0,0, # b8 - bf
- 0,0,0,0,0,0,0,0, # c0 - c7
- 0,0,0,0,0,0,0,0, # c8 - cf
- 0,0,0,0,0,0,0,0, # d0 - d7
- 0,0,0,0,0,0,0,0, # d8 - df
- 0,0,0,0,0,0,0,0, # e0 - e7
- 0,0,0,0,0,0,0,0, # e8 - ef
- 0,0,0,0,0,0,0,0, # f0 - f7
- 0,0,0,0,0,0,4,5) # f8 - ff
-
-UCS2LE_st = ( \
- 6, 6, 7, 6, 4, 3,eError,eError,#00-07
- eError,eError,eError,eError,eItsMe,eItsMe,eItsMe,eItsMe,#08-0f
- eItsMe,eItsMe, 5, 5, 5,eError,eItsMe,eError,#10-17
- 5, 5, 5,eError, 5,eError, 6, 6,#18-1f
- 7, 6, 8, 8, 5, 5, 5,eError,#20-27
- 5, 5, 5,eError,eError,eError, 5, 5,#28-2f
- 5, 5, 5,eError, 5,eError,eStart,eStart)#30-37
-
-UCS2LECharLenTable = (2, 2, 2, 2, 2, 2)
-
-UCS2LESMModel = {'classTable': UCS2LE_cls,
- 'classFactor': 6,
- 'stateTable': UCS2LE_st,
- 'charLenTable': UCS2LECharLenTable,
- 'name': 'UTF-16LE'}
-
-# UTF-8
-
-UTF8_cls = ( \
- 1,1,1,1,1,1,1,1, # 00 - 07 #allow 0x00 as a legal value
- 1,1,1,1,1,1,0,0, # 08 - 0f
- 1,1,1,1,1,1,1,1, # 10 - 17
- 1,1,1,0,1,1,1,1, # 18 - 1f
- 1,1,1,1,1,1,1,1, # 20 - 27
- 1,1,1,1,1,1,1,1, # 28 - 2f
- 1,1,1,1,1,1,1,1, # 30 - 37
- 1,1,1,1,1,1,1,1, # 38 - 3f
- 1,1,1,1,1,1,1,1, # 40 - 47
- 1,1,1,1,1,1,1,1, # 48 - 4f
- 1,1,1,1,1,1,1,1, # 50 - 57
- 1,1,1,1,1,1,1,1, # 58 - 5f
- 1,1,1,1,1,1,1,1, # 60 - 67
- 1,1,1,1,1,1,1,1, # 68 - 6f
- 1,1,1,1,1,1,1,1, # 70 - 77
- 1,1,1,1,1,1,1,1, # 78 - 7f
- 2,2,2,2,3,3,3,3, # 80 - 87
- 4,4,4,4,4,4,4,4, # 88 - 8f
- 4,4,4,4,4,4,4,4, # 90 - 97
- 4,4,4,4,4,4,4,4, # 98 - 9f
- 5,5,5,5,5,5,5,5, # a0 - a7
- 5,5,5,5,5,5,5,5, # a8 - af
- 5,5,5,5,5,5,5,5, # b0 - b7
- 5,5,5,5,5,5,5,5, # b8 - bf
- 0,0,6,6,6,6,6,6, # c0 - c7
- 6,6,6,6,6,6,6,6, # c8 - cf
- 6,6,6,6,6,6,6,6, # d0 - d7
- 6,6,6,6,6,6,6,6, # d8 - df
- 7,8,8,8,8,8,8,8, # e0 - e7
- 8,8,8,8,8,9,8,8, # e8 - ef
- 10,11,11,11,11,11,11,11, # f0 - f7
- 12,13,13,13,14,15,0,0) # f8 - ff
-
-UTF8_st = ( \
- eError,eStart,eError,eError,eError,eError, 12, 10,#00-07
- 9, 11, 8, 7, 6, 5, 4, 3,#08-0f
- eError,eError,eError,eError,eError,eError,eError,eError,#10-17
- eError,eError,eError,eError,eError,eError,eError,eError,#18-1f
- eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,#20-27
- eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,#28-2f
- eError,eError, 5, 5, 5, 5,eError,eError,#30-37
- eError,eError,eError,eError,eError,eError,eError,eError,#38-3f
- eError,eError,eError, 5, 5, 5,eError,eError,#40-47
- eError,eError,eError,eError,eError,eError,eError,eError,#48-4f
- eError,eError, 7, 7, 7, 7,eError,eError,#50-57
- eError,eError,eError,eError,eError,eError,eError,eError,#58-5f
- eError,eError,eError,eError, 7, 7,eError,eError,#60-67
- eError,eError,eError,eError,eError,eError,eError,eError,#68-6f
- eError,eError, 9, 9, 9, 9,eError,eError,#70-77
- eError,eError,eError,eError,eError,eError,eError,eError,#78-7f
- eError,eError,eError,eError,eError, 9,eError,eError,#80-87
- eError,eError,eError,eError,eError,eError,eError,eError,#88-8f
- eError,eError, 12, 12, 12, 12,eError,eError,#90-97
- eError,eError,eError,eError,eError,eError,eError,eError,#98-9f
- eError,eError,eError,eError,eError, 12,eError,eError,#a0-a7
- eError,eError,eError,eError,eError,eError,eError,eError,#a8-af
- eError,eError, 12, 12, 12,eError,eError,eError,#b0-b7
- eError,eError,eError,eError,eError,eError,eError,eError,#b8-bf
- eError,eError,eStart,eStart,eStart,eStart,eError,eError,#c0-c7
- eError,eError,eError,eError,eError,eError,eError,eError)#c8-cf
-
-UTF8CharLenTable = (0, 1, 0, 0, 0, 0, 2, 3, 3, 3, 4, 4, 5, 5, 6, 6)
-
-UTF8SMModel = {'classTable': UTF8_cls,
- 'classFactor': 16,
- 'stateTable': UTF8_st,
- 'charLenTable': UTF8CharLenTable,
- 'name': 'UTF-8'}
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/sbcharsetprober.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/sbcharsetprober.py
deleted file mode 100644
index da07116..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/sbcharsetprober.py
+++ /dev/null
@@ -1,106 +0,0 @@
-######################## BEGIN LICENSE BLOCK ########################
-# The Original Code is Mozilla Universal charset detector code.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 2001
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-# Mark Pilgrim - port to Python
-# Shy Shalom - original C code
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301 USA
-######################### END LICENSE BLOCK #########################
-
-import constants, sys
-from charsetprober import CharSetProber
-
-SAMPLE_SIZE = 64
-SB_ENOUGH_REL_THRESHOLD = 1024
-POSITIVE_SHORTCUT_THRESHOLD = 0.95
-NEGATIVE_SHORTCUT_THRESHOLD = 0.05
-SYMBOL_CAT_ORDER = 250
-NUMBER_OF_SEQ_CAT = 4
-POSITIVE_CAT = NUMBER_OF_SEQ_CAT - 1
-#NEGATIVE_CAT = 0
-
-class SingleByteCharSetProber(CharSetProber):
- def __init__(self, model, reversed=constants.False, nameProber=None):
- CharSetProber.__init__(self)
- self._mModel = model
- self._mReversed = reversed # TRUE if we need to reverse every pair in the model lookup
- self._mNameProber = nameProber # Optional auxiliary prober for name decision
- self.reset()
-
- def reset(self):
- CharSetProber.reset(self)
- self._mLastOrder = 255 # char order of last character
- self._mSeqCounters = [0] * NUMBER_OF_SEQ_CAT
- self._mTotalSeqs = 0
- self._mTotalChar = 0
- self._mFreqChar = 0 # characters that fall in our sampling range
-
- def get_charset_name(self):
- if self._mNameProber:
- return self._mNameProber.get_charset_name()
- else:
- return self._mModel['charsetName']
-
- def feed(self, aBuf):
- if not self._mModel['keepEnglishLetter']:
- aBuf = self.filter_without_english_letters(aBuf)
- aLen = len(aBuf)
- if not aLen:
- return self.get_state()
- for c in aBuf:
- order = self._mModel['charToOrderMap'][ord(c)]
- if order < SYMBOL_CAT_ORDER:
- self._mTotalChar += 1
- if order < SAMPLE_SIZE:
- self._mFreqChar += 1
- if self._mLastOrder < SAMPLE_SIZE:
- self._mTotalSeqs += 1
- if not self._mReversed:
- self._mSeqCounters[self._mModel['precedenceMatrix'][(self._mLastOrder * SAMPLE_SIZE) + order]] += 1
- else: # reverse the order of the letters in the lookup
- self._mSeqCounters[self._mModel['precedenceMatrix'][(order * SAMPLE_SIZE) + self._mLastOrder]] += 1
- self._mLastOrder = order
-
- if self.get_state() == constants.eDetecting:
- if self._mTotalSeqs > SB_ENOUGH_REL_THRESHOLD:
- cf = self.get_confidence()
- if cf > POSITIVE_SHORTCUT_THRESHOLD:
- if constants._debug:
- sys.stderr.write('%s confidence = %s, we have a winner\n' % (self._mModel['charsetName'], cf))
- self._mState = constants.eFoundIt
- elif cf < NEGATIVE_SHORTCUT_THRESHOLD:
- if constants._debug:
- sys.stderr.write('%s confidence = %s, below negative shortcut threshhold %s\n' % (self._mModel['charsetName'], cf, NEGATIVE_SHORTCUT_THRESHOLD))
- self._mState = constants.eNotMe
-
- return self.get_state()
-
- def get_confidence(self):
- r = 0.01
- if self._mTotalSeqs > 0:
-# print self._mSeqCounters[POSITIVE_CAT], self._mTotalSeqs, self._mModel['mTypicalPositiveRatio']
- r = (1.0 * self._mSeqCounters[POSITIVE_CAT]) / self._mTotalSeqs / self._mModel['mTypicalPositiveRatio']
-# print r, self._mFreqChar, self._mTotalChar
- r = r * self._mFreqChar / self._mTotalChar
- if r >= 1.0:
- r = 0.99
- return r
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/sbcsgroupprober.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/sbcsgroupprober.py
deleted file mode 100644
index d19160c..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/sbcsgroupprober.py
+++ /dev/null
@@ -1,64 +0,0 @@
-######################## BEGIN LICENSE BLOCK ########################
-# The Original Code is Mozilla Universal charset detector code.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 2001
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-# Mark Pilgrim - port to Python
-# Shy Shalom - original C code
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301 USA
-######################### END LICENSE BLOCK #########################
-
-import constants, sys
-from charsetgroupprober import CharSetGroupProber
-from sbcharsetprober import SingleByteCharSetProber
-from langcyrillicmodel import Win1251CyrillicModel, Koi8rModel, Latin5CyrillicModel, MacCyrillicModel, Ibm866Model, Ibm855Model
-from langgreekmodel import Latin7GreekModel, Win1253GreekModel
-from langbulgarianmodel import Latin5BulgarianModel, Win1251BulgarianModel
-from langhungarianmodel import Latin2HungarianModel, Win1250HungarianModel
-from langthaimodel import TIS620ThaiModel
-from langhebrewmodel import Win1255HebrewModel
-from hebrewprober import HebrewProber
-
-class SBCSGroupProber(CharSetGroupProber):
- def __init__(self):
- CharSetGroupProber.__init__(self)
- self._mProbers = [ \
- SingleByteCharSetProber(Win1251CyrillicModel),
- SingleByteCharSetProber(Koi8rModel),
- SingleByteCharSetProber(Latin5CyrillicModel),
- SingleByteCharSetProber(MacCyrillicModel),
- SingleByteCharSetProber(Ibm866Model),
- SingleByteCharSetProber(Ibm855Model),
- SingleByteCharSetProber(Latin7GreekModel),
- SingleByteCharSetProber(Win1253GreekModel),
- SingleByteCharSetProber(Latin5BulgarianModel),
- SingleByteCharSetProber(Win1251BulgarianModel),
- SingleByteCharSetProber(Latin2HungarianModel),
- SingleByteCharSetProber(Win1250HungarianModel),
- SingleByteCharSetProber(TIS620ThaiModel),
- ]
- hebrewProber = HebrewProber()
- logicalHebrewProber = SingleByteCharSetProber(Win1255HebrewModel, constants.False, hebrewProber)
- visualHebrewProber = SingleByteCharSetProber(Win1255HebrewModel, constants.True, hebrewProber)
- hebrewProber.set_model_probers(logicalHebrewProber, visualHebrewProber)
- self._mProbers.extend([hebrewProber, logicalHebrewProber, visualHebrewProber])
-
- self.reset()
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/sjisprober.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/sjisprober.py
deleted file mode 100644
index fea2690..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/sjisprober.py
+++ /dev/null
@@ -1,85 +0,0 @@
-######################## BEGIN LICENSE BLOCK ########################
-# The Original Code is mozilla.org code.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 1998
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-# Mark Pilgrim - port to Python
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301 USA
-######################### END LICENSE BLOCK #########################
-
-from mbcharsetprober import MultiByteCharSetProber
-from codingstatemachine import CodingStateMachine
-from chardistribution import SJISDistributionAnalysis
-from jpcntx import SJISContextAnalysis
-from mbcssm import SJISSMModel
-import constants, sys
-from constants import eStart, eError, eItsMe
-
-class SJISProber(MultiByteCharSetProber):
- def __init__(self):
- MultiByteCharSetProber.__init__(self)
- self._mCodingSM = CodingStateMachine(SJISSMModel)
- self._mDistributionAnalyzer = SJISDistributionAnalysis()
- self._mContextAnalyzer = SJISContextAnalysis()
- self.reset()
-
- def reset(self):
- MultiByteCharSetProber.reset(self)
- self._mContextAnalyzer.reset()
-
- def get_charset_name(self):
- return "SHIFT_JIS"
-
- def feed(self, aBuf):
- aLen = len(aBuf)
- for i in range(0, aLen):
- codingState = self._mCodingSM.next_state(aBuf[i])
- if codingState == eError:
- if constants._debug:
- sys.stderr.write(self.get_charset_name() + ' prober hit error at byte ' + str(i) + '\n')
- self._mState = constants.eNotMe
- break
- elif codingState == eItsMe:
- self._mState = constants.eFoundIt
- break
- elif codingState == eStart:
- charLen = self._mCodingSM.get_current_charlen()
- if i == 0:
- self._mLastChar[1] = aBuf[0]
- self._mContextAnalyzer.feed(self._mLastChar[2 - charLen :], charLen)
- self._mDistributionAnalyzer.feed(self._mLastChar, charLen)
- else:
- self._mContextAnalyzer.feed(aBuf[i + 1 - charLen : i + 3 - charLen], charLen)
- self._mDistributionAnalyzer.feed(aBuf[i - 1 : i + 1], charLen)
-
- self._mLastChar[0] = aBuf[aLen - 1]
-
- if self.get_state() == constants.eDetecting:
- if self._mContextAnalyzer.got_enough_data() and \
- (self.get_confidence() > constants.SHORTCUT_THRESHOLD):
- self._mState = constants.eFoundIt
-
- return self.get_state()
-
- def get_confidence(self):
- contxtCf = self._mContextAnalyzer.get_confidence()
- distribCf = self._mDistributionAnalyzer.get_confidence()
- return max(contxtCf, distribCf)
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/test.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/test.py
deleted file mode 100644
index 2ebf3a4..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/test.py
+++ /dev/null
@@ -1,20 +0,0 @@
-import sys, glob
-sys.path.insert(0, '..')
-from chardet.universaldetector import UniversalDetector
-
-count = 0
-u = UniversalDetector()
-for f in glob.glob(sys.argv[1]):
- print f.ljust(60),
- u.reset()
- for line in file(f, 'rb'):
- u.feed(line)
- if u.done: break
- u.close()
- result = u.result
- if result['encoding']:
- print result['encoding'], 'with confidence', result['confidence']
- else:
- print '******** no result'
- count += 1
-print count, 'tests'
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/universaldetector.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/universaldetector.py
deleted file mode 100644
index 809df22..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/universaldetector.py
+++ /dev/null
@@ -1,154 +0,0 @@
-######################## BEGIN LICENSE BLOCK ########################
-# The Original Code is Mozilla Universal charset detector code.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 2001
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-# Mark Pilgrim - port to Python
-# Shy Shalom - original C code
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301 USA
-######################### END LICENSE BLOCK #########################
-
-import constants, sys
-from latin1prober import Latin1Prober # windows-1252
-from mbcsgroupprober import MBCSGroupProber # multi-byte character sets
-from sbcsgroupprober import SBCSGroupProber # single-byte character sets
-from escprober import EscCharSetProber # ISO-2122, etc.
-import re
-
-MINIMUM_THRESHOLD = 0.20
-ePureAscii = 0
-eEscAscii = 1
-eHighbyte = 2
-
-class UniversalDetector:
- def __init__(self):
- self._highBitDetector = re.compile(r'[\x80-\xFF]')
- self._escDetector = re.compile(r'(\033|~{)')
- self._mEscCharSetProber = None
- self._mCharSetProbers = []
- self.reset()
-
- def reset(self):
- self.result = {'encoding': None, 'confidence': 0.0}
- self.done = constants.False
- self._mStart = constants.True
- self._mGotData = constants.False
- self._mInputState = ePureAscii
- self._mLastChar = ''
- if self._mEscCharSetProber:
- self._mEscCharSetProber.reset()
- for prober in self._mCharSetProbers:
- prober.reset()
-
- def feed(self, aBuf):
- if self.done: return
-
- aLen = len(aBuf)
- if not aLen: return
-
- if not self._mGotData:
- # If the data starts with BOM, we know it is UTF
- if aBuf[:3] == '\xEF\xBB\xBF':
- # EF BB BF UTF-8 with BOM
- self.result = {'encoding': "UTF-8", 'confidence': 1.0}
- elif aBuf[:4] == '\xFF\xFE\x00\x00':
- # FF FE 00 00 UTF-32, little-endian BOM
- self.result = {'encoding': "UTF-32LE", 'confidence': 1.0}
- elif aBuf[:4] == '\x00\x00\xFE\xFF':
- # 00 00 FE FF UTF-32, big-endian BOM
- self.result = {'encoding': "UTF-32BE", 'confidence': 1.0}
- elif aBuf[:4] == '\xFE\xFF\x00\x00':
- # FE FF 00 00 UCS-4, unusual octet order BOM (3412)
- self.result = {'encoding': "X-ISO-10646-UCS-4-3412", 'confidence': 1.0}
- elif aBuf[:4] == '\x00\x00\xFF\xFE':
- # 00 00 FF FE UCS-4, unusual octet order BOM (2143)
- self.result = {'encoding': "X-ISO-10646-UCS-4-2143", 'confidence': 1.0}
- elif aBuf[:2] == '\xFF\xFE':
- # FF FE UTF-16, little endian BOM
- self.result = {'encoding': "UTF-16LE", 'confidence': 1.0}
- elif aBuf[:2] == '\xFE\xFF':
- # FE FF UTF-16, big endian BOM
- self.result = {'encoding': "UTF-16BE", 'confidence': 1.0}
-
- self._mGotData = constants.True
- if self.result['encoding'] and (self.result['confidence'] > 0.0):
- self.done = constants.True
- return
-
- if self._mInputState == ePureAscii:
- if self._highBitDetector.search(aBuf):
- self._mInputState = eHighbyte
- elif (self._mInputState == ePureAscii) and self._escDetector.search(self._mLastChar + aBuf):
- self._mInputState = eEscAscii
-
- self._mLastChar = aBuf[-1]
-
- if self._mInputState == eEscAscii:
- if not self._mEscCharSetProber:
- self._mEscCharSetProber = EscCharSetProber()
- if self._mEscCharSetProber.feed(aBuf) == constants.eFoundIt:
- self.result = {'encoding': self._mEscCharSetProber.get_charset_name(),
- 'confidence': self._mEscCharSetProber.get_confidence()}
- self.done = constants.True
- elif self._mInputState == eHighbyte:
- if not self._mCharSetProbers:
- self._mCharSetProbers = [MBCSGroupProber(), SBCSGroupProber(), Latin1Prober()]
- for prober in self._mCharSetProbers:
- if prober.feed(aBuf) == constants.eFoundIt:
- self.result = {'encoding': prober.get_charset_name(),
- 'confidence': prober.get_confidence()}
- self.done = constants.True
- break
-
- def close(self):
- if self.done: return
- if not self._mGotData:
- if constants._debug:
- sys.stderr.write('no data received!\n')
- return
- self.done = constants.True
-
- if self._mInputState == ePureAscii:
- self.result = {'encoding': 'ascii', 'confidence': 1.0}
- return self.result
-
- if self._mInputState == eHighbyte:
- proberConfidence = None
- maxProberConfidence = 0.0
- maxProber = None
- for prober in self._mCharSetProbers:
- if not prober: continue
- proberConfidence = prober.get_confidence()
- if proberConfidence > maxProberConfidence:
- maxProberConfidence = proberConfidence
- maxProber = prober
- if maxProber and (maxProberConfidence > MINIMUM_THRESHOLD):
- self.result = {'encoding': maxProber.get_charset_name(),
- 'confidence': maxProber.get_confidence()}
- return self.result
-
- if constants._debug:
- sys.stderr.write('no probers hit minimum threshhold\n')
- for prober in self._mCharSetProbers[0].mProbers:
- if not prober: continue
- sys.stderr.write('%s confidence = %s\n' % \
- (prober.get_charset_name(), \
- prober.get_confidence()))
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/utf8prober.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/utf8prober.py
deleted file mode 100644
index c1792bb..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/chardet/utf8prober.py
+++ /dev/null
@@ -1,76 +0,0 @@
-######################## BEGIN LICENSE BLOCK ########################
-# The Original Code is mozilla.org code.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 1998
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-# Mark Pilgrim - port to Python
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301 USA
-######################### END LICENSE BLOCK #########################
-
-import constants, sys
-from constants import eStart, eError, eItsMe
-from charsetprober import CharSetProber
-from codingstatemachine import CodingStateMachine
-from mbcssm import UTF8SMModel
-
-ONE_CHAR_PROB = 0.5
-
-class UTF8Prober(CharSetProber):
- def __init__(self):
- CharSetProber.__init__(self)
- self._mCodingSM = CodingStateMachine(UTF8SMModel)
- self.reset()
-
- def reset(self):
- CharSetProber.reset(self)
- self._mCodingSM.reset()
- self._mNumOfMBChar = 0
-
- def get_charset_name(self):
- return "utf-8"
-
- def feed(self, aBuf):
- for c in aBuf:
- codingState = self._mCodingSM.next_state(c)
- if codingState == eError:
- self._mState = constants.eNotMe
- break
- elif codingState == eItsMe:
- self._mState = constants.eFoundIt
- break
- elif codingState == eStart:
- if self._mCodingSM.get_current_charlen() >= 2:
- self._mNumOfMBChar += 1
-
- if self.get_state() == constants.eDetecting:
- if self.get_confidence() > constants.SHORTCUT_THRESHOLD:
- self._mState = constants.eFoundIt
-
- return self.get_state()
-
- def get_confidence(self):
- unlike = 0.99
- if self._mNumOfMBChar < 6:
- for i in range(0, self._mNumOfMBChar):
- unlike = unlike * ONE_CHAR_PROB
- return 1.0 - unlike
- else:
- return unlike
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/license.txt b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/license.txt
deleted file mode 100644
index ed95cfe..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/license.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-"None are so hopelessly enslaved as those who falsely believe they are free."
- Johann Wolfgang von Goethe
-
-Copyright (C) 2012 Tito Bouzout
-
-This license apply to all the files inside this program unless noted
-different for some files or portions of code inside these files.
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation. http://www.gnu.org/licenses/gpl.html
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see http://www.gnu.org/licenses/gpl.html
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/readme.md b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/readme.md
deleted file mode 100644
index 19d58f8..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/EncodingHelper/readme.md
+++ /dev/null
@@ -1,65 +0,0 @@
-For Sublime Text 3 See: https://github.com/SublimeText/EncodingHelper/tree/st3
-
-Description
-------------------
-
-Encoding Helper is a [Sublime Text](http://www.sublimetext.com/ ) plug-in which provides the following features:
-
- * attempts to guess encoding of files
- * show encoding on status bar
- * show when the current document is maybe broken because was opened with an incorrect encoding
- * convert to UTF-8 from a variete of encodings organized in a menu.
- * convert to UTF-8 quickly from guessed encoding via menuitem
- * convert to UTF-8 automatically when opening a file via some defined encodings found on User preferences
-
-You should know that attempt to guess the encoding of a file is hard and the results for some encodings is not 100% acurrated. Also, is a task that consume CPU, for this reason this plug-in includes a lot of optimizations.
-
-
-
-Some more info
-------------------
-
-* I'm not an expert on encodings, don't talk to me as an expert. I just like a lot to build software compatible with every language using UTF-8
-* python chardet library is a port of chardet by Mozilla http://www-archive.mozilla.org/projects/intl/chardet.html
-* python chardet library is a 'Gone' project http://feedparser.org/
-* By looking for the null character '\0' on files, means that every UTF16 file will be marked as binary ( same as in git source )
-* When converting a file to UTF-8 from some other encoding, the plugin calls to codecs.open with the selected encoding as argument. See http://docs.python.org/library/codecs.html
-* If you are going to report that some file is reported with an incorrect encoding, please upload the file as is to some reliable resource and provide detailed information. Please be informed that even doing this I'm unable to look into the low levels on why this is happening. This is just to collect data that maybe is informative to someone curious on this topic.
-* Just for fun, It would be nice if someone can create a dataset of pure txt files with every char found in a complete list of character sets. This: http://www.mauvecloud.net/charsets/manual/index.html but with the files in this format: http://vancouver-webpages.com/multilingual/russian-koi.html ( without html, without imgs, just text )
-
-Resources
-------------------
-
-chardet library:
-http://pypi.python.org/pypi/chardet
-
-dataset small:
-http://vancouver-webpages.com/multilingual/
-http://charsetplus.tripod.com/HTMLs/index.html
-
-dataset huge:
-http://www.mauvecloud.net/charsets/index.html
-
-codecs:
-http://docs.python.org/library/codecs.html
-
-Installation
-------------------
-
-Install this repository via "Package Control" http://wbond.net/sublime_packages/package_control
-
-Source-code
-------------------
-
-https://github.com/SublimeText/EncodingHelper
-
-Forum Thread
-------------------
-
-http://www.sublimetext.com/forum/viewtopic.php?f=5&t=3453
-
-
-License
-------------------
-
-See license.txt
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/KeymapManager/Default (Linux).sublime-keymap b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/KeymapManager/Default (Linux).sublime-keymap
deleted file mode 100644
index 2a8b9ca..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/KeymapManager/Default (Linux).sublime-keymap
+++ /dev/null
@@ -1,8 +0,0 @@
-[
- {
- "command": "keymap_manager",
- "keys": [
- "ctrl+alt+k"
- ]
- }
-]
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/KeymapManager/Default (OSX).sublime-keymap b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/KeymapManager/Default (OSX).sublime-keymap
deleted file mode 100644
index 2a8b9ca..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/KeymapManager/Default (OSX).sublime-keymap
+++ /dev/null
@@ -1,8 +0,0 @@
-[
- {
- "command": "keymap_manager",
- "keys": [
- "ctrl+alt+k"
- ]
- }
-]
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/KeymapManager/Default (Windows).sublime-keymap b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/KeymapManager/Default (Windows).sublime-keymap
deleted file mode 100644
index e6e0cb7..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/KeymapManager/Default (Windows).sublime-keymap
+++ /dev/null
@@ -1,8 +0,0 @@
-[
- {
- "command": "keymap_manager",
- "keys": [
- "ctrl+alt+k"
- ]
- }
-]
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/KeymapManager/KeymapManager.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/KeymapManager/KeymapManager.py
deleted file mode 100644
index 3d0ae0d..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/KeymapManager/KeymapManager.py
+++ /dev/null
@@ -1,138 +0,0 @@
-import sublime, sublime_plugin
-import os
-import json
-
-settings = sublime.load_settings("KeymapManager.sublime-settings")
-
-class KeymapManagerCommand(sublime_plugin.TextCommand):
- """
- keymap manager for plugins
- """
- osname = sublime.platform()
- ctrlname = "ctrl"
- #ctrlname is cmd on macos
- if osname.lower() == "osx":
- ctrlname = "cmd"
- #add some default very usefull commands
- defaultCommand = [
- {"name": "Goto Anything...", "keys": [ctrlname + "+p"], "command": "show_overlay", "args": {"overlay": "goto", "show_files": True} },
- {"name": "Command Palette", "keys": [ctrlname + "+shift+p"], "command": "show_overlay", "args": {"overlay": "command_palette"} },
- {"name": "Goto Symbol...", "keys": [ctrlname + "+r"], "command": "show_overlay", "args": {"overlay": "goto", "text": "@"} },
- {"name": "Goto Line...", "keys": [ctrlname + "+g"], "command": "show_overlay", "args": {"overlay": "goto", "text": ":"} },
- {"name": "Search Keywords", "keys": [ctrlname + "+;"], "command": "show_overlay", "args": {"overlay": "goto", "text": "#"} },
- {"name": "Show Console", "keys": [ctrlname + "+`"], "command": "show_panel", "args": {"panel": "console", "toggle": True} }
- ]
- #installed plugins list
- plugins = None
-
- plugins_keys = None
-
- def run(self, edit):
- self.defaultCommand.sort(key=lambda x: x["name"].lower())
-
- if self.plugins == None:
- self.plugins = []
- if self.plugins_keys == None:
- self.plugins_keys = {}
- path = sublime.packages_path()
- dirs = os.listdir(path)
- #sort with insensitive
- dirs.sort(key=lambda x: x.lower())
- plugins = []
- ignored_packages = settings.get("ignored_packages") or []
- single_max_nums = int(settings.get("single_max_nums") or 3)
- for name in dirs:
- if name in ignored_packages:
- continue
- dir = path + '/' + name + '/'
- if not os.path.isdir(dir):
- continue
- platform = sublime.platform()
- platform = platform[0].upper() + platform[1:].lower()
- keymapFile = dir + "Default (" + platform + ").sublime-keymap"
- if not os.path.isfile(keymapFile):
- continue
- #plugins.append(keymapFile)
- with open(keymapFile) as f:
- content = open(keymapFile).read()
- try:
- jsonData = json.loads(content)
- except (ValueError):
- continue
-
- if not isinstance(jsonData, list):
- continue
- i = 0
- for item in jsonData:
- if "keys" not in item or "command" not in item:
- continue
- if single_max_nums <= 0 or i <= single_max_nums :
- keys = item["keys"]
- if not isinstance(keys, list):
- keys = [keys]
- for key in keys:
- if key not in self.plugins_keys:
- self.plugins_keys[key] = []
- if item["command"] not in self.plugins_keys[key]:
- self.plugins_keys[key].append(item["command"])
-
- if isinstance(keys, list):
- keys = ", " . join(keys)
- command = item["command"]
- item["name"] = name
- plugins.append([name, command + " : " + keys])
- self.plugins.append(item)
- i += 1
-
- for item in self.defaultCommand:
- plugins.append([item['name'], item['command'] + " : " + ",".join(item['keys'])])
- self.plugins.append(item)
-
- plugins.append(["KeymapConflict", "check plugins keymap conflict"])
- self.plugins.append({"name": "KeymapConflict"})
-
- self.view.window().show_quick_panel(plugins, self.panel_done)
-
- #panel done
- def panel_done(self, picked):
- if picked == -1:
- return
- item = self.plugins[picked]
- if item["name"] == "KeymapConflict":
- self.checkKeymapConflict()
- return
- if self.checkContext(item) == False:
- return
- args = {}
- if "args" in item:
- args = item['args']
- #thanks wuliang
- self.view.run_command(item['command'], args)
- self.view.window().run_command(item['command'], args)
- sublime.run_command(item['command'], args)
-
- #check context condition
- def checkContext(self, plugin):
- return True
- if "context" not in plugin:
- return True
- if "window" in plugin and plugin["window"]:
- return True
- context = plugin["context"]
- name = plugin["name"]
- path = path = sublime.packages_path() + '/' + name + '/'
- import glob
- pyFiles = glob.glob("*.py")
- sublime.status_message(",".join(pyFiles))
- return True
-
- def checkKeymapConflict(self):
- keymapConflict=[]
- for key,item in self.plugins_keys.items():
- if len(item) > 1:
- keymapConflict.append([key, "Conflict in \""+", ".join(item) + "\" commands"])
- if len(keymapConflict) > 0:
- self.view.window().show_quick_panel(keymapConflict, self.check_panel_done)
-
- def check_panel_done(self, picked):
- pass
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/KeymapManager/KeymapManager.sublime-settings b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/KeymapManager/KeymapManager.sublime-settings
deleted file mode 100644
index aa63c1b..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/KeymapManager/KeymapManager.sublime-settings
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "ignored_packages": ["CSS", "Vintage", "User", "Default", "KeymapManager"],
- "single_max_nums": 3
-}
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/KeymapManager/Main.sublime-menu b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/KeymapManager/Main.sublime-menu
deleted file mode 100644
index b5c1344..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/KeymapManager/Main.sublime-menu
+++ /dev/null
@@ -1,13 +0,0 @@
-[
- {
- "id": "view",
- "children":
- [
- {
- "caption": "Keymap Manager",
- "id": "keymap-manager",
- "command": "keymap_manager"
- }
- ]
- }
-]
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/KeymapManager/README.md b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/KeymapManager/README.md
deleted file mode 100644
index 34872d2..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/KeymapManager/README.md
+++ /dev/null
@@ -1,4 +0,0 @@
-## about
-KeymapManager plugin can manage all plugins keymap what user installed.
-## how to use
-view -> Keymap Manager or ctrl+alt+K
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/KeymapManager/package-metadata.json b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/KeymapManager/package-metadata.json
deleted file mode 100644
index 2aa11d6..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/KeymapManager/package-metadata.json
+++ /dev/null
@@ -1 +0,0 @@
-{"url": "https://github.com/welefen/KeymapManager", "version": "2012.08.20.03.05.38", "description": "KeymapManager plugin for sublime text 2"}
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/MoveTab/.gitignore b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/MoveTab/.gitignore
deleted file mode 100644
index 0205d62..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/MoveTab/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-*.pyc
-.DS_Store
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/MoveTab/Default (Linux).sublime-keymap b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/MoveTab/Default (Linux).sublime-keymap
deleted file mode 100644
index 3d93b6c..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/MoveTab/Default (Linux).sublime-keymap
+++ /dev/null
@@ -1,23 +0,0 @@
-[
- // Uncomment to enable.
- // {
- // "keys": ["ctrl+shift+end"],
- // "command": "move_tab",
- // "args": { "position": "999" }
- // },
- // {
- // "keys": ["ctrl+shift+home"],
- // "command": "move_tab",
- // "args": { "position": "0" }
- // },
- {
- "keys": ["ctrl+shift+pageup"],
- "command": "move_tab",
- "args": { "position": "-1" }
- },
- {
- "keys": ["ctrl+shift+pagedown"],
- "command": "move_tab",
- "args": { "position": "+1" }
- }
-]
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/MoveTab/Default (OSX).sublime-keymap b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/MoveTab/Default (OSX).sublime-keymap
deleted file mode 100644
index 74a889f..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/MoveTab/Default (OSX).sublime-keymap
+++ /dev/null
@@ -1,23 +0,0 @@
-[
- // Uncomment to enable.
- // {
- // "keys": ["super+alt+shift+down"],
- // "command": "move_tab",
- // "args": { "position": "999" }
- // },
- // {
- // "keys": ["super+alt+shift+up"],
- // "command": "move_tab",
- // "args": { "position": "0" }
- // },
- {
- "keys": ["super+alt+shift+left"],
- "command": "move_tab",
- "args": { "position": "-1" }
- },
- {
- "keys": ["super+alt+shift+right"],
- "command": "move_tab",
- "args": { "position": "+1" }
- }
-]
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/MoveTab/Default (Windows).sublime-keymap b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/MoveTab/Default (Windows).sublime-keymap
deleted file mode 100644
index 3d93b6c..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/MoveTab/Default (Windows).sublime-keymap
+++ /dev/null
@@ -1,23 +0,0 @@
-[
- // Uncomment to enable.
- // {
- // "keys": ["ctrl+shift+end"],
- // "command": "move_tab",
- // "args": { "position": "999" }
- // },
- // {
- // "keys": ["ctrl+shift+home"],
- // "command": "move_tab",
- // "args": { "position": "0" }
- // },
- {
- "keys": ["ctrl+shift+pageup"],
- "command": "move_tab",
- "args": { "position": "-1" }
- },
- {
- "keys": ["ctrl+shift+pagedown"],
- "command": "move_tab",
- "args": { "position": "+1" }
- }
-]
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/MoveTab/Default.sublime-commands b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/MoveTab/Default.sublime-commands
deleted file mode 100644
index fab32c3..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/MoveTab/Default.sublime-commands
+++ /dev/null
@@ -1,22 +0,0 @@
-[
- {
- "caption": "Move Tab: To the left",
- "command": "move_tab",
- "args": { "position": "-1" }
- },
- {
- "caption": "Move Tab: To the right",
- "command": "move_tab",
- "args": { "position": "+1" }
- },
- {
- "caption": "Move Tab: To first position",
- "command": "move_tab",
- "args": { "position": "0" }
- },
- {
- "caption": "Move Tab: To last position",
- "command": "move_tab",
- "args": { "position": "999" }
- }
-]
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/MoveTab/LICENSE.txt b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/MoveTab/LICENSE.txt
deleted file mode 100644
index b699169..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/MoveTab/LICENSE.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-Copyright (c) 2012 Frédéric Massart - FMCorz.net
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
-IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/MoveTab/README.md b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/MoveTab/README.md
deleted file mode 100644
index 9244e8a..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/MoveTab/README.md
+++ /dev/null
@@ -1,42 +0,0 @@
-Move Tab
-========
-
-Plugin for Sublime Text to move tabs around.
-
-Usage
------
-
-The following commands are accessible via the command palette:
-
-- Move Tab: To the left
-- Move Tab: To the right
-- Move Tab: To first position
-- Move Tab: To last position
-
-The default shortcuts are:
-
-- Linux/Windows: CTRL + Shift + (Page up / Page down)
-- MacOS X: Command + Alt + Shift + (Left / Right)
-
-*Shortcuts to move to first or last position are disabled by default.*
-
-Requirements
-------------
-
-Sublime Text 2 or 3.
-
-Installation
-------------
-
-Use the Package Control.
-
- Command palette > Package Control: Install Package
-
-Alternatively, simply clone this repository into the Packages directory.
-
- Preferences > Browse Packages...
-
-License
--------
-
-Licensed under the [MIT License](http://www.opensource.org/licenses/mit-license.php)
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/MoveTab/move_tab.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/MoveTab/move_tab.py
deleted file mode 100644
index 703d183..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/MoveTab/move_tab.py
+++ /dev/null
@@ -1,62 +0,0 @@
-# -*- coding: utf-8 -*-
-
-"""
-Move Tab
-
-Plugin for Sublime Text to move tabs around
-
-Copyright (c) 2012 Frédéric Massart - FMCorz.net
-
-Licensed under The MIT License
-Redistributions of files must retain the above copyright notice.
-
-http://github.com/FMCorz/MoveTab
-"""
-
-import sublime, sublime_plugin
-
-class MoveTabCommand(sublime_plugin.WindowCommand):
-
- def run(self, position):
- position = str(position)
- view = self.window.active_view()
- (group, index) = self.window.get_view_index(view)
- if index < 0:
- return
- count = len(self.window.views_in_group(group))
-
- direction = None
- if position.startswith('-') or position.startswith('+'):
- direction = position[0]
- steps = int(position[1:])
- if direction == '-':
- position = index - steps
- else:
- position = index + steps
-
- position = int(position)
- if position < 0:
- position = count - 1
- elif position > count - 1:
- if direction: position = 0
- else: position = count - 1
-
- # Avoid flashing tab when moving to same index
- if position == index:
- return
-
- self.window.set_view_index(view, group, position)
- self.window.focus_view(view)
-
- def is_enabled(self):
- view = self.window.active_view()
- if view == None:
- return False
- (group, index) = self.window.get_view_index(view)
- return len(self.window.views_in_group(group)) > 1
-
- def is_visible(self):
- return True
-
- def description(self):
- return None
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/MoveTab/package-metadata.json b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/MoveTab/package-metadata.json
deleted file mode 100644
index 584be22..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/MoveTab/package-metadata.json
+++ /dev/null
@@ -1 +0,0 @@
-{"url": "https://github.com/SublimeText/MoveTab", "version": "2013.09.12.08.16.08", "description": "Plugin for Sublime Text to move tabs around"}
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Navigation History/Default (Linux).sublime-keymap b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Navigation History/Default (Linux).sublime-keymap
deleted file mode 100644
index c2559ab..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Navigation History/Default (Linux).sublime-keymap
+++ /dev/null
@@ -1,4 +0,0 @@
-[
- { "keys": ["ctrl+alt+left"], "command": "navigation_history_back"},
- { "keys": ["ctrl+alt+right"], "command": "navigation_history_forward"}
-]
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Navigation History/Default (OSX).sublime-keymap b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Navigation History/Default (OSX).sublime-keymap
deleted file mode 100644
index fc80b91..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Navigation History/Default (OSX).sublime-keymap
+++ /dev/null
@@ -1,4 +0,0 @@
-[
- { "keys": ["super+ctrl+alt+left"], "command": "navigation_history_back"},
- { "keys": ["super+ctrl+alt+right"], "command": "navigation_history_forward"}
-]
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Navigation History/Default (Windows).sublime-keymap b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Navigation History/Default (Windows).sublime-keymap
deleted file mode 100644
index c2559ab..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Navigation History/Default (Windows).sublime-keymap
+++ /dev/null
@@ -1,4 +0,0 @@
-[
- { "keys": ["ctrl+alt+left"], "command": "navigation_history_back"},
- { "keys": ["ctrl+alt+right"], "command": "navigation_history_forward"}
-]
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Navigation History/README.md b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Navigation History/README.md
deleted file mode 100644
index 51720fd..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Navigation History/README.md
+++ /dev/null
@@ -1,44 +0,0 @@
-Sublime Navigation History
-========================
-
-A Sublime Text plugin to jump forward and back around your code.
-
-### Installation ###
-
-**ST2**
-
-1. Install package control if you haven't already http://wbond.net/sublime_packages/package_control).
-2. Search for package "Sublime Navigation History"
-3. Install and enjoy.
-
-**ST3**
-
-This plugin is no longer needed for ST3, as of build 3019 Navigation History has been natively added via the new Jump Back and Jump Forward commands. They are called "jump_back" and "jump_forward" and you can add them to your key bindings (Preferences -> Key Bindings - User) with the following snippet:
-
- { "keys": ["ctrl+alt+left"], "command": "jump_back" },
- { "keys": ["ctrl+alt+right"], "command": "jump_forward" }
-
-
-### Controls ###
-
-**OSX**
-* Command + Control + Alt + Left - Navigate Backwards
-* Command + Control + Alt + Right - Navigate Forwards
-
-**Windows / Linux**
-* Control + Alt + Left - Navigate Backwards
-* Control + Alt + Right - Navigate Forwards
-
-
-### Issues ###
-
-This plugin does not track small navigation changes such as moving one line or character, this is so it's easier to go back to the last big block of code you were working on and moving one line or character backwards via a hotkey is not something most users want to do.
-
-
-### Credits ###
-
-This was not originally created by me, it was created by Martin Aspeli (https://github.com/optilude) and came from this forum thread: http://www.sublimetext.com/forum/viewtopic.php?f=5&t=2738
-
-I'm hosting this repository to keep it updated for Sublime Text 3 and also to add it to Package Control (because everyone should have access to such an awesome plugin).
-
-
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Navigation History/navigation-history.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Navigation History/navigation-history.py
deleted file mode 100644
index df0d698..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Navigation History/navigation-history.py
+++ /dev/null
@@ -1,179 +0,0 @@
-# Forked from: https://github.com/optilude/SublimeTextMisc/blob/master/navigationHistory.py
-import sublime, sublime_plugin
-from collections import deque
-
-MAX_SIZE = 64
-LINE_THRESHOLD = 2
-
-class Location(object):
- """A location in the history
- """
-
- def __init__(self, path, line, col):
- self.path = path
- self.line = line
- self.col = col
-
- def __eq__(self, other):
- return self.path == other.path and self.line == other.line
-
- def __ne__(self, other):
- return not self.__eq__(other)
-
- def __nonzero__(self):
- return (self.path is not None and self.line is not None)
-
- def near(self, other):
- return self.path == other.path and abs(self.line - other.line) <= LINE_THRESHOLD
-
- def copy(self):
- return Location(self.path, self.line, self.col)
-
-class History(object):
- """Keep track of the history for a single window
- """
-
- def __init__(self, max_size=MAX_SIZE):
- self._current = None # current location as far as the
- # history is concerned
- self._back = deque([], max_size) # items before self._current
- self._forward = deque([], max_size) # items after self._current
-
- self._last_movement = None # last recorded movement
-
- def record_movement(self, location):
- """Record movement to the given location, pushing history if
- applicable
- """
-
- if location:
- if self.has_changed(location):
- #Push the current location if it hasn't been added already, so when going back after using goto it goes to the correct location
- if self._back and self._last_movement is not self._back[-1]:
- self.push(self._last_movement)
- self.push(location)
- self.mark_location(location)
-
- def mark_location(self, location):
- """Remember the current location, for the purposes of being able
- to do a has_changed() check.
- """
- self._last_movement = location.copy()
-
- def has_changed(self, location):
- """Determine if the given location combination represents a
- significant enough change to warrant pushing history.
- """
-
- return self._last_movement is None or not self._last_movement.near(location)
-
- def push(self, location):
- """Push the given location to the back history. Clear the forward
- history.
- """
-
- if self._current is not None:
- self._back.append(self._current.copy())
- self._current = location.copy()
- self._forward.clear()
-
- def back(self):
- """Move backward in history, returning the location to jump to.
- Returns None if no history.
- """
-
- if not self._back:
- return None
-
- self._forward.appendleft(self._current)
- self._current = self._back.pop()
- self._last_movement = self._current # preempt, so we don't re-push
- return self._current
-
- def forward(self):
- """Move forward in history, returning the location to jump to.
- Returns None if no history.
- """
-
- if not self._forward:
- return None
-
- self._back.append(self._current)
- self._current = self._forward.popleft()
- self._last_movement = self._current # preempt, so we don't re-push
- return self._current
-
-_histories = {} # window id -> History
-
-def get_history():
- """Get a History object for the current window,
- creating a new one if required
- """
-
- window = sublime.active_window()
- if window is None:
- return None
-
- window_id = window.id()
- history = _histories.get(window_id, None)
- if history is None:
- _histories[window_id] = history = History()
- return history
-
-class NavigationHistoryRecorder(sublime_plugin.EventListener):
- """Keep track of history
- """
-
- def on_selection_modified(self, view):
- """When the selection is changed, possibly record movement in the
- history
- """
- history = get_history()
- if history is None:
- return
-
- path = view.file_name()
- row, col = view.rowcol(view.sel()[0].a)
- history.record_movement(Location(path, row + 1, col + 1))
-
- # def on_close(self, view):
- # """When a view is closed, check to see if the window was closed too
- # and clean up orphan histories
- # """
- #
- # # XXX: This doesn't work - event runs before window is removed
- # # from sublime.windows()
- #
- # windows_with_history = set(_histories.keys())
- # window_ids = set([w.id() for w in sublime.windows()])
- # closed_windows = windows_with_history.difference(window_ids)
- # for window_id in closed_windows:
- # del _histories[window_id]
-
-class NavigationHistoryBack(sublime_plugin.TextCommand):
- """Go back in history
- """
-
- def run(self, edit):
- history = get_history()
- if history is None:
- return
-
- location = history.back()
- if location:
- window = sublime.active_window()
- window.open_file("{0}:{1}:{2}".format(location.path, location.line, location.col), sublime.ENCODED_POSITION)
-
-class NavigationHistoryForward(sublime_plugin.TextCommand):
- """Go forward in history
- """
-
- def run(self, edit):
- history = get_history()
- if history is None:
- return
-
- location = history.forward()
- if location:
- window = sublime.active_window()
- window.open_file("{0}:{1}:{2}".format(location.path, location.line, location.col), sublime.ENCODED_POSITION)
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Navigation History/package-metadata.json b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Navigation History/package-metadata.json
deleted file mode 100644
index 801a344..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Navigation History/package-metadata.json
+++ /dev/null
@@ -1 +0,0 @@
-{"url": "https://github.com/timjrobinson/SublimeNavigationHistory", "version": "2013.03.17.19.51.45", "description": "SublimeText 2/3 Navigation History - jump forward and back around your code. "}
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Open Recent Files/Default.sublime-keymap b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Open Recent Files/Default.sublime-keymap
deleted file mode 100644
index 0b4309b..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Open Recent Files/Default.sublime-keymap
+++ /dev/null
@@ -1,3 +0,0 @@
-[
- { "keys": ["ctrl+shift+t"], "command": "open_recent_files" }
-]
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Open Recent Files/README.md b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Open Recent Files/README.md
deleted file mode 100644
index fc8332c..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Open Recent Files/README.md
+++ /dev/null
@@ -1,8 +0,0 @@
-This package adds a shortcut to open the most recently closed files.
-
-Keyboard shortcut is `Ctrl+Shift+T`. Press it multiple times to go further back through previously closed files.
-
-Version 1.01
-------------
-
-- Plugin now will open up to the 20 latest files. There may be a brief flicker when opening subsequent files (by repeatedly pressing the shortcut key)
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Open Recent Files/open_recent_files.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Open Recent Files/open_recent_files.py
deleted file mode 100644
index 46aa485..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Open Recent Files/open_recent_files.py
+++ /dev/null
@@ -1,14 +0,0 @@
-import sublime
-import sublime_plugin
-
-
-class OpenRecentFilesCommand(sublime_plugin.WindowCommand):
- def run(self):
- w = sublime.active_window()
- counter = 0
- numViews = len(w.views())
- while (counter < 20):
- w.run_command('open_recent_file', {"index": counter})
- if numViews < len(w.views()):
- break
- counter += 1
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Open Recent Files/package-metadata.json b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Open Recent Files/package-metadata.json
deleted file mode 100644
index 563a603..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Open Recent Files/package-metadata.json
+++ /dev/null
@@ -1 +0,0 @@
-{"url": "https://github.com/spadgos/sublime-OpenRecentFiles", "version": "2011.10.03.14.20.08", "description": "A package which adds Ctrl+Shift+T to open the most recent files."}
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/OpenSearchResult/.gitignore b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/OpenSearchResult/.gitignore
deleted file mode 100644
index 99ec428..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/OpenSearchResult/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-*.pyc
-.idea
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/OpenSearchResult/Base File (OSX).sublime-settings b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/OpenSearchResult/Base File (OSX).sublime-settings
deleted file mode 100644
index 434d4f1..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/OpenSearchResult/Base File (OSX).sublime-settings
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "highlight_search_icon": "bookmark",
- "highlight_search_scope": "entity.name.function",
- "highlight_search_results": false,
- "open_search_result_everywhere": false
-}
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/OpenSearchResult/CONTRIBUTORS.md b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/OpenSearchResult/CONTRIBUTORS.md
deleted file mode 100644
index 86fdce1..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/OpenSearchResult/CONTRIBUTORS.md
+++ /dev/null
@@ -1,5 +0,0 @@
-# Contributors
-
-The following people have contributed code to the OpenSearchResult plugin.
-
-Chris Barnett
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/OpenSearchResult/Default.sublime-keymap b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/OpenSearchResult/Default.sublime-keymap
deleted file mode 100644
index 8a69d3c..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/OpenSearchResult/Default.sublime-keymap
+++ /dev/null
@@ -1,15 +0,0 @@
-[
- {
- "keys": ["g", "o"],
- "command": "open_search_result",
- "context": [{"key": "setting.command_mode"}]
- },
- {
- "keys": ["ctrl+enter"],
- "command": "open_search_result",
- "context":
- [
- { "key": "selector", "operator": "equal", "operand": "text.find-in-files" }
- ]
- }
-]
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/OpenSearchResult/LICENSE.txt b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/OpenSearchResult/LICENSE.txt
deleted file mode 100644
index 49a9c3f..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/OpenSearchResult/LICENSE.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-Copyright (c) 2012 Andrew Brookins
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
-IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/OpenSearchResult/README.md b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/OpenSearchResult/README.md
deleted file mode 100644
index 40340cd..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/OpenSearchResult/README.md
+++ /dev/null
@@ -1,29 +0,0 @@
-# Open Search Result Plugin for Sublime Text 2
-
-This plugin creates a command that allows you to open files listed in the search
-results of the 'Find in Files' command.
-
-- When run on a line in the search results that includes a line number, e.g.,
-"102: print 'foo'" it opens the file at the correct line number.
-
-- When run on a line that contains a file path like '/path/to/somewhere:'
-in the search listing, it opens the file without a line number specified.
-
-## Key Binding
-
-- The default key binding is a Vintage command mode key: "g, o".
-
-## Customizing
-
-You can change various things about the plugin by adding user settings:
-
-- 'highlight_search_results': Set to false to disable highlighting openable
-paths (the open command will still work)
-- 'highlight_search_scope': The scope that will be used to color the outline for
-openable paths or the icon. See your theme file for examples of colors.
-- 'highlight_search_icon': If you want an icon to show up in the gutter next to
-openable paths, include a valid icon name as a string (e.g., 'circle', 'dot' or
-'bookmark')
-- 'open_search_result_everywhere': Set to true to enable this plugin on all
-files not just Find Results panes. You can use this for saving and reopening
-your find results.
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/OpenSearchResult/open_search_result.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/OpenSearchResult/open_search_result.py
deleted file mode 100644
index 930ba2d..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/OpenSearchResult/open_search_result.py
+++ /dev/null
@@ -1,136 +0,0 @@
-import os
-import sublime, sublime_plugin
-# Load with Python3, fallback to load with Python2
-try:
- from .util import parse_line_number, is_file_path
-except ValueError:
- from util import parse_line_number, is_file_path
-
-
-class OpenSearchResultKeys:
- HIGHLIGHT_ENABLED = 'highlight_search_results'
- SCOPE_SETTINGS = 'highlight_search_scope'
- ICON_SETTINGS = 'highlight_search_icon'
- OPEN_EVERYWHERE = 'open_search_result_everywhere'
-
-
-class HighlightFilePaths(sublime_plugin.EventListener):
- HIGHLIGHT_REGION_NAME = 'HighlightFilePaths'
- DEFAULT_SCOPE = 'search_result_highlight'
- DEFAULT_ICON = ''
-
- def show_highlight(self, view):
- valid_regions = []
- show_highlight = view.settings().get(OpenSearchResultKeys.HIGHLIGHT_ENABLED, False)
- scope = view.settings().get(OpenSearchResultKeys.SCOPE_SETTINGS, self.DEFAULT_SCOPE)
- icon = view.settings().get(OpenSearchResultKeys.ICON_SETTINGS, self.DEFAULT_ICON)
- open_everywhere = view.settings().get(OpenSearchResultKeys.OPEN_EVERYWHERE, False)
-
- if open_everywhere == False and view.name() != 'Find Results':
- return
-
- for s in view.sel():
- line = view.line(s)
- line_str = view.substr(view.line(s))
- line_num = parse_line_number(line_str)
-
- if is_file_path(line_str) or line_num:
- valid_regions.append(line)
-
- if valid_regions:
- if show_highlight:
- options = sublime.DRAW_EMPTY | sublime.DRAW_OUTLINED
- else:
- options = sublime.HIDDEN
-
- view.add_regions(
- self.HIGHLIGHT_REGION_NAME, valid_regions, scope, icon, options)
- else:
- view.erase_regions(self.HIGHLIGHT_REGION_NAME)
-
- def on_selection_modified(self, view):
- highlight_enabled = (view.settings().get(OpenSearchResultKeys.HIGHLIGHT_ENABLED)
- or view.settings().get(OpenSearchResultKeys.ICON_SETTINGS))
-
- if view.settings().get('is_widget') \
- or not view.settings().get('command_mode') \
- or not highlight_enabled:
- view.erase_regions(self.HIGHLIGHT_REGION_NAME)
- return
-
- self.show_highlight(view)
-
- def on_deactivated(self, view):
- view.erase_regions(self.HIGHLIGHT_REGION_NAME)
-
- def on_activated(self, view):
- if view.settings().get('highlight_file_paths'):
- self.show_highlight(view)
-
-
-class OpenSearchResultCommand(sublime_plugin.TextCommand):
- """
- Open a file listed in the Find In File search results at the line the
- cursor is on, or just open the file if the cursor is on the file path.
- """
-
- def open_file_from_line(self, line, line_num):
- """
- Attempt to parse a file path from the string `line` and open it in a
- new buffer.
- """
- if ':' not in line:
- return
-
- file_path = line[0:-1]
-
- if os.path.exists(file_path):
- self.view.window().open_file(
- "%s:%s" % (file_path, line_num), sublime.ENCODED_POSITION)
-
- def previous_line(self, region):
- """ `region` should be a Region covering the entire hard line """
- if region.begin() == 0:
- return None
- else:
- return self.view.full_line(region.begin() - 1)
-
- def open_file_path(self, line_str):
- """
- Parse a file path from a string `line_str` of the format: ":"
- """
- file_path = line_str[0:-1]
-
- if os.path.exists(file_path):
- self.view.window().open_file(file_path)
-
- def open_file_at_line_num(self, cur_line, line_num):
- """
- Starting at the position `cur_line` (a `Region`), count backwards
- until we find a path or the beginning of the file. If we find a file
- path, open it in a new tab at `line_num`.
- """
- prev = cur_line
- while True:
- prev = self.previous_line(prev)
- if prev is None:
- break
-
- line = self.view.substr(prev).strip()
- if is_file_path(line):
- return self.open_file_from_line(line, line_num)
-
- def run(self, edit):
- open_everywhere = self.view.settings().get(OpenSearchResultKeys.OPEN_EVERYWHERE, False)
- for cursor in self.view.sel():
- cur_line = self.view.line(cursor)
- line_str = self.view.substr(cur_line).strip()
- line_num = parse_line_number(line_str)
-
- if open_everywhere == False and self.view.name() != 'Find Results':
- return
-
- if is_file_path(line_str):
- self.open_file_path(line_str)
- elif line_num:
- self.open_file_at_line_num(cur_line, line_num)
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/OpenSearchResult/package-metadata.json b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/OpenSearchResult/package-metadata.json
deleted file mode 100644
index dcfeaf4..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/OpenSearchResult/package-metadata.json
+++ /dev/null
@@ -1 +0,0 @@
-{"url": "https://github.com/abrookins/OpenSearchResult", "version": "2013.07.25.03.39.55", "description": "a Sublime Text 2 plugin that opens files listed in the Find in File output"}
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/OpenSearchResult/util.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/OpenSearchResult/util.py
deleted file mode 100644
index 25a26e4..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/OpenSearchResult/util.py
+++ /dev/null
@@ -1,36 +0,0 @@
-"""
-util.py: Utility functions for opening Sublime Text 2 search results.
-"""
-import re
-
-
-def parse_line_number(line_str):
- """
- In a line of the format ": "or " "
- this grabs line_num.
-
- >>> parse_line_number('5: def parse_line_number(line_str):')
- '5'
- >>> parse_line_number('43 line = view.line(s)')
- '43'
- >>> parse_line_number('136: line_num = parse_line_number(line_str)')
- '136'
- """
- parts = line_str.split()
- line_num = parts[0].strip().replace(':', '')
- return line_num
-
-
-def is_file_path(line_str):
- """
- Test if `line_str` is a file path.
-
- >>> is_file_path('/Users/me/code/OpenSearchResult/open_search_result.py:')
- True
- >>> is_file_path('C:\\Users\\me\\test.txt:')
- True
- >>> is_file_path('5: def parse_line_number(line_str):')
- False
- """
- return re.match("^(/|\w:\\\).*:$", line_str) is not None
-
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/Default.sublime-commands b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/Default.sublime-commands
deleted file mode 100644
index dd5513c..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/Default.sublime-commands
+++ /dev/null
@@ -1,68 +0,0 @@
-[
- {
- "caption": "Package Control: Add Repository",
- "command": "add_repository"
- },
- {
- "caption": "Package Control: Add Channel",
- "command": "add_channel"
- },
- {
- "caption": "Package Control: Create Binary Package File",
- "command": "create_binary_package"
- },
- {
- "caption": "Package Control: Create Package File",
- "command": "create_package"
- },
- {
- "caption": "Package Control: Disable Package",
- "command": "disable_package"
- },
- {
- "caption": "Package Control: Discover Packages",
- "command": "discover_packages"
- },
- {
- "caption": "Package Control: Enable Package",
- "command": "enable_package"
- },
- {
- "caption": "Package Control: Grab CA Certs",
- "command": "grab_certs"
- },
- {
- "caption": "Package Control: Install Package",
- "command": "install_package"
- },
- {
- "caption": "Package Control: List Packages",
- "command": "list_packages"
- },
- {
- "caption": "Package Control: Remove Package",
- "command": "remove_package"
- },
- {
- "caption": "Package Control: Upgrade Package",
- "command": "upgrade_package"
- },
- {
- "caption": "Package Control: Upgrade/Overwrite All Packages",
- "command": "upgrade_all_packages"
- },
- {
- "caption": "Preferences: Package Control Settings – Default",
- "command": "open_file", "args":
- {
- "file": "${packages}/Package Control/Package Control.sublime-settings"
- }
- },
- {
- "caption": "Preferences: Package Control Settings – User",
- "command": "open_file", "args":
- {
- "file": "${packages}/User/Package Control.sublime-settings"
- }
- }
-]
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/Main.sublime-menu b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/Main.sublime-menu
deleted file mode 100644
index cbe83d1..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/Main.sublime-menu
+++ /dev/null
@@ -1,45 +0,0 @@
-[
- {
- "caption": "Preferences",
- "mnemonic": "n",
- "id": "preferences",
- "children":
- [
- {
- "caption": "Package Settings",
- "mnemonic": "P",
- "id": "package-settings",
- "children":
- [
- {
- "caption": "Package Control",
- "children":
- [
- {
- "command": "open_file", "args":
- {
- "file": "${packages}/Package Control/Package Control.sublime-settings"
- },
- "caption": "Settings – Default"
- },
- {
- "command": "open_file", "args":
- {
- "file": "${packages}/User/Package Control.sublime-settings"
- },
- "caption": "Settings – User"
- },
- { "caption": "-" }
- ]
- }
- ]
- },
- {
- "caption": "Package Control",
- "mnemonic": "C",
- "command": "show_overlay",
- "args": {"overlay": "command_palette", "text": "Package Control: "}
- }
- ]
- }
-]
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/Package Control.ca-bundle b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/Package Control.ca-bundle
deleted file mode 100644
index b718caa..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/Package Control.ca-bundle
+++ /dev/null
@@ -1,43 +0,0 @@
-----BEGIN CERTIFICATE-----
-MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT
-MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i
-YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQG
-EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3Qg
-R2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD9
-9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjoBbdq
-fnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDv
-iS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU
-1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+
-bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoW
-MPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTA
-ephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1l
-uMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKIn
-Z57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfS
-tQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcF
-PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Un
-hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV
-5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs
-MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
-d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j
-ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL
-MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3
-LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug
-RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm
-+9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW
-PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM
-xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB
-Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3
-hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg
-EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF
-MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA
-FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec
-nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z
-eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF
-hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2
-Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
-vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep
-+OkuE6N36B9K
------END CERTIFICATE-----
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/Package Control.ca-list b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/Package Control.ca-list
deleted file mode 100644
index 93aa232..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/Package Control.ca-list
+++ /dev/null
@@ -1,4 +0,0 @@
-[
- "221e907bdfff70d71cea42361ae209d5",
- "7d0986b90061d60c8c02aa3b1cf23850"
-]
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/Package Control.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/Package Control.py
deleted file mode 100644
index 9c47377..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/Package Control.py
+++ /dev/null
@@ -1,101 +0,0 @@
-import sublime
-import sys
-import os
-import locale
-
-
-st_version = 2
-
-# Warn about out-dated versions of ST3
-if sublime.version() == '':
- st_version = 3
- print('Package Control: Please upgrade to Sublime Text 3 build 3012 or newer')
-
-elif int(sublime.version()) > 3000:
- st_version = 3
-
-
-if st_version == 3:
- installed_dir, _ = __name__.split('.')
-elif st_version == 2:
- installed_dir = os.path.basename(os.getcwd())
-
-
-# Ensure the user has installed Package Control properly
-if installed_dir != 'Package Control':
- message = (u"Package Control\n\nThis package appears to be installed " +
- u"incorrectly.\n\nIt should be installed as \"Package Control\", " +
- u"but seems to be installed as \"%s\".\n\n" % installed_dir)
- # If installed unpacked
- if os.path.exists(os.path.join(sublime.packages_path(), installed_dir)):
- message += (u"Please use the Preferences > Browse Packages... menu " +
- u"entry to open the \"Packages/\" folder and rename" +
- u"\"%s/\" to \"Package Control/\" " % installed_dir)
- # If installed as a .sublime-package file
- else:
- message += (u"Please use the Preferences > Browse Packages... menu " +
- u"entry to open the \"Packages/\" folder, then browse up a " +
- u"folder and into the \"Installed Packages/\" folder.\n\n" +
- u"Inside of \"Installed Packages/\", rename " +
- u"\"%s.sublime-package\" to " % installed_dir +
- u"\"Package Control.sublime-package\" ")
- message += u"and restart Sublime Text."
- sublime.error_message(message)
-
-# Normal execution will finish setting up the package
-else:
- reloader_name = 'package_control.reloader'
-
- # ST3 loads each package as a module, so it needs an extra prefix
- if st_version == 3:
- reloader_name = 'Package Control.' + reloader_name
- from imp import reload
-
- # Make sure all dependencies are reloaded on upgrade
- if reloader_name in sys.modules:
- reload(sys.modules[reloader_name])
-
-
- try:
- # Python 3
- from .package_control import reloader
-
- from .package_control.commands import *
- from .package_control.package_cleanup import PackageCleanup
-
- except (ValueError):
- # Python 2
- from package_control import reloader
- from package_control import sys_path
-
- from package_control.commands import *
- from package_control.package_cleanup import PackageCleanup
-
-
- def plugin_loaded():
- # Make sure the user's locale can handle non-ASCII. A whole bunch of
- # work was done to try and make Package Control work even if the locale
- # was poorly set, by manually encoding all file paths, but it ended up
- # being a fool's errand since the package loading code built into
- # Sublime Text is not written to work that way, and although packages
- # could be installed, they could not be loaded properly.
- try:
- os.path.exists(os.path.join(sublime.packages_path(), u"fran\u00e7ais"))
- except (UnicodeEncodeError) as e:
- message = (u"Package Control\n\nYour system's locale is set to a " +
- u"value that can not handle non-ASCII characters. Package " +
- u"Control can not properly work unless this is fixed.\n\n" +
- u"On Linux, please reference your distribution's docs for " +
- u"information on properly setting the LANG environmental " +
- u"variable. As a temporary work-around, you can launch " +
- u"Sublime Text from the terminal with:\n\n" +
- u"LANG=en_US.UTF-8 sublime_text")
- sublime.error_message(message)
- return
-
- # Start shortly after Sublime starts so package renames don't cause errors
- # with keybindings, settings, etc disappearing in the middle of parsing
- sublime.set_timeout(lambda: PackageCleanup().start(), 2000)
-
- if st_version == 2:
- plugin_loaded()
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/Package Control.sublime-settings b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/Package Control.sublime-settings
deleted file mode 100644
index 03e1594..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/Package Control.sublime-settings
+++ /dev/null
@@ -1,166 +0,0 @@
-{
- // A list of URLs that each contain a JSON file with a list of repositories.
- // The repositories from these channels are placed in order after the
- // repositories from the "repositories" setting
- "channels": [
- "https://sublime.wbond.net/channel.json"
- ],
-
- // A list of URLs that contain a packages JSON file. These repositories
- // are placed in order before repositories from the "channels"
- // setting
- "repositories": [],
-
- // A list of CA certs needed for domains. The default channel provides a
- // list of domains and an identifier (the md5 hash) for the CA cert(s)
- // necessary for each. Not used on Windows since the system CA cert list
- // is automatically used via WinINet.
- //
- // If a custom cert is required for a proxy or for an alternate channel
- // or repository domain name, it should be added in one of the two forms:
- //
- // "*": ["my_identifier", "https://example.com/url/of/cert_file"]
- // "*": ["my_identifier_2", "/absolute/filesystem/path/to/cert_file"]
- //
- // In both cases the literal "*" means the cert will be checked to ensure
- // it is present for accessing any URL. This is necessary for proxy
- // connections, but also useful if you want to provide you own
- // Pckage Control.ca-bundle file.
- //
- // The "my_identifier" and "my_identifier_2" can be any unique string
- // that Package Control can use as a filename, and ensures that it has
- // merged the cert file with the ca-bundle.crt file in the certs/ directory
- // since that is what is passed to the downloaders.
- "certs": {
- "api.bitbucket.org": ["7d0986b90061d60c8c02aa3b1cf23850", "https://sublime.wbond.net/certs/7d0986b90061d60c8c02aa3b1cf23850"],
- "api.github.com": ["7d0986b90061d60c8c02aa3b1cf23850", "https://sublime.wbond.net/certs/7d0986b90061d60c8c02aa3b1cf23850"],
- "bitbucket.org": ["7d0986b90061d60c8c02aa3b1cf23850", "https://sublime.wbond.net/certs/7d0986b90061d60c8c02aa3b1cf23850"],
- "codeload.github.com": ["7d0986b90061d60c8c02aa3b1cf23850", "https://sublime.wbond.net/certs/7d0986b90061d60c8c02aa3b1cf23850"],
- "downloads.sourceforge.net": ["221e907bdfff70d71cea42361ae209d5", "https://sublime.wbond.net/certs/221e907bdfff70d71cea42361ae209d5"],
- "github.com": ["7d0986b90061d60c8c02aa3b1cf23850", "https://sublime.wbond.net/certs/7d0986b90061d60c8c02aa3b1cf23850"],
- "nodeload.github.com": ["7d0986b90061d60c8c02aa3b1cf23850", "https://sublime.wbond.net/certs/7d0986b90061d60c8c02aa3b1cf23850"],
- "raw.github.com": ["7d0986b90061d60c8c02aa3b1cf23850", "https://sublime.wbond.net/certs/7d0986b90061d60c8c02aa3b1cf23850"],
- "sublime.wbond.net": ["221e907bdfff70d71cea42361ae209d5", "https://sublime.wbond.net/certs/221e907bdfff70d71cea42361ae209d5"]
- },
-
- // Install pre-release versions of packages. If this is false, versions
- // under 1.0.0 will still be installed. Only packages using the SemVer
- // -prerelease suffixes will be ignored.
- "install_prereleases": false,
-
- // If debugging information for HTTP/HTTPS connections should be printed
- // to the Sublime Text console
- "debug": false,
-
- // This helps solve naming issues where a repository it not named the
- // same as the package should be. This is primarily only useful for
- // GitHub and BitBucket repositories. This mapping will override the
- // mapping that is retrieved from the repository channels.
- "package_name_map": {},
-
- // If package install, upgrade and removal info should be submitted to
- // the channel for aggregated statistics
- "submit_usage": true,
-
- // The URL to post install, upgrade and removal notices to
- "submit_url": "https://sublime.wbond.net/submit",
-
- // If packages should be automatically upgraded when ST2 starts
- "auto_upgrade": true,
-
- // If missing packages should be automatically installed when ST2 starts
- "install_missing": true,
-
- // The minimum frequency in hours in which to check for automatic upgrades,
- // setting this to 0 will always check for automatic upgrades
- "auto_upgrade_frequency": 1,
-
- // Packages to not auto upgrade
- "auto_upgrade_ignore": [],
-
- // Timeout for downloading channels, repositories and packages. Doesn't
- // have an effect on Windows due to a bug in WinINet.
- "timeout": 30,
-
- // The number of seconds to cache repository and package info for
- "cache_length": 300,
-
- // An HTTP proxy server to use for requests. Not used on Windows since the
- // system proxy configuration is utilized via WinINet.
- "http_proxy": "",
- // An HTTPS proxy server to use for requests - this will inherit from
- // http_proxy if it is set to "" or null and http_proxy has a value. You
- // can set this to false to prevent inheriting from http_proxy. Not used on
- // Windows since the system proxy configuration is utilized via WinINet.
- "https_proxy": "",
-
- // Username and password for both http_proxy and https_proxy. May be used
- // with WinINet to set credentials for system-level proxy config.
- "proxy_username": "",
- "proxy_password": "",
-
- // If HTTP responses should be cached to disk
- "http_cache": true,
-
- // Number of seconds to cache HTTP responses for, defaults to one week
- "http_cache_length": 604800,
-
- // User agent for HTTP requests. If "%s" is present, will be replaced
- // with the current version.
- "user_agent": "Sublime Package Control v%s",
-
- // Setting this to true will cause Package Control to ignore all git
- // and hg repositories - this may help if trying to list packages to install
- // hangs
- "ignore_vcs_packages": false,
-
- // Custom paths to VCS binaries for when they can't be automatically
- // found on the system and a package includes a VCS metadata directory
- "git_binary": "",
-
- // This should NOT contain the name of the remote or branch - that will
- // be automatically determined.
- "git_update_command": ["pull", "--ff", "--commit"],
-
- "hg_binary": "",
-
- // For HG repositories, be sure to use "default" as the remote URL.
- // This is the default behavior when cloning an HG repo.
- "hg_update_command": ["pull", "--update"],
-
- // Full path to the openssl binary, if not found on your machine. This is
- // only used when running the Grab CA Certs command.
- "openssl_binary": "",
-
- // Directories to ignore when creating a package
- "dirs_to_ignore": [
- ".hg", ".git", ".svn", "_darcs", "CVS"
- ],
-
- // Files to ignore when creating a package
- "files_to_ignore": [
- ".hgignore", ".gitignore", ".bzrignore", "*.pyc", "*.sublime-project",
- "*.sublime-workspace", "*.tmTheme.cache"
- ],
-
- // Files to include, even if they match a pattern in files_to_ignore
- "files_to_include": [],
-
- // Files to ignore when creating a binary package. By default binary
- // packages ship with .pyc files instead of .py files. If an __init__.py
- // file exists, it will always be included, even if it matches one of
- // these patterns.
- "files_to_ignore_binary": [
- ".hgignore", ".gitignore", ".bzrignore", "*.py", "*.sublime-project",
- "*.sublime-workspace", "*.tmTheme.cache"
- ],
-
- // Files to include for a binary package, even if they match a pattern i
- // files_to_ignore_binary
- "files_to_include_binary": [
- "__init__.py"
- ],
-
- // When a package is created, copy it to this folder - defaults to Desktop
- "package_destination": ""
-}
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/example-channel.json b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/example-channel.json
deleted file mode 100644
index 75aeac3..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/example-channel.json
+++ /dev/null
@@ -1,64 +0,0 @@
-{
- "schema_version": "2.0",
-
- // All repositories must be an HTTP or HTTPS URL. HTTPS is vastly superior
- // since verification of the source server is performed on SSL certificates.
- "repositories": [
- "http://sublime.wbond.net/packages.json",
- "https://github.com/buymeasoda/soda-theme",
- "https://github.com/SublimeText"
- ],
-
- // The "packages_cache" is completely optional, but allows the
- // channel to cache and deliver package data from multiple
- // repositories in a single HTTP request, allowing for significantly
- // improved performance.
- "packages_cache": {
-
- // The first level keys are the repository URLs
- "http://sublime.wbond.net/packages.json": [
-
- // Each repository has an array of packages with their fully
- // expanded info. This means that the "details" key must be expanded
- // into the various keys it provides.
- {
- "name": "Alignment",
- "description": "Multi-line and multiple selection alignment plugin",
- "author": "wbond",
- "homepage": "http://wbond.net/sublime_packages/alignment",
- "releases": [
- {
- "version": "2.0.0",
- "url": "https://sublime.wbond.net/Alignment.sublime-package",
- "date": "2011-09-18 20:12:41"
- }
- ]
- }
- ]
- },
-
- // Package Control ships with the SSL Certificate Authority (CA) cert for the
- // SSL certificate that secures and identifies sublime.wbond.net. After this
- // initial connection is made, the channel server provides a list of CA certs
- // for the various URLs that Package Control need to connect to. This way the
- // default channel (https://sublime.wbond.net/channel.json) can provide
- // real-time updates to CA certs in the case that a CA is compromised. The
- // CA certs are extracted from openssl, and the server runs on an LTS version
- // of Ubuntu, which automatically applies security patches from the official
- // Ubuntu repositories. This architecture helps to ensure that the packages
- // being downloaded are from the source listed and that users are very
- // unlikely to be the subject of the man-in-the-middle attack.
- "certs": {
-
- // All certs have the domain they apply to as the key
- "sublime.wbond.net": [
- // The value is an array of two elements, the first being an md5
- // hash of the contents of the certificate. This helps in detecting
- // CA cert changes. The second element is the URL where the cert
- // can be downloaded, if it is not already installed on the user’s
- // copy of Sublime Text.
- "7f4f8622b4fd001c7f648e09aae7edaa",
- "https://sublime.wbond.net/certs/7f4f8622b4fd001c7f648e09aae7edaa"
- ]
- }
-}
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/example-messages.json b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/example-messages.json
deleted file mode 100644
index 09c7626..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/example-messages.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "install": "messages/install.txt",
- "1.1.1": "messages/1.1.1.txt",
- "1.2.0": "messages/1.2.0.txt"
-}
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/example-repository.json b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/example-repository.json
deleted file mode 100644
index 39fe43d..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/example-repository.json
+++ /dev/null
@@ -1,275 +0,0 @@
-{
- "schema_version": "2.0",
-
- // Packages can be specified with a simple URL to a GitHub or BitBucket
- // repository, but details can be overridden for every field. It is
- // also possible not utilize GitHub or BitBucket at all, but just to
- // host your packages on any server with an SSL certificate.
- "packages": [
-
- // This is what most packages should aim to model.
- //
- // The majority of the information about a package ("name",
- // "description", "author") are all pulled from the GitHub (or
- // BitBucket) repository info.
- //
- // If the word "sublime" exists in the repository name, the name
- // can be overridden by the "name" key.
- //
- // A release is created from the the tag that is the highest semantic
- // versioning version number in the list of tags.
- {
- "name": "Alignment",
- "details": "https://github.com/wbond/sublime_alignment",
- "releases": [
- {
- "details": "https://github.com/wbond/sublime_alignment/tags"
- }
- ]
- },
-
- // Here is an equivalent package being pulled from BitBucket
- {
- "name": "Alignment",
- "details": "https://bitbucket.org/wbond/sublime_alignment",
- "releases": [
- {
- "details": "https://bitbucket.org/wbond/sublime_alignment#tags"
- }
- ]
- },
-
- // Pull most details from GitHub, releases from master branch.
- // This form is discouraged because users will upgrade to every single
- // commit you make to master.
- {
- "details": "https://github.com/wbond/sublime_alignment"
- },
-
- // Pull most details from a BitBucket repository and releases from
- // the branch "default" or "master", depending on how your repository
- // is configured.
- // Similar to the above example, this form is discouraged because users
- // will upgrade to every single commit you make to master.
- {
- "details": "https://bitbucket.org/wbond/sublime_alignment"
- },
-
- // Use a custom name instead of just the URL slug
- {
- "name": "Alignment",
- "details": "https://github.com/wbond/sublime_alignment"
- },
-
- // You can also override the homepage and author
- {
- "name": "Alignment",
- "details": "https://github.com/wbond/sublime_alignment",
- "homepage": "http://wbond.net/sublime_packages/alignment",
- "author": "wbond"
- },
-
- // It is possible to provide the URL to a readme file. This URL
- // should be to the raw source of the file, not rendered HTML.
- // GitHub and BitBucket repositories will automatically provide
- // these.
- //
- // The following extensions will be rendered:
- //
- // .markdown, .mdown, .mkd, .md
- // .texttile
- // .creole
- // .rst
- //
- // All others are treated as plaintext.
- {
- "details": "https://github.com/wbond/sublime_alignment",
- "readme": "https://raw.github.com/wbond/sublime_alignment/master/readme.creole"
- },
-
- // If a package has a public bug tracker, the URL should be
- // included via the "issues" key. Both GitHub and BitBucket
- // repositories will automatically provide this if they have
- // issues enabled.
- {
- "details": "https://github.com/wbond/sublime_alignment",
- "issues": "https://github.com/wbond/sublime_alignment/issues"
- },
-
- // The URL to donate to support the development of a package.
- // GitHub and BitBucket repositories will default to:
- //
- // https://www.gittip.com/{username}/
- //
- // Other URLs with special integration include:
- //
- // https://flattr.com/profile/{username}
- // https://www.dwolla.com/hub/{username}
- //
- // This may also contain a URL to another other donation-type site
- // where users may support the author for their development of the
- // package.
- {
- "details": "https://github.com/wbond/sublime_alignment",
- "donate": "https://www.gittip.com/wbond/"
- },
-
- // The URL to purchase a license to the package
- {
- "details": "https://github.com/wbond/sublime_alignment",
- "buy": "https://wbond.net/sublime_packages/alignment/buy"
- },
-
- // If you rename a package, you can provide the previous name(s)
- // so that users with the old package name can be automatically
- // upgraded to the new one.
- {
- "name": "Alignment",
- "details": "https://github.com/wbond/sublime_alignment",
- "previous_names": ["sublime_alignment"]
- },
-
- // Packages can be labelled for the purpose of creating a
- // folksonomy so users may more easily find relevant packages.
- // Labels should be all lower case and should use spaces instead
- // of _ or - to separate words.
- //
- // Some suggested labels are listed below, however, anything can
- // be used as a label:
- //
- // auto-complete
- // browser integration
- // build system
- // code navigation
- // code sharing
- // color scheme
- // deprecated
- // diff/merge
- // editor emulation
- // file creation
- // file navigation
- // formatting
- // ftp
- // language syntax
- // linting
- // minification
- // search
- // snippets
- // terminal/shell/repl
- // testing
- // text manipulation
- // text navigation
- // theme
- // todo
- // vcs
- {
- "details": "https://github.com/wbond/sublime_alignment",
- "labels": ["text manipulation", "formatting"]
- },
-
- // In addition to the recommendation above of pulling releases
- // from tags that are semantic version numbers, releases can also
- // comefrom a custom branch.
- {
- "details": "https://github.com/wbond/sublime_alignment",
- "releases": [
- {
- "details": "https://github.com/wbond/sublime_alignment/tree/custom_branch"
- }
- ]
- },
-
- // An equivalent package being pulled from BitBucket.
- {
- "details": "https://bitbucket.org/wbond/sublime_alignment",
- "releases": [
- {
- "details": "https://bitbucket.org/wbond/sublime_alignment/src/custom_branch"
- }
- ]
- },
-
- // If your package is only compatible with specific builds of
- // Sublime Text, this will cause the package to be hidden from
- // users with incompatible versions.
- {
- "details": "https://github.com/wbond/sublime_alignment",
- "releases": [
- {
- // Could also be >2999 for ST3. Leaving this out indicates
- // the package works with both ST2 and ST3.
- "sublime_text": "<3000",
- "details": "https://github.com/wbond/sublime_alignment"
- }
- ]
- },
-
- // The "platforms" key allows specifying what platform(s) the release
- // is valid for. As shown, there can be multiple releases of a package
- // at any given time. However, only the latest version for any given
- // platform/arch will be shown to the user.
- //
- // The "platforms" key allows specifying a single platform, or a list
- // of platforms. Valid platform indentifiers include:
- //
- // "*"
- // "windows", "windows-x64", "windows-x32"
- // "osx", "osx-x64"
- // "linux", "linux-x32", "linux-x64"
- {
- "details": "https://github.com/wbond/sublime_alignment",
- "releases": [
- {
- // Defaults to "*", or all platforms.
- "platforms": ["osx", "linux"],
- "details": "https://github.com/wbond/sublime_alignment/tree/posix"
- },
- {
- "platforms": "windows",
- "details": "https://github.com/wbond/sublime_alignment/tree/win32"
- }
- ]
- },
-
- // If you don't use a "details" key for a "releases" entry, you need to
- // specify the "version", "url" and "date" manually.
- {
- "details": "https://github.com/wbond/sublime_alignment",
- "releases": [
- {
- // The version number needs to be a semantic version number per
- // http://semver.org 2.x.x
- "version": "2.0.0",
-
- // The URL needs to be a zip file containing the package. It is permissible
- // for the zip file to contain a single root folder with any name. All
- // file will be extracted out of this single root folder. This allows
- // zip files from GitHub and BitBucket to be used a sources.
- "url": "https://codeload.github.com/wbond/sublime_alignment/zip/v2.0.0",
-
- // The date MUST be in the form "YYYY-MM-DD HH:MM:SS" and SHOULD be UTC
- "date": "2011-09-18 20:12:41"
- }
- ]
- }
- ],
-
- // If you need/want to split your repository up into multiple smaller files
- // for the sake of organization, the "includes" key allows you to enter
- // URL paths that will be combined together and dynamically inserted
- // into the "packages" key. These URLs these can be relative or absolute.
- "includes": [
-
- // Here is an example of how relative paths work for URLs. If this file
- // was loaded from:
- // "https://sublime.wbond.net/example-repository.json"
- // then the following files would be loaded from:
- // "https://sublime.wbond.net/repository/0-9.json"
- // "https://sublime.wbond.net/repository/a.json"
- "./repository/0-9.json",
- "./repository/a.json",
-
- // An example of an absolute URL
- "https://sublime.wbond.net/repository/b.json"
- ]
-}
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/messages.json b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/messages.json
deleted file mode 100644
index 8c26db4..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/messages.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "1.3.0": "messages/1.3.0.txt",
- "1.6.0": "messages/1.6.0.txt",
- "2.0.0": "messages/2.0.0.txt"
-}
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/messages/1.3.0.txt b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/messages/1.3.0.txt
deleted file mode 100644
index ebb6d64..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/messages/1.3.0.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-Package Control 1.3.0 Changelog:
-
-Please be sure to restart Sublime Text 2 to start using this new version.
-
-New Features
- - Added tracking of usage (install, upgrade, remove) statistics. Go to
- Preferences > Package Settings > Package Control > Settings - User and
- set the key "submit_usage" to false.
-
- - Added local tracking of installed packages in
- User/Package Control.sublime-settings via the "installed_packages" key.
- This allows distributing a settings file that will automatically install
- packages.
-
- - repositories.json schema version was increased to 1.1 and the
- "last_modified" key was added.
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/messages/1.6.0.txt b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/messages/1.6.0.txt
deleted file mode 100644
index 0a055a0..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/messages/1.6.0.txt
+++ /dev/null
@@ -1,95 +0,0 @@
-Package Control 1.6.0 Changelog:
-
-Wow! It has been 9 months since the last stable release of Package Control.
-Quite a lot has happened since then, including the release of Sublime Text 2
-stable, and hundreds upon hundreds of new packages from the community!
-
-A quick thank you to Kevin Yank (@sentience) for recently volunteering to help
-review packages for inclusion in the default channel, and ninj0x
-(https://github.com/ninj0x) for rewriting the Package Control Community
-Packages search functionality so it is nice and fast once again! The lists
-below include specific thanks for code contributions.
-
-As Sublime Text has become increasingly more popular, and the number of
-packages has increased so rapidly, the bandwidth requirements have also
-significantly increased. This month the default channel will very likely serve
-over 1TB of JSON data. If you feel so inclined, consider pitching in a small
-amount to help cover the cost:
-http://wbond.net/sublime_packages/package_control/say_thanks. A big thank you
-to all of the users who have already contributed!
-
-
-Enhancements
-
-
- - Added full (custom) proxy authentication support for HTTPS connections
-
- - Added NTLM authentication for proxies on Windows
-
- - Proxy authentication information is now set via the new proxy_username and
- proxy_password settings.
-
- - If the https_proxy setting it set to false, it will not inherit from the
- http_proxy setting (thanks planardothum!)
-
- - The time of the last successful run is no longer stored in
- Packages/User/Package Control.sublime-settings, but rather in
- Packages/User/Package Control.last-run making it easier to ignore via git,
- hg, etc. (thanks schlamar!)
-
- - Packages are now ignored during install and upgrade to help prevents errors
- where Sublime Text tries to read a file as it is being extracted
-
- - Packages that include DLLs for Windows can now be upgraded. In-use
- DLLs will be detected and the user prompted to restart.
-
- - Package version numbers may now include non-numeric components, and semantic
- versioning (http://semver.org) is fully supported
-
- - JSON parsing messages are now printed to the console instead of being shown
- in an error popup
-
- - Added support for changes to the BitBucket API
-
- - Added support for changes to GitHub URLs
-
- - Added the debug setting to help track down HTTP connection issues
-
- - All of the downloaders will now try to use HTTP compression
-
- - All of the downloaders will now follow redirects
-
- - Added new install_missing setting to control if Package Control should try
- to install any packages that appear to be missing from the current machine.
- This defaults to true, and is really only useful if you want to prevent
- Package Control from connecting to the internet without explicitly asking
- it to.
-
- - Added lots of code comments as a first step towards making contributions
- by other developers easier
-
-
-Bug Fixes
-
-
- - Added support for the new preferences filename (thanks titoBouzout!)
-
- - If a package is missing from a machine, but not available for that
- platform, it is no longer considered an error (thanks schlamar!)
-
- - Updated CA certs
-
- - Fixed handling of install and upgrade messages that contain non-ASCII
- characters
-
- - Fixed a unicode error trying to load the CA cert bundle file on Windows when
- the install path to Sublime Text contains non-ASCII characters
-
- - Better handling for edge case HTTP errors (thanks tgecho!)
-
- - Fixed a number of errors related to non-ASCII error messages being created
- by the operating system (thanks quarnster!)
-
- - GitHub URLs will now automatically be trimmed of trailing .git suffixes
-
- - Badly formatted messages.json files will no longer break the install process
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/messages/2.0.0.txt b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/messages/2.0.0.txt
deleted file mode 100644
index 59524ea..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/messages/2.0.0.txt
+++ /dev/null
@@ -1,64 +0,0 @@
-Package Control 2.0.0 Changelog:
-
-
-Today I'd like to announce two big milestones:
-
- - Package Control 2.0 for ST2 and ST3
- - A new Package Control website at https://sublime.wbond.net
-
-The full announcement about the PC 2.0 release is available on the news page at
-https://sublime.wbond.net/news.
-
-If you are running the "testing" version of Package Control (1.6.9 - 1.6.11),
-you will likely need to restart Sublime Text before Package Control will work
-properly.
-
-
-Giving Back
-
-Part of the new Package Control website is in-depth information about each
-package. The new package pages include a link where you can give a tip to the
-developer/maintainer of your favorite packages.
-
-The donate links go to https://www.gittip.com, which is building an excellent,
-and open platform for users to say "thank you" to open source developers. It
-is possible to give a small amount each week, such as $0.25, however these small
-amounts multiplied by the large size of the community can be a big thank you!
-
-One of the less glamorous jobs involved with making Package Control happen is
-reviewing and giving package developers feedback before adding their packages
-to the default channel. The follow contributors deserve a big thank you:
-
-FichteFoll - https://www.gittip.com/FichteFoll/
-joneshf - https://www.gittip.com/on/github/joneshf/
-sentience - https://www.gittip.com/on/github/sentience/
-
-Finally, I'm looking to raise some money to obtain a Mac Mini for the purposes
-of supporting ST3 on OS X and a license for a Windows 8 VM. If you are inclined
-to donate to those, or want to just buy me a beer, check out:
-
-https://sublime.wbond.net/say_thanks
-
-
-Notable Features
-
- - A new Windows downloader that uses WinINet and should provide much better
- proxy support
-
- - Using operating system-supplied SSL CA certs on all platforms, with a
- deprecated fallback to certificates served through the channel
-
- - Proxy server fixes for OS X
-
- - A completely revamped channel and repository system with support for more
- information about packages including labels; readme, issues, donate and buy
- URLs; tag-based releases; platform targetting without a custom packages.json
- file; and Sublime Text version targetting
-
- - Support for installing via .sublime-package files in ST3, which allows users
- to easily override specific files from the package. Package developers who
- need a loose folder of files may include a .no-sublime-package file in their
- repo.
-
- - In the coming days the new Package Control website will be released as open
- source on GitHub
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package-metadata.json b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package-metadata.json
deleted file mode 100644
index 79d5f2c..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package-metadata.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "version": "2.0.1-beta1",
- "url": "https://sublime.wbond.net",
- "description": "A full-featured package manager"
-}
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/__init__.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/__init__.py
deleted file mode 100644
index d714611..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/__init__.py
+++ /dev/null
@@ -1,2 +0,0 @@
-__version__ = "2.0.1-beta1"
-__version_info__ = (2, 0, 1, 'beta1')
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/automatic_upgrader.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/automatic_upgrader.py
deleted file mode 100644
index bbebd8a..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/automatic_upgrader.py
+++ /dev/null
@@ -1,215 +0,0 @@
-import threading
-import re
-import os
-import datetime
-import time
-
-import sublime
-
-from .console_write import console_write
-from .package_installer import PackageInstaller
-from .package_renamer import PackageRenamer
-from .open_compat import open_compat, read_compat
-
-
-class AutomaticUpgrader(threading.Thread):
- """
- Automatically checks for updated packages and installs them. controlled
- by the `auto_upgrade`, `auto_upgrade_ignore`, and `auto_upgrade_frequency`
- settings.
- """
-
- def __init__(self, found_packages):
- """
- :param found_packages:
- A list of package names for the packages that were found to be
- installed on the machine.
- """
-
- self.installer = PackageInstaller()
- self.manager = self.installer.manager
-
- self.load_settings()
-
- self.package_renamer = PackageRenamer()
- self.package_renamer.load_settings()
-
- self.auto_upgrade = self.settings.get('auto_upgrade')
- self.auto_upgrade_ignore = self.settings.get('auto_upgrade_ignore')
-
- self.load_last_run()
- self.determine_next_run()
-
- # Detect if a package is missing that should be installed
- self.missing_packages = list(set(self.installed_packages) -
- set(found_packages))
-
- if self.auto_upgrade and self.next_run <= time.time():
- self.save_last_run(time.time())
-
- threading.Thread.__init__(self)
-
- def load_last_run(self):
- """
- Loads the last run time from disk into memory
- """
-
- self.last_run = None
-
- self.last_run_file = os.path.join(sublime.packages_path(), 'User',
- 'Package Control.last-run')
-
- if os.path.isfile(self.last_run_file):
- with open_compat(self.last_run_file) as fobj:
- try:
- self.last_run = int(read_compat(fobj))
- except ValueError:
- pass
-
- def determine_next_run(self):
- """
- Figure out when the next run should happen
- """
-
- self.next_run = int(time.time())
-
- frequency = self.settings.get('auto_upgrade_frequency')
- if frequency:
- if self.last_run:
- self.next_run = int(self.last_run) + (frequency * 60 * 60)
- else:
- self.next_run = time.time()
-
- def save_last_run(self, last_run):
- """
- Saves a record of when the last run was
-
- :param last_run:
- The unix timestamp of when to record the last run as
- """
-
- with open_compat(self.last_run_file, 'w') as fobj:
- fobj.write(str(int(last_run)))
-
-
- def load_settings(self):
- """
- Loads the list of installed packages from the
- Package Control.sublime-settings file
- """
-
- self.settings_file = 'Package Control.sublime-settings'
- self.settings = sublime.load_settings(self.settings_file)
- self.installed_packages = self.settings.get('installed_packages', [])
- self.should_install_missing = self.settings.get('install_missing')
- if not isinstance(self.installed_packages, list):
- self.installed_packages = []
-
- def run(self):
- self.install_missing()
-
- if self.next_run > time.time():
- self.print_skip()
- return
-
- self.upgrade_packages()
-
- def install_missing(self):
- """
- Installs all packages that were listed in the list of
- `installed_packages` from Package Control.sublime-settings but were not
- found on the filesystem and passed as `found_packages`.
- """
-
- if not self.missing_packages or not self.should_install_missing:
- return
-
- console_write(u'Installing %s missing packages' % len(self.missing_packages), True)
- for package in self.missing_packages:
- if self.installer.manager.install_package(package):
- console_write(u'Installed missing package %s' % package, True)
-
- def print_skip(self):
- """
- Prints a notice in the console if the automatic upgrade is skipped
- due to already having been run in the last `auto_upgrade_frequency`
- hours.
- """
-
- last_run = datetime.datetime.fromtimestamp(self.last_run)
- next_run = datetime.datetime.fromtimestamp(self.next_run)
- date_format = '%Y-%m-%d %H:%M:%S'
- message_string = u'Skipping automatic upgrade, last run at %s, next run at %s or after' % (
- last_run.strftime(date_format), next_run.strftime(date_format))
- console_write(message_string, True)
-
- def upgrade_packages(self):
- """
- Upgrades all packages that are not currently upgraded to the lastest
- version. Also renames any installed packages to their new names.
- """
-
- if not self.auto_upgrade:
- return
-
- self.package_renamer.rename_packages(self.installer)
-
- package_list = self.installer.make_package_list(['install',
- 'reinstall', 'downgrade', 'overwrite', 'none'],
- ignore_packages=self.auto_upgrade_ignore)
-
- # If Package Control is being upgraded, just do that and restart
- for package in package_list:
- if package[0] != 'Package Control':
- continue
-
- def reset_last_run():
- # Re-save the last run time so it runs again after PC has
- # been updated
- self.save_last_run(self.last_run)
- sublime.set_timeout(reset_last_run, 1)
- package_list = [package]
- break
-
- if not package_list:
- console_write(u'No updated packages', True)
- return
-
- console_write(u'Installing %s upgrades' % len(package_list), True)
-
- disabled_packages = []
-
- def do_upgrades():
- # Wait so that the ignored packages can be "unloaded"
- time.sleep(0.5)
-
- # We use a function to generate the on-complete lambda because if
- # we don't, the lambda will bind to info at the current scope, and
- # thus use the last value of info from the loop
- def make_on_complete(name):
- return lambda: self.installer.reenable_package(name)
-
- for info in package_list:
- if info[0] in disabled_packages:
- on_complete = make_on_complete(info[0])
- else:
- on_complete = None
-
- self.installer.manager.install_package(info[0])
-
- version = re.sub('^.*?(v[\d\.]+).*?$', '\\1', info[2])
- if version == info[2] and version.find('pull with') != -1:
- vcs = re.sub('^pull with (\w+).*?$', '\\1', version)
- version = 'latest %s commit' % vcs
- message_string = u'Upgraded %s to %s' % (info[0], version)
- console_write(message_string, True)
- if on_complete:
- sublime.set_timeout(on_complete, 1)
-
- # Disabling a package means changing settings, which can only be done
- # in the main thread. We then create a new background thread so that
- # the upgrade process does not block the UI.
- def disable_packages():
- disabled_packages.extend(self.installer.disable_packages([info[0] for info in package_list]))
- threading.Thread(target=do_upgrades).start()
- sublime.set_timeout(disable_packages, 1)
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/ca_certs.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/ca_certs.py
deleted file mode 100644
index d29d2e0..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/ca_certs.py
+++ /dev/null
@@ -1,378 +0,0 @@
-import hashlib
-import os
-import re
-import time
-import sys
-
-from .cmd import Cli
-from .console_write import console_write
-from .open_compat import open_compat, read_compat
-
-
-# Have somewhere to store the CA bundle, even when not running in Sublime Text
-try:
- import sublime
- ca_bundle_dir = None
-except (ImportError):
- ca_bundle_dir = os.path.join(os.path.expanduser('~'), '.package_control')
- if not os.path.exists(ca_bundle_dir):
- os.mkdir(ca_bundle_dir)
-
-
-def find_root_ca_cert(settings, domain):
- runner = OpensslCli(settings.get('openssl_binary'), settings.get('debug'))
- binary = runner.retrieve_binary()
-
- args = [binary, 's_client', '-showcerts', '-connect', domain + ':443']
- result = runner.execute(args, os.path.dirname(binary))
-
- certs = []
- temp = []
-
- in_block = False
- for line in result.splitlines():
- if line.find('BEGIN CERTIFICATE') != -1:
- in_block = True
- if in_block:
- temp.append(line)
- if line.find('END CERTIFICATE') != -1:
- in_block = False
- certs.append(u"\n".join(temp))
- temp = []
-
- # Remove the cert for the domain itself, just leaving the
- # chain cert and the CA cert
- certs.pop(0)
-
- # Look for the "parent" root CA cert
- subject = openssl_get_cert_subject(settings, certs[-1])
- issuer = openssl_get_cert_issuer(settings, certs[-1])
-
- cert = get_ca_cert_by_subject(settings, issuer)
- cert_hash = hashlib.md5(cert.encode('utf-8')).hexdigest()
-
- return [cert, cert_hash]
-
-
-
-def get_system_ca_bundle_path(settings):
- """
- Get the filesystem path to the system CA bundle. On Linux it looks in a
- number of predefined places, however on OS X it has to be programatically
- exported from the SystemRootCertificates.keychain. Windows does not ship
- with a CA bundle, but also we use WinINet on Windows, so we don't need to
- worry about CA certs.
-
- :param settings:
- A dict to look in for `debug` and `openssl_binary` keys
-
- :return:
- The full filesystem path to the .ca-bundle file, or False on error
- """
-
- # If the sublime module is available, we bind this value at run time
- # since the sublime.packages_path() is not available at import time
- global ca_bundle_dir
-
- platform = sys.platform
- debug = settings.get('debug')
-
- ca_path = False
-
- if platform == 'win32':
- console_write(u"Unable to get system CA cert path since Windows does not ship with them", True)
- return False
-
- # OS X
- if platform == 'darwin':
- if not ca_bundle_dir:
- ca_bundle_dir = os.path.join(sublime.packages_path(), 'User')
- ca_path = os.path.join(ca_bundle_dir, 'Package Control.system-ca-bundle')
-
- exists = os.path.exists(ca_path)
- # The bundle is old if it is a week or more out of date
- is_old = exists and os.stat(ca_path).st_mtime < time.time() - 604800
-
- if not exists or is_old:
- if debug:
- console_write(u"Generating new CA bundle from system keychain", True)
- _osx_create_ca_bundle(settings, ca_path)
- if debug:
- console_write(u"Finished generating new CA bundle at %s" % ca_path, True)
- elif debug:
- console_write(u"Found previously exported CA bundle at %s" % ca_path, True)
-
- # Linux
- else:
- # Common CA cert paths
- paths = [
- '/usr/lib/ssl/certs/ca-certificates.crt',
- '/etc/ssl/certs/ca-certificates.crt',
- '/etc/pki/tls/certs/ca-bundle.crt',
- '/etc/ssl/ca-bundle.pem'
- ]
- for path in paths:
- if os.path.exists(path):
- ca_path = path
- break
-
- if debug and ca_path:
- console_write(u"Found system CA bundle at %s" % ca_path, True)
-
- return ca_path
-
-
-def get_ca_cert_by_subject(settings, subject):
- bundle_path = get_system_ca_bundle_path(settings)
-
- with open_compat(bundle_path, 'r') as f:
- contents = read_compat(f)
-
- temp = []
-
- in_block = False
- for line in contents.splitlines():
- if line.find('BEGIN CERTIFICATE') != -1:
- in_block = True
-
- if in_block:
- temp.append(line)
-
- if line.find('END CERTIFICATE') != -1:
- in_block = False
- cert = u"\n".join(temp)
- temp = []
-
- if openssl_get_cert_subject(settings, cert) == subject:
- return cert
-
- return False
-
-
-def openssl_get_cert_issuer(settings, cert):
- """
- Uses the openssl command line client to extract the issuer of an x509
- certificate.
-
- :param settings:
- A dict to look in for `debug` and `openssl_binary` keys
-
- :param cert:
- A string containing the PEM-encoded x509 certificate to extract the
- issuer from
-
- :return:
- The cert issuer
- """
-
- runner = OpensslCli(settings.get('openssl_binary'), settings.get('debug'))
- binary = runner.retrieve_binary()
- args = [binary, 'x509', '-noout', '-issuer']
- output = runner.execute(args, os.path.dirname(binary), cert)
- return re.sub('^issuer=\s*', '', output)
-
-
-def openssl_get_cert_name(settings, cert):
- """
- Uses the openssl command line client to extract the name of an x509
- certificate. If the commonName is set, that is used, otherwise the first
- organizationalUnitName is used. This mirrors what OS X uses for storing
- trust preferences.
-
- :param settings:
- A dict to look in for `debug` and `openssl_binary` keys
-
- :param cert:
- A string containing the PEM-encoded x509 certificate to extract the
- name from
-
- :return:
- The cert subject name, which is the commonName (if available), or the
- first organizationalUnitName
- """
-
- runner = OpensslCli(settings.get('openssl_binary'), settings.get('debug'))
-
- binary = runner.retrieve_binary()
-
- args = [binary, 'x509', '-noout', '-subject', '-nameopt',
- 'sep_multiline,lname,utf8']
- result = runner.execute(args, os.path.dirname(binary), cert)
-
- # First look for the common name
- cn = None
- # If there is no common name for the cert, the trust prefs use the first
- # orginizational unit name
- first_ou = None
-
- for line in result.splitlines():
- match = re.match('^\s+commonName=(.*)$', line)
- if match:
- cn = match.group(1)
- break
- match = re.match('^\s+organizationalUnitName=(.*)$', line)
- if first_ou is None and match:
- first_ou = match.group(1)
- continue
-
- # This is the name of the cert that would be used in the trust prefs
- return cn or first_ou
-
-
-def openssl_get_cert_subject(settings, cert):
- """
- Uses the openssl command line client to extract the subject of an x509
- certificate.
-
- :param settings:
- A dict to look in for `debug` and `openssl_binary` keys
-
- :param cert:
- A string containing the PEM-encoded x509 certificate to extract the
- subject from
-
- :return:
- The cert subject
- """
-
- runner = OpensslCli(settings.get('openssl_binary'), settings.get('debug'))
- binary = runner.retrieve_binary()
- args = [binary, 'x509', '-noout', '-subject']
- output = runner.execute(args, os.path.dirname(binary), cert)
- return re.sub('^subject=\s*', '', output)
-
-
-def _osx_create_ca_bundle(settings, destination):
- """
- Uses the OS X `security` command line tool to export the system's list of
- CA certs from /System/Library/Keychains/SystemRootCertificates.keychain.
- Checks the cert names against the trust preferences, ensuring that
- distrusted certs are not exported.
-
- :param settings:
- A dict to look in for `debug` and `openssl_binary` keys
-
- :param destination:
- The full filesystem path to the destination .ca-bundle file
- """
-
- distrusted_certs = _osx_get_distrusted_certs(settings)
-
- # Export the root certs
- args = ['/usr/bin/security', 'export', '-k',
- '/System/Library/Keychains/SystemRootCertificates.keychain', '-t',
- 'certs', '-p']
- result = Cli(None, settings.get('debug')).execute(args, '/usr/bin')
-
- certs = []
- temp = []
-
- in_block = False
- for line in result.splitlines():
- if line.find('BEGIN CERTIFICATE') != -1:
- in_block = True
-
- if in_block:
- temp.append(line)
-
- if line.find('END CERTIFICATE') != -1:
- in_block = False
- cert = u"\n".join(temp)
- temp = []
-
- if distrusted_certs:
- # If it is a distrusted cert, we move on to the next
- cert_name = openssl_get_cert_name(settings, cert)
- if cert_name in distrusted_certs:
- if settings.get('debug'):
- console_write(u'Skipping root certficate %s because it is distrusted' % cert_name, True)
- continue
-
- certs.append(cert)
-
- with open_compat(destination, 'w') as f:
- f.write(u"\n".join(certs))
-
-
-def _osx_get_distrusted_certs(settings):
- """
- Uses the OS X `security` binary to get a list of admin trust settings,
- which is what is set when a user changes the trust setting on a root
- certificate. By looking at the SSL policy, we can properly exclude
- distrusted certs from out export.
-
- Tested on OS X 10.6 and 10.8
-
- :param settings:
- A dict to look in for `debug` key
-
- :return:
- A list of CA cert names, where the name is the commonName (if
- available), or the first organizationalUnitName
- """
-
- args = ['/usr/bin/security', 'dump-trust-settings', '-d']
- result = Cli(None, settings.get('debug')).execute(args, '/usr/bin')
-
- distrusted_certs = []
- cert_name = None
- ssl_policy = False
- for line in result.splitlines():
- if line == '':
- continue
-
- # Reset for each cert
- match = re.match('Cert\s+\d+:\s+(.*)$', line)
- if match:
- cert_name = match.group(1)
- continue
-
- # Reset for each trust setting
- if re.match('^\s+Trust\s+Setting\s+\d+:', line):
- ssl_policy = False
- continue
-
- # We are only interested in SSL policies
- if re.match('^\s+Policy\s+OID\s+:\s+SSL', line):
- ssl_policy = True
- continue
-
- distrusted = re.match('^\s+Result\s+Type\s+:\s+kSecTrustSettingsResultDeny', line)
- if ssl_policy and distrusted and cert_name not in distrusted_certs:
- if settings.get('debug'):
- console_write(u'Found SSL distrust setting for root certificate %s' % cert_name, True)
- distrusted_certs.append(cert_name)
-
- return distrusted_certs
-
-
-class OpensslCli(Cli):
-
- cli_name = 'openssl'
-
- def retrieve_binary(self):
- """
- Returns the path to the openssl executable
-
- :return: The string path to the executable or False on error
- """
-
- name = 'openssl'
- if os.name == 'nt':
- name += '.exe'
-
- binary = self.find_binary(name)
- if binary and os.path.isdir(binary):
- full_path = os.path.join(binary, name)
- if os.path.exists(full_path):
- binary = full_path
-
- if not binary:
- show_error((u'Unable to find %s. Please set the openssl_binary ' +
- u'setting by accessing the Preferences > Package Settings > ' +
- u'Package Control > Settings \u2013 User menu entry. The ' +
- u'Settings \u2013 Default entry can be used for reference, ' +
- u'but changes to that will be overwritten upon next upgrade.') % name)
- return False
-
- return binary
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/cache.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/cache.py
deleted file mode 100644
index 015744c..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/cache.py
+++ /dev/null
@@ -1,173 +0,0 @@
-import time
-
-
-# A cache of channel and repository info to allow users to install multiple
-# packages without having to wait for the metadata to be downloaded more
-# than once. The keys are managed locally by the utilizing code.
-_channel_repository_cache = {}
-
-
-def clear_cache():
- global _channel_repository_cache
- _channel_repository_cache = {}
-
-
-def get_cache(key, default=None):
- """
- Gets an in-memory cache value
-
- :param key:
- The string key
-
- :param default:
- The value to return if the key has not been set, or the ttl expired
-
- :return:
- The cached value, or default
- """
-
- struct = _channel_repository_cache.get(key, {})
- expires = struct.get('expires')
- if expires and expires > time.time():
- return struct.get('data')
- return default
-
-
-def merge_cache_over_settings(destination, setting, key_prefix):
- """
- Take the cached value of `key` and put it into the key `setting` of
- the destination.settings dict. Merge the values by overlaying the
- cached setting over the existing info.
-
- :param destination:
- An object that has a `.settings` attribute that is a dict
-
- :param setting:
- The dict key to use when pushing the value into the settings dict
-
- :param key_prefix:
- The string to prefix to `setting` to make the cache key
- """
-
- existing = destination.settings.get(setting, {})
- value = get_cache(key_prefix + '.' + setting, {})
- if value:
- existing.update(value)
- destination.settings[setting] = existing
-
-
-def merge_cache_under_settings(destination, setting, key_prefix, list_=False):
- """
- Take the cached value of `key` and put it into the key `setting` of
- the destination.settings dict. Merge the values by overlaying the
- existing setting value over the cached info.
-
- :param destination:
- An object that has a `.settings` attribute that is a dict
-
- :param setting:
- The dict key to use when pushing the value into the settings dict
-
- :param key_prefix:
- The string to prefix to `setting` to make the cache key
-
- :param list_:
- If a list should be used instead of a dict
- """
-
- default = {} if not list_ else []
- existing = destination.settings.get(setting)
- value = get_cache(key_prefix + '.' + setting, default)
- if value:
- if existing:
- if list_:
- # Prevent duplicate values
- base = dict(zip(value, [None]*len(value)))
- for val in existing:
- if val in base:
- continue
- value.append(val)
- else:
- value.update(existing)
- destination.settings[setting] = value
-
-
-def set_cache(key, data, ttl=300):
- """
- Sets an in-memory cache value
-
- :param key:
- The string key
-
- :param data:
- The data to cache
-
- :param ttl:
- The integer number of second to cache the data for
- """
-
- _channel_repository_cache[key] = {
- 'data': data,
- 'expires': time.time() + ttl
- }
-
-
-def set_cache_over_settings(destination, setting, key_prefix, value, ttl):
- """
- Take the value passed, and merge it over the current `setting`. Once
- complete, take the value and set the cache `key` and destination.settings
- `setting` to that value, using the `ttl` for set_cache().
-
- :param destination:
- An object that has a `.settings` attribute that is a dict
-
- :param setting:
- The dict key to use when pushing the value into the settings dict
-
- :param key_prefix:
- The string to prefix to `setting` to make the cache key
-
- :param value:
- The value to set
-
- :param ttl:
- The cache ttl to use
- """
-
- existing = destination.settings.get(setting, {})
- existing.update(value)
- set_cache(key_prefix + '.' + setting, value, ttl)
- destination.settings[setting] = value
-
-
-def set_cache_under_settings(destination, setting, key_prefix, value, ttl, list_=False):
- """
- Take the value passed, and merge the current `setting` over it. Once
- complete, take the value and set the cache `key` and destination.settings
- `setting` to that value, using the `ttl` for set_cache().
-
- :param destination:
- An object that has a `.settings` attribute that is a dict
-
- :param setting:
- The dict key to use when pushing the value into the settings dict
-
- :param key_prefix:
- The string to prefix to `setting` to make the cache key
-
- :param value:
- The value to set
-
- :param ttl:
- The cache ttl to use
- """
-
- default = {} if not list_ else []
- existing = destination.settings.get(setting, default)
- if value:
- if list_:
- value.extend(existing)
- else:
- value.update(existing)
- set_cache(key_prefix + '.' + setting, value, ttl)
- destination.settings[setting] = value
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/clear_directory.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/clear_directory.py
deleted file mode 100644
index 4ddfc07..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/clear_directory.py
+++ /dev/null
@@ -1,37 +0,0 @@
-import os
-
-
-def clear_directory(directory, ignore_paths=None):
- """
- Tries to delete all files and folders from a directory
-
- :param directory:
- The string directory path
-
- :param ignore_paths:
- An array of paths to ignore while deleting files
-
- :return:
- If all of the files and folders were successfully deleted
- """
-
- was_exception = False
- for root, dirs, files in os.walk(directory, topdown=False):
- paths = [os.path.join(root, f) for f in files]
- paths.extend([os.path.join(root, d) for d in dirs])
-
- for path in paths:
- try:
- # Don't delete the metadata file, that way we have it
- # when the reinstall happens, and the appropriate
- # usage info can be sent back to the server
- if ignore_paths and path in ignore_paths:
- continue
- if os.path.isdir(path):
- os.rmdir(path)
- else:
- os.remove(path)
- except (OSError, IOError):
- was_exception = True
-
- return not was_exception
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/clients/__init__.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/clients/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/clients/bitbucket_client.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/clients/bitbucket_client.py
deleted file mode 100644
index 87a4334..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/clients/bitbucket_client.py
+++ /dev/null
@@ -1,257 +0,0 @@
-import re
-
-from ..versions import version_sort, version_filter
-from .json_api_client import JSONApiClient
-
-
-# A predefined list of readme filenames to look for
-_readme_filenames = [
- 'readme',
- 'readme.txt',
- 'readme.md',
- 'readme.mkd',
- 'readme.mdown',
- 'readme.markdown',
- 'readme.textile',
- 'readme.creole',
- 'readme.rst'
-]
-
-
-class BitBucketClient(JSONApiClient):
-
- def download_info(self, url):
- """
- Retrieve information about downloading a package
-
- :param url:
- The URL of the repository, in one of the forms:
- https://bitbucket.org/{user}/{repo}
- https://bitbucket.org/{user}/{repo}/src/{branch}
- https://bitbucket.org/{user}/{repo}/#tags
- If the last option, grabs the info from the newest
- tag that is a valid semver version.
-
- :raises:
- DownloaderException: when there is an error downloading
- ClientException: when there is an error parsing the response
-
- :return:
- None if no match, False if no commit, or a dict with the following keys:
- `version` - the version number of the download
- `url` - the download URL of a zip file of the package
- `date` - the ISO-8601 timestamp string when the version was published
- """
-
- commit_info = self._commit_info(url)
- if not commit_info:
- return commit_info
-
- return {
- 'version': commit_info['version'],
- 'url': 'https://bitbucket.org/%s/get/%s.zip' % (commit_info['user_repo'], commit_info['commit']),
- 'date': commit_info['timestamp']
- }
-
- def repo_info(self, url):
- """
- Retrieve general information about a repository
-
- :param url:
- The URL to the repository, in one of the forms:
- https://bitbucket.org/{user}/{repo}
- https://bitbucket.org/{user}/{repo}/src/{branch}
-
- :raises:
- DownloaderException: when there is an error downloading
- ClientException: when there is an error parsing the response
-
- :return:
- None if no match, or a dict with the following keys:
- `name`
- `description`
- `homepage` - URL of the homepage
- `author`
- `readme` - URL of the readme
- `issues` - URL of bug tracker
- `donate` - URL of a donate page
- """
-
- user_repo, branch = self._user_repo_branch(url)
- if not user_repo:
- return user_repo
-
- api_url = self._make_api_url(user_repo)
-
- info = self.fetch_json(api_url)
-
- issues_url = u'https://bitbucket.org/%s/issues' % user_repo
-
- return {
- 'name': info['name'],
- 'description': info['description'] or 'No description provided',
- 'homepage': info['website'] or url,
- 'author': info['owner'],
- 'donate': u'https://www.gittip.com/on/bitbucket/%s/' % info['owner'],
- 'readme': self._readme_url(user_repo, branch),
- 'issues': issues_url if info['has_issues'] else None
- }
-
- def _commit_info(self, url):
- """
- Fetches info about the latest commit to a repository
-
- :param url:
- The URL to the repository, in one of the forms:
- https://bitbucket.org/{user}/{repo}
- https://bitbucket.org/{user}/{repo}/src/{branch}
- https://bitbucket.org/{user}/{repo}/#tags
- If the last option, grabs the info from the newest
- tag that is a valid semver version.
-
- :raises:
- DownloaderException: when there is an error downloading
- ClientException: when there is an error parsing the response
-
- :return:
- None if no match, False if no commit, or a dict with the following keys:
- `user_repo` - the user/repo name
- `timestamp` - the ISO-8601 UTC timestamp string
- `commit` - the branch or tag name
- `version` - the extracted version number
- """
-
- tags_match = re.match('https?://bitbucket.org/([^/]+/[^#/]+)/?#tags$', url)
-
- version = None
-
- if tags_match:
- user_repo = tags_match.group(1)
- tags_url = self._make_api_url(user_repo, '/tags')
- tags_list = self.fetch_json(tags_url)
- tags = version_filter(tags_list.keys(), self.settings.get('install_prereleases'))
- tags = version_sort(tags, reverse=True)
- if not tags:
- return False
- commit = tags[0]
- version = re.sub('^v', '', commit)
-
- else:
- user_repo, commit = self._user_repo_branch(url)
- if not user_repo:
- return user_repo
-
- changeset_url = self._make_api_url(user_repo, '/changesets/%s' % commit)
- commit_info = self.fetch_json(changeset_url)
-
- commit_date = commit_info['timestamp'][0:19]
-
- if not version:
- version = re.sub('[\-: ]', '.', commit_date)
-
- return {
- 'user_repo': user_repo,
- 'timestamp': commit_date,
- 'commit': commit,
- 'version': version
- }
-
- def _main_branch_name(self, user_repo):
- """
- Fetch the name of the default branch
-
- :param user_repo:
- The user/repo name to get the main branch for
-
- :raises:
- DownloaderException: when there is an error downloading
- ClientException: when there is an error parsing the response
-
- :return:
- The name of the main branch - `master` or `default`
- """
-
- main_branch_url = self._make_api_url(user_repo, '/main-branch')
- main_branch_info = self.fetch_json(main_branch_url, True)
- return main_branch_info['name']
-
- def _make_api_url(self, user_repo, suffix=''):
- """
- Generate a URL for the BitBucket API
-
- :param user_repo:
- The user/repo of the repository
-
- :param suffix:
- The extra API path info to add to the URL
-
- :return:
- The API URL
- """
-
- return 'https://api.bitbucket.org/1.0/repositories/%s%s' % (user_repo, suffix)
-
- def _readme_url(self, user_repo, branch, prefer_cached=False):
- """
- Parse the root directory listing for the repo and return the URL
- to any file that looks like a readme
-
- :param user_repo:
- The user/repo string
-
- :param branch:
- The branch to fetch the readme from
-
- :param prefer_cached:
- If a cached directory listing should be used instead of a new HTTP request
-
- :raises:
- DownloaderException: when there is an error downloading
- ClientException: when there is an error parsing the response
-
- :return:
- The URL to the readme file, or None
- """
-
- listing_url = self._make_api_url(user_repo, '/src/%s/' % branch)
- root_dir_info = self.fetch_json(listing_url, prefer_cached)
-
- for entry in root_dir_info['files']:
- if entry['path'].lower() in _readme_filenames:
- return 'https://bitbucket.org/%s/raw/%s/%s' % (user_repo,
- branch, entry['path'])
-
- return None
-
- def _user_repo_branch(self, url):
- """
- Extract the username/repo and branch name from the URL
-
- :param url:
- The URL to extract the info from, in one of the forms:
- https://bitbucket.org/{user}/{repo}
- https://bitbucket.org/{user}/{repo}/src/{branch}
-
- :raises:
- DownloaderException: when there is an error downloading
- ClientException: when there is an error parsing the response
-
- :return:
- A tuple of (user/repo, branch name) or (None, None) if not matching
- """
-
- repo_match = re.match('https?://bitbucket.org/([^/]+/[^/]+)/?$', url)
- branch_match = re.match('https?://bitbucket.org/([^/]+/[^/]+)/src/([^/]+)/?$', url)
-
- if repo_match:
- user_repo = repo_match.group(1)
- branch = self._main_branch_name(user_repo)
-
- elif branch_match:
- user_repo = branch_match.group(1)
- branch = branch_match.group(2)
-
- else:
- return (None, None)
-
- return (user_repo, branch)
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/clients/client_exception.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/clients/client_exception.py
deleted file mode 100644
index fb8dd72..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/clients/client_exception.py
+++ /dev/null
@@ -1,5 +0,0 @@
-class ClientException(Exception):
- """If a client could not fetch information"""
-
- def __str__(self):
- return self.args[0]
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/clients/github_client.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/clients/github_client.py
deleted file mode 100644
index bd519f7..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/clients/github_client.py
+++ /dev/null
@@ -1,292 +0,0 @@
-import re
-
-try:
- # Python 3
- from urllib.parse import urlencode, quote
-except (ImportError):
- # Python 2
- from urllib import urlencode, quote
-
-from ..versions import version_sort, version_filter
-from .json_api_client import JSONApiClient
-from ..downloaders.downloader_exception import DownloaderException
-
-
-class GitHubClient(JSONApiClient):
-
- def download_info(self, url):
- """
- Retrieve information about downloading a package
-
- :param url:
- The URL of the repository, in one of the forms:
- https://github.com/{user}/{repo}
- https://github.com/{user}/{repo}/tree/{branch}
- https://github.com/{user}/{repo}/tags
- If the last option, grabs the info from the newest
- tag that is a valid semver version.
-
- :raises:
- DownloaderException: when there is an error downloading
- ClientException: when there is an error parsing the response
-
- :return:
- None if no match, False if no commit, or a dict with the following keys:
- `version` - the version number of the download
- `url` - the download URL of a zip file of the package
- `date` - the ISO-8601 timestamp string when the version was published
- """
-
- commit_info = self._commit_info(url)
- if not commit_info:
- return commit_info
-
- return {
- 'version': commit_info['version'],
- # We specifically use codeload.github.com here because the download
- # URLs all redirect there, and some of the downloaders don't follow
- # HTTP redirect headers
- 'url': 'https://codeload.github.com/%s/zip/%s' % (commit_info['user_repo'], quote(commit_info['commit'])),
- 'date': commit_info['timestamp']
- }
-
- def repo_info(self, url):
- """
- Retrieve general information about a repository
-
- :param url:
- The URL to the repository, in one of the forms:
- https://github.com/{user}/{repo}
- https://github.com/{user}/{repo}/tree/{branch}
-
- :raises:
- DownloaderException: when there is an error downloading
- ClientException: when there is an error parsing the response
-
- :return:
- None if no match, or a dict with the following keys:
- `name`
- `description`
- `homepage` - URL of the homepage
- `author`
- `readme` - URL of the readme
- `issues` - URL of bug tracker
- `donate` - URL of a donate page
- """
-
- user_repo, branch = self._user_repo_branch(url)
- if not user_repo:
- return user_repo
-
- api_url = self._make_api_url(user_repo)
-
- info = self.fetch_json(api_url)
-
- output = self._extract_repo_info(info)
- output['readme'] = None
-
- readme_info = self._readme_info(user_repo, branch)
- if not readme_info:
- return output
-
- output['readme'] = 'https://raw.github.com/%s/%s/%s' % (user_repo,
- branch, readme_info['path'])
- return output
-
- def user_info(self, url):
- """
- Retrieve general information about all repositories that are
- part of a user/organization.
-
- :param url:
- The URL to the user/organization, in the following form:
- https://github.com/{user}
-
- :raises:
- DownloaderException: when there is an error downloading
- ClientException: when there is an error parsing the response
-
- :return:
- None if no match, or am list of dicts with the following keys:
- `name`
- `description`
- `homepage` - URL of the homepage
- `author`
- `readme` - URL of the readme
- `issues` - URL of bug tracker
- `donate` - URL of a donate page
- """
-
- user_match = re.match('https?://github.com/([^/]+)/?$', url)
- if user_match == None:
- return None
-
- user = user_match.group(1)
- api_url = self._make_api_url(user)
-
- repos_info = self.fetch_json(api_url)
-
- output = []
- for info in repos_info:
- output.append(self._extract_repo_info(info))
- return output
-
- def _commit_info(self, url):
- """
- Fetches info about the latest commit to a repository
-
- :param url:
- The URL to the repository, in one of the forms:
- https://github.com/{user}/{repo}
- https://github.com/{user}/{repo}/tree/{branch}
- https://github.com/{user}/{repo}/tags
- If the last option, grabs the info from the newest
- tag that is a valid semver version.
-
- :raises:
- DownloaderException: when there is an error downloading
- ClientException: when there is an error parsing the response
-
- :return:
- None if no match, False is no commit, or a dict with the following keys:
- `user_repo` - the user/repo name
- `timestamp` - the ISO-8601 UTC timestamp string
- `commit` - the branch or tag name
- `version` - the extracted version number
- """
-
- tags_match = re.match('https?://github.com/([^/]+/[^/]+)/tags/?$', url)
-
- version = None
-
- if tags_match:
- user_repo = tags_match.group(1)
- tags_url = self._make_api_url(user_repo, '/tags')
- tags_list = self.fetch_json(tags_url)
- tags = [tag['name'] for tag in tags_list]
- tags = version_filter(tags, self.settings.get('install_prereleases'))
- tags = version_sort(tags, reverse=True)
- if not tags:
- return False
- commit = tags[0]
- version = re.sub('^v', '', commit)
-
- else:
- user_repo, commit = self._user_repo_branch(url)
- if not user_repo:
- return user_repo
-
- query_string = urlencode({'sha': commit, 'per_page': 1})
- commit_url = self._make_api_url(user_repo, '/commits?%s' % query_string)
- commit_info = self.fetch_json(commit_url)
-
- commit_date = commit_info[0]['commit']['committer']['date'][0:19].replace('T', ' ')
-
- if not version:
- version = re.sub('[\-: ]', '.', commit_date)
-
- return {
- 'user_repo': user_repo,
- 'timestamp': commit_date,
- 'commit': commit,
- 'version': version
- }
-
- def _extract_repo_info(self, result):
- """
- Extracts information about a repository from the API result
-
- :param result:
- A dict representing the data returned from the GitHub API
-
- :return:
- A dict with the following keys:
- `name`
- `description`
- `homepage` - URL of the homepage
- `author`
- `issues` - URL of bug tracker
- `donate` - URL of a donate page
- """
-
- issues_url = u'https://github.com/%s/%s/issues' % (result['owner']['login'], result['name'])
-
- return {
- 'name': result['name'],
- 'description': result['description'] or 'No description provided',
- 'homepage': result['homepage'] or result['html_url'],
- 'author': result['owner']['login'],
- 'issues': issues_url if result['has_issues'] else None,
- 'donate': u'https://www.gittip.com/on/github/%s/' % result['owner']['login']
- }
-
- def _make_api_url(self, user_repo, suffix=''):
- """
- Generate a URL for the BitBucket API
-
- :param user_repo:
- The user/repo of the repository
-
- :param suffix:
- The extra API path info to add to the URL
-
- :return:
- The API URL
- """
-
- return 'https://api.github.com/repos/%s%s' % (user_repo, suffix)
-
- def _readme_info(self, user_repo, branch, prefer_cached=False):
- """
- Fetches the raw GitHub API information about a readme
-
- :param user_repo:
- The user/repo of the repository
-
- :param branch:
- The branch to pull the readme from
-
- :param prefer_cached:
- If a cached version of the info should be returned instead of making a new HTTP request
-
- :raises:
- DownloaderException: when there is an error downloading
- ClientException: when there is an error parsing the response
-
- :return:
- A dict containing all of the info from the GitHub API, or None if no readme exists
- """
-
- query_string = urlencode({'ref': branch})
- readme_url = self._make_api_url(user_repo, '/readme?%s' % query_string)
- try:
- return self.fetch_json(readme_url, prefer_cached)
- except (DownloaderException) as e:
- if str(e).find('HTTP error 404') != -1:
- return None
- raise
-
- def _user_repo_branch(self, url):
- """
- Extract the username/repo and branch name from the URL
-
- :param url:
- The URL to extract the info from, in one of the forms:
- https://github.com/{user}/{repo}
- https://github.com/{user}/{repo}/tree/{branch}
-
- :return:
- A tuple of (user/repo, branch name) or (None, None) if no match
- """
-
- branch = 'master'
- branch_match = re.match('https?://github.com/[^/]+/[^/]+/tree/([^/]+)/?$', url)
- if branch_match != None:
- branch = branch_match.group(1)
-
- repo_match = re.match('https?://github.com/([^/]+/[^/]+)($|/.*$)', url)
- if repo_match == None:
- return (None, None)
-
- user_repo = repo_match.group(1)
- return (user_repo, branch)
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/clients/json_api_client.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/clients/json_api_client.py
deleted file mode 100644
index a847302..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/clients/json_api_client.py
+++ /dev/null
@@ -1,64 +0,0 @@
-import json
-
-try:
- # Python 3
- from urllib.parse import urlencode, urlparse
-except (ImportError):
- # Python 2
- from urllib import urlencode
- from urlparse import urlparse
-
-from .client_exception import ClientException
-from ..download_manager import downloader
-
-
-class JSONApiClient():
- def __init__(self, settings):
- self.settings = settings
-
- def fetch(self, url, prefer_cached=False):
- """
- Retrieves the contents of a URL
-
- :param url:
- The URL to download the content from
-
- :param prefer_cached:
- If a cached copy of the content is preferred
-
- :return: The bytes/string
- """
-
- # If there are extra params for the domain name, add them
- extra_params = self.settings.get('query_string_params')
- domain_name = urlparse(url).netloc
- if extra_params and domain_name in extra_params:
- params = urlencode(extra_params[domain_name])
- joiner = '?%s' if url.find('?') == -1 else '&%s'
- url += joiner % params
-
- with downloader(url, self.settings) as manager:
- content = manager.fetch(url, 'Error downloading repository.',
- prefer_cached)
- return content
-
- def fetch_json(self, url, prefer_cached=False):
- """
- Retrieves and parses the JSON from a URL
-
- :param url:
- The URL to download the JSON from
-
- :param prefer_cached:
- If a cached copy of the JSON is preferred
-
- :return: A dict or list from the JSON
- """
-
- repository_json = self.fetch(url, prefer_cached)
-
- try:
- return json.loads(repository_json.decode('utf-8'))
- except (ValueError):
- error_string = u'Error parsing JSON from URL %s.' % url
- raise ClientException(error_string)
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/clients/readme_client.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/clients/readme_client.py
deleted file mode 100644
index 47e2a7b..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/clients/readme_client.py
+++ /dev/null
@@ -1,83 +0,0 @@
-import re
-import os
-import base64
-
-try:
- # Python 3
- from urllib.parse import urlencode
-except (ImportError):
- # Python 2
- from urllib import urlencode
-
-from .json_api_client import JSONApiClient
-from ..downloaders.downloader_exception import DownloaderException
-
-
-# Used to map file extensions to formats
-_readme_formats = {
- '.md': 'markdown',
- '.mkd': 'markdown',
- '.mdown': 'markdown',
- '.markdown': 'markdown',
- '.textile': 'textile',
- '.creole': 'creole',
- '.rst': 'rst'
-}
-
-
-class ReadmeClient(JSONApiClient):
-
- def readme_info(self, url):
- """
- Retrieve the readme and info about it
-
- :param url:
- The URL of the readme file
-
- :raises:
- DownloaderException: if there is an error downloading the readme
- ClientException: if there is an error parsing the response
-
- :return:
- A dict with the following keys:
- `filename`
- `format` - `markdown`, `textile`, `creole`, `rst` or `txt`
- `contents` - contents of the readme as str/unicode
- """
-
- contents = None
-
- # Try to grab the contents of a GitHub-based readme by grabbing the cached
- # content of the readme API call
- github_match = re.match('https://raw.github.com/([^/]+/[^/]+)/([^/]+)/readme(\.(md|mkd|mdown|markdown|textile|creole|rst|txt))?$', url, re.I)
- if github_match:
- user_repo = github_match.group(1)
- branch = github_match.group(2)
-
- query_string = urlencode({'ref': branch})
- readme_json_url = 'https://api.github.com/repos/%s/readme?%s' % (user_repo, query_string)
- try:
- info = self.fetch_json(readme_json_url, prefer_cached=True)
- contents = base64.b64decode(info['content'])
- except (ValueError) as e:
- pass
-
- if not contents:
- contents = self.fetch(url)
-
- basename, ext = os.path.splitext(url)
- format = 'txt'
- ext = ext.lower()
- if ext in _readme_formats:
- format = _readme_formats[ext]
-
- try:
- contents = contents.decode('utf-8')
- except (UnicodeDecodeError) as e:
- contents = contents.decode('cp1252', errors='replace')
-
- return {
- 'filename': os.path.basename(url),
- 'format': format,
- 'contents': contents
- }
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/cmd.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/cmd.py
deleted file mode 100644
index 0d5c999..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/cmd.py
+++ /dev/null
@@ -1,167 +0,0 @@
-import os
-import subprocess
-import re
-
-if os.name == 'nt':
- from ctypes import windll, create_unicode_buffer
-
-from .console_write import console_write
-from .unicode import unicode_from_os
-from .show_error import show_error
-
-try:
- # Python 2
- str_cls = unicode
-except (NameError):
- # Python 3
- str_cls = str
-
-
-def create_cmd(args, basename_binary=False):
- """
- Takes an array of strings to be passed to subprocess.Popen and creates
- a string that can be pasted into a terminal
-
- :param args:
- The array containing the binary name/path and all arguments
-
- :param basename_binary:
- If only the basename of the binary should be disabled instead of the full path
-
- :return:
- The command string
- """
-
- if basename_binary:
- args[0] = os.path.basename(args[0])
-
- if os.name == 'nt':
- return subprocess.list2cmdline(args)
- else:
- escaped_args = []
- for arg in args:
- if re.search('^[a-zA-Z0-9/_^\\-\\.:=]+$', arg) == None:
- arg = u"'" + arg.replace(u"'", u"'\\''") + u"'"
- escaped_args.append(arg)
- return u' '.join(escaped_args)
-
-
-class Cli(object):
- """
- Base class for running command line apps
-
- :param binary:
- The full filesystem path to the executable for the version control
- system. May be set to None to allow the code to try and find it.
- """
-
- cli_name = None
-
- def __init__(self, binary, debug):
- self.binary = binary
- self.debug = debug
-
- def execute(self, args, cwd, input=None):
- """
- Creates a subprocess with the executable/args
-
- :param args:
- A list of the executable path and all arguments to it
-
- :param cwd:
- The directory in which to run the executable
-
- :param input:
- The input text to send to the program
-
- :return: A string of the executable output
- """
-
- startupinfo = None
- if os.name == 'nt':
- startupinfo = subprocess.STARTUPINFO()
- startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
-
- # Make sure the cwd is ascii
- try:
- cwd.encode('ascii')
- except UnicodeEncodeError:
- buf = create_unicode_buffer(512)
- if windll.kernel32.GetShortPathNameW(cwd, buf, len(buf)):
- cwd = buf.value
-
- if self.debug:
- console_write(u"Trying to execute command %s" % create_cmd(args), True)
-
- try:
- proc = subprocess.Popen(args, stdin=subprocess.PIPE,
- stdout=subprocess.PIPE, stderr=subprocess.STDOUT,
- startupinfo=startupinfo, cwd=cwd)
-
- if input and isinstance(input, str_cls):
- input = input.encode('utf-8')
- output, _ = proc.communicate(input)
- output = output.decode('utf-8')
- output = output.replace('\r\n', '\n').rstrip(' \n\r')
-
- return output
-
- except (OSError) as e:
- cmd = create_cmd(args)
- error = unicode_from_os(e)
- message = u"Error executing: %s\n%s\n\nTry checking your \"%s_binary\" setting?" % (cmd, error, self.cli_name)
- show_error(message)
- return False
-
- def find_binary(self, name):
- """
- Locates the executable by looking in the PATH and well-known directories
-
- :param name:
- The string filename of the executable
-
- :return: The filesystem path to the executable, or None if not found
- """
-
- if self.binary:
- if self.debug:
- error_string = u"Using \"%s_binary\" from settings \"%s\"" % (
- self.cli_name, self.binary)
- console_write(error_string, True)
- return self.binary
-
- # Try the path first
- for dir_ in os.environ['PATH'].split(os.pathsep):
- path = os.path.join(dir_, name)
- if os.path.exists(path):
- if self.debug:
- console_write(u"Found %s at \"%s\"" % (self.cli_name, path), True)
- return path
-
- # This is left in for backwards compatibility and for windows
- # users who may have the binary, albeit in a common dir that may
- # not be part of the PATH
- if os.name == 'nt':
- dirs = ['C:\\Program Files\\Git\\bin',
- 'C:\\Program Files (x86)\\Git\\bin',
- 'C:\\Program Files\\TortoiseGit\\bin',
- 'C:\\Program Files\\Mercurial',
- 'C:\\Program Files (x86)\\Mercurial',
- 'C:\\Program Files (x86)\\TortoiseHg',
- 'C:\\Program Files\\TortoiseHg',
- 'C:\\cygwin\\bin']
- else:
- # ST seems to launch with a minimal set of environmental variables
- # on OS X, so we add some common paths for it
- dirs = ['/usr/local/git/bin', '/usr/local/bin']
-
- for dir_ in dirs:
- path = os.path.join(dir_, name)
- if os.path.exists(path):
- if self.debug:
- console_write(u"Found %s at \"%s\"" % (self.cli_name, path), True)
- return path
-
- if self.debug:
- console_write(u"Could not find %s on your machine" % self.cli_name, True)
- return None
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/commands/__init__.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/commands/__init__.py
deleted file mode 100644
index dde03d4..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/commands/__init__.py
+++ /dev/null
@@ -1,39 +0,0 @@
-import os
-
-from .add_channel_command import AddChannelCommand
-from .add_repository_command import AddRepositoryCommand
-from .create_binary_package_command import CreateBinaryPackageCommand
-from .create_package_command import CreatePackageCommand
-from .disable_package_command import DisablePackageCommand
-from .discover_packages_command import DiscoverPackagesCommand
-from .enable_package_command import EnablePackageCommand
-from .grab_certs_command import GrabCertsCommand
-from .install_package_command import InstallPackageCommand
-from .list_packages_command import ListPackagesCommand
-from .remove_package_command import RemovePackageCommand
-from .upgrade_all_packages_command import UpgradeAllPackagesCommand
-from .upgrade_package_command import UpgradePackageCommand
-from .package_message_command import PackageMessageCommand
-
-
-__all__ = [
- 'AddChannelCommand',
- 'AddRepositoryCommand',
- 'CreateBinaryPackageCommand',
- 'CreatePackageCommand',
- 'DisablePackageCommand',
- 'DiscoverPackagesCommand',
- 'EnablePackageCommand',
- 'InstallPackageCommand',
- 'ListPackagesCommand',
- 'RemovePackageCommand',
- 'UpgradeAllPackagesCommand',
- 'UpgradePackageCommand',
- 'PackageMessageCommand'
-]
-
-# Windows uses the wininet downloader, so it doesn't use the CA cert bundle
-# and thus does not need the ability to grab to CA certs. Additionally,
-# there is no openssl.exe on Windows.
-if os.name != 'nt':
- __all__.append('GrabCertsCommand')
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/commands/add_channel_command.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/commands/add_channel_command.py
deleted file mode 100644
index 5e1b8d1..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/commands/add_channel_command.py
+++ /dev/null
@@ -1,46 +0,0 @@
-import re
-
-import sublime
-import sublime_plugin
-
-from ..show_error import show_error
-
-
-class AddChannelCommand(sublime_plugin.WindowCommand):
- """
- A command to add a new channel (list of repositories) to the user's machine
- """
-
- def run(self):
- self.window.show_input_panel('Channel JSON URL', '',
- self.on_done, self.on_change, self.on_cancel)
-
- def on_done(self, input):
- """
- Input panel handler - adds the provided URL as a channel
-
- :param input:
- A string of the URL to the new channel
- """
-
- input = input.strip()
-
- if re.match('https?://', input, re.I) == None:
- show_error(u"Unable to add the channel \"%s\" since it does not appear to be served via HTTP (http:// or https://)." % input)
- return
-
- settings = sublime.load_settings('Package Control.sublime-settings')
- channels = settings.get('channels', [])
- if not channels:
- channels = []
- channels.append(input)
- settings.set('channels', channels)
- sublime.save_settings('Package Control.sublime-settings')
- sublime.status_message(('Channel %s successfully ' +
- 'added') % input)
-
- def on_change(self, input):
- pass
-
- def on_cancel(self):
- pass
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/commands/add_repository_command.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/commands/add_repository_command.py
deleted file mode 100644
index 3d04323..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/commands/add_repository_command.py
+++ /dev/null
@@ -1,46 +0,0 @@
-import re
-
-import sublime
-import sublime_plugin
-
-from ..show_error import show_error
-
-
-class AddRepositoryCommand(sublime_plugin.WindowCommand):
- """
- A command to add a new repository to the user's machine
- """
-
- def run(self):
- self.window.show_input_panel('GitHub or BitBucket Web URL, or Custom' +
- ' JSON Repository URL', '', self.on_done,
- self.on_change, self.on_cancel)
-
- def on_done(self, input):
- """
- Input panel handler - adds the provided URL as a repository
-
- :param input:
- A string of the URL to the new repository
- """
-
- input = input.strip()
-
- if re.match('https?://', input, re.I) == None:
- show_error(u"Unable to add the repository \"%s\" since it does not appear to be served via HTTP (http:// or https://)." % input)
- return
-
- settings = sublime.load_settings('Package Control.sublime-settings')
- repositories = settings.get('repositories', [])
- if not repositories:
- repositories = []
- repositories.append(input)
- settings.set('repositories', repositories)
- sublime.save_settings('Package Control.sublime-settings')
- sublime.status_message('Repository %s successfully added' % input)
-
- def on_change(self, input):
- pass
-
- def on_cancel(self):
- pass
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/commands/create_binary_package_command.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/commands/create_binary_package_command.py
deleted file mode 100644
index 491dd1c..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/commands/create_binary_package_command.py
+++ /dev/null
@@ -1,35 +0,0 @@
-import sublime_plugin
-
-from ..package_creator import PackageCreator
-
-
-class CreateBinaryPackageCommand(sublime_plugin.WindowCommand, PackageCreator):
- """
- Command to create a binary .sublime-package file. Binary packages in
- general exclude the .py source files and instead include the .pyc files.
- Actual included and excluded files are controlled by settings.
- """
-
- def run(self):
- self.show_panel()
-
- def on_done(self, picked):
- """
- Quick panel user selection handler - processes the user package
- selection and create the package file
-
- :param picked:
- An integer of the 0-based package name index from the presented
- list. -1 means the user cancelled.
- """
-
- if picked == -1:
- return
- package_name = self.packages[picked]
- package_destination = self.get_package_destination()
-
- if self.manager.create_package(package_name, package_destination,
- binary_package=True):
- self.window.run_command('open_dir', {"dir":
- package_destination, "file": package_name +
- '.sublime-package'})
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/commands/create_package_command.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/commands/create_package_command.py
deleted file mode 100644
index 8b0524a..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/commands/create_package_command.py
+++ /dev/null
@@ -1,32 +0,0 @@
-import sublime_plugin
-
-from ..package_creator import PackageCreator
-
-
-class CreatePackageCommand(sublime_plugin.WindowCommand, PackageCreator):
- """
- Command to create a regular .sublime-package file
- """
-
- def run(self):
- self.show_panel()
-
- def on_done(self, picked):
- """
- Quick panel user selection handler - processes the user package
- selection and create the package file
-
- :param picked:
- An integer of the 0-based package name index from the presented
- list. -1 means the user cancelled.
- """
-
- if picked == -1:
- return
- package_name = self.packages[picked]
- package_destination = self.get_package_destination()
-
- if self.manager.create_package(package_name, package_destination):
- self.window.run_command('open_dir', {"dir":
- package_destination, "file": package_name +
- '.sublime-package'})
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/commands/disable_package_command.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/commands/disable_package_command.py
deleted file mode 100644
index d5ebd97..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/commands/disable_package_command.py
+++ /dev/null
@@ -1,48 +0,0 @@
-import sublime
-import sublime_plugin
-
-from ..show_error import show_error
-from ..package_manager import PackageManager
-from ..preferences_filename import preferences_filename
-
-
-class DisablePackageCommand(sublime_plugin.WindowCommand):
- """
- A command that adds a package to Sublime Text's ignored packages list
- """
-
- def run(self):
- manager = PackageManager()
- packages = manager.list_all_packages()
- self.settings = sublime.load_settings(preferences_filename())
- ignored = self.settings.get('ignored_packages')
- if not ignored:
- ignored = []
- self.package_list = list(set(packages) - set(ignored))
- self.package_list.sort()
- if not self.package_list:
- show_error('There are no enabled packages to disable.')
- return
- self.window.show_quick_panel(self.package_list, self.on_done)
-
- def on_done(self, picked):
- """
- Quick panel user selection handler - disables the selected package
-
- :param picked:
- An integer of the 0-based package name index from the presented
- list. -1 means the user cancelled.
- """
-
- if picked == -1:
- return
- package = self.package_list[picked]
- ignored = self.settings.get('ignored_packages')
- if not ignored:
- ignored = []
- ignored.append(package)
- self.settings.set('ignored_packages', ignored)
- sublime.save_settings(preferences_filename())
- sublime.status_message(('Package %s successfully added to list of ' +
- 'disabled packages - restarting Sublime Text may be required') %
- package)
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/commands/discover_packages_command.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/commands/discover_packages_command.py
deleted file mode 100644
index 78d9812..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/commands/discover_packages_command.py
+++ /dev/null
@@ -1,11 +0,0 @@
-import sublime_plugin
-
-
-class DiscoverPackagesCommand(sublime_plugin.WindowCommand):
- """
- A command that opens the community package list webpage
- """
-
- def run(self):
- self.window.run_command('open_url',
- {'url': 'http://wbond.net/sublime_packages/community'})
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/commands/enable_package_command.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/commands/enable_package_command.py
deleted file mode 100644
index 2e5e6d1..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/commands/enable_package_command.py
+++ /dev/null
@@ -1,40 +0,0 @@
-import sublime
-import sublime_plugin
-
-from ..show_error import show_error
-from ..preferences_filename import preferences_filename
-
-
-class EnablePackageCommand(sublime_plugin.WindowCommand):
- """
- A command that removes a package from Sublime Text's ignored packages list
- """
-
- def run(self):
- self.settings = sublime.load_settings(preferences_filename())
- self.disabled_packages = self.settings.get('ignored_packages')
- self.disabled_packages.sort()
- if not self.disabled_packages:
- show_error('There are no disabled packages to enable.')
- return
- self.window.show_quick_panel(self.disabled_packages, self.on_done)
-
- def on_done(self, picked):
- """
- Quick panel user selection handler - enables the selected package
-
- :param picked:
- An integer of the 0-based package name index from the presented
- list. -1 means the user cancelled.
- """
-
- if picked == -1:
- return
- package = self.disabled_packages[picked]
- ignored = self.settings.get('ignored_packages')
- self.settings.set('ignored_packages',
- list(set(ignored) - set([package])))
- sublime.save_settings(preferences_filename())
- sublime.status_message(('Package %s successfully removed from list ' +
- 'of disabled packages - restarting Sublime Text may be required') %
- package)
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/commands/existing_packages_command.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/commands/existing_packages_command.py
deleted file mode 100644
index 78615d6..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/commands/existing_packages_command.py
+++ /dev/null
@@ -1,69 +0,0 @@
-import os
-import re
-
-import sublime
-
-from ..package_manager import PackageManager
-
-
-class ExistingPackagesCommand():
- """
- Allows listing installed packages and their current version
- """
-
- def __init__(self):
- self.manager = PackageManager()
-
- def make_package_list(self, action=''):
- """
- Returns a list of installed packages suitable for displaying in the
- quick panel.
-
- :param action:
- An action to display at the beginning of the third element of the
- list returned for each package
-
- :return:
- A list of lists, each containing three strings:
- 0 - package name
- 1 - package description
- 2 - [action] installed version; package url
- """
-
- packages = self.manager.list_packages()
-
- if action:
- action += ' '
-
- package_list = []
- for package in sorted(packages, key=lambda s: s.lower()):
- package_entry = [package]
- metadata = self.manager.get_metadata(package)
- package_dir = os.path.join(sublime.packages_path(), package)
-
- description = metadata.get('description')
- if not description:
- description = 'No description provided'
- package_entry.append(description)
-
- version = metadata.get('version')
- if not version and os.path.exists(os.path.join(package_dir,
- '.git')):
- installed_version = 'git repository'
- elif not version and os.path.exists(os.path.join(package_dir,
- '.hg')):
- installed_version = 'hg repository'
- else:
- installed_version = 'v' + version if version else \
- 'unknown version'
-
- url = metadata.get('url')
- if url:
- url = '; ' + re.sub('^https?://', '', url)
- else:
- url = ''
-
- package_entry.append(action + installed_version + url)
- package_list.append(package_entry)
-
- return package_list
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/commands/grab_certs_command.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/commands/grab_certs_command.py
deleted file mode 100644
index 4eb77e0..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/commands/grab_certs_command.py
+++ /dev/null
@@ -1,109 +0,0 @@
-import os
-import re
-import socket
-import threading
-
-try:
- # Python 3
- from urllib.parse import urlparse
-except (ImportError):
- # Python 2
- from urlparse import urlparse
-
-import sublime
-import sublime_plugin
-
-from ..show_error import show_error
-from ..open_compat import open_compat
-from ..ca_certs import find_root_ca_cert
-from ..thread_progress import ThreadProgress
-from ..package_manager import PackageManager
-
-
-class GrabCertsCommand(sublime_plugin.WindowCommand):
- """
- A command that extracts the CA certs for a domain name, allowing a user to
- fetch packages from sources other than those used by the default channel
- """
-
- def run(self):
- panel = self.window.show_input_panel('Domain Name', 'example.com', self.on_done,
- None, None)
- panel.sel().add(sublime.Region(0, panel.size()))
-
- def on_done(self, domain):
- """
- Input panel handler - grabs the CA certs for the domain name presented
-
- :param domain:
- A string of the domain name
- """
-
- domain = domain.strip()
-
- # Make sure the user enters something
- if domain == '':
- show_error(u"Please enter a domain name, or press cancel")
- self.run()
- return
-
- # If the user inputs a URL, extract the domain name
- if domain.find('/') != -1:
- parts = urlparse(domain)
- if parts.hostname:
- domain = parts.hostname
-
- # Allow _ even though it technically isn't valid, this is really
- # just to try and prevent people from typing in gibberish
- if re.match('^(?:[a-zA-Z0-9]+(?:[\-_]*[a-zA-Z0-9]+)*\.)+[a-zA-Z]{2,6}$', domain, re.I) == None:
- show_error(u"Unable to get the CA certs for \"%s\" since it does not appear to be a validly formed domain name" % domain)
- return
-
- # Make sure it is a real domain
- try:
- socket.gethostbyname(domain)
- except (socket.gaierror) as e:
- error = unicode_from_os(e)
- show_error(u"Error trying to lookup \"%s\":\n\n%s" % (domain, error))
- return
-
- manager = PackageManager()
-
- thread = GrabCertsThread(manager.settings, domain)
- thread.start()
- ThreadProgress(thread, 'Grabbing CA certs for %s' % domain,
- 'CA certs for %s added to settings' % domain)
-
-
-class GrabCertsThread(threading.Thread):
- """
- A thread to run openssl so that the Sublime Text UI does not become frozen
- """
-
- def __init__(self, settings, domain):
- self.settings = settings
- self.domain = domain
- threading.Thread.__init__(self)
-
- def run(self):
- cert, cert_hash = find_root_ca_cert(self.settings, self.domain)
-
- certs_dir = os.path.join(sublime.packages_path(), 'User',
- 'Package Control.ca-certs')
- if not os.path.exists(certs_dir):
- os.mkdir(certs_dir)
-
- cert_path = os.path.join(certs_dir, self.domain + '-ca.crt')
- with open_compat(cert_path, 'w') as f:
- f.write(cert)
-
- def save_certs():
- settings = sublime.load_settings('Package Control.sublime-settings')
- certs = settings.get('certs', {})
- if not certs:
- certs = {}
- certs[self.domain] = [cert_hash, cert_path]
- settings.set('certs', certs)
- sublime.save_settings('Package Control.sublime-settings')
-
- sublime.set_timeout(save_certs, 10)
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/commands/install_package_command.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/commands/install_package_command.py
deleted file mode 100644
index bbe9031..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/commands/install_package_command.py
+++ /dev/null
@@ -1,50 +0,0 @@
-import threading
-
-import sublime
-import sublime_plugin
-
-from ..show_error import show_error
-from ..package_installer import PackageInstaller
-from ..thread_progress import ThreadProgress
-
-
-class InstallPackageCommand(sublime_plugin.WindowCommand):
- """
- A command that presents the list of available packages and allows the
- user to pick one to install.
- """
-
- def run(self):
- thread = InstallPackageThread(self.window)
- thread.start()
- ThreadProgress(thread, 'Loading repositories', '')
-
-
-class InstallPackageThread(threading.Thread, PackageInstaller):
- """
- A thread to run the action of retrieving available packages in. Uses the
- default PackageInstaller.on_done quick panel handler.
- """
-
- def __init__(self, window):
- """
- :param window:
- An instance of :class:`sublime.Window` that represents the Sublime
- Text window to show the available package list in.
- """
-
- self.window = window
- self.completion_type = 'installed'
- threading.Thread.__init__(self)
- PackageInstaller.__init__(self)
-
- def run(self):
- self.package_list = self.make_package_list(['upgrade', 'downgrade',
- 'reinstall', 'pull', 'none'])
-
- def show_quick_panel():
- if not self.package_list:
- show_error('There are no packages available for installation')
- return
- self.window.show_quick_panel(self.package_list, self.on_done)
- sublime.set_timeout(show_quick_panel, 10)
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/commands/list_packages_command.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/commands/list_packages_command.py
deleted file mode 100644
index 84c57e4..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/commands/list_packages_command.py
+++ /dev/null
@@ -1,63 +0,0 @@
-import threading
-import os
-
-import sublime
-import sublime_plugin
-
-from ..show_error import show_error
-from .existing_packages_command import ExistingPackagesCommand
-
-
-class ListPackagesCommand(sublime_plugin.WindowCommand):
- """
- A command that shows a list of all installed packages in the quick panel
- """
-
- def run(self):
- ListPackagesThread(self.window).start()
-
-
-class ListPackagesThread(threading.Thread, ExistingPackagesCommand):
- """
- A thread to prevent the listing of existing packages from freezing the UI
- """
-
- def __init__(self, window):
- """
- :param window:
- An instance of :class:`sublime.Window` that represents the Sublime
- Text window to show the list of installed packages in.
- """
-
- self.window = window
- threading.Thread.__init__(self)
- ExistingPackagesCommand.__init__(self)
-
- def run(self):
- self.package_list = self.make_package_list()
-
- def show_quick_panel():
- if not self.package_list:
- show_error('There are no packages to list')
- return
- self.window.show_quick_panel(self.package_list, self.on_done)
- sublime.set_timeout(show_quick_panel, 10)
-
- def on_done(self, picked):
- """
- Quick panel user selection handler - opens the homepage for any
- selected package in the user's browser
-
- :param picked:
- An integer of the 0-based package name index from the presented
- list. -1 means the user cancelled.
- """
-
- if picked == -1:
- return
- package_name = self.package_list[picked][0]
-
- def open_dir():
- self.window.run_command('open_dir',
- {"dir": os.path.join(sublime.packages_path(), package_name)})
- sublime.set_timeout(open_dir, 10)
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/commands/package_message_command.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/commands/package_message_command.py
deleted file mode 100644
index 6e083df..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/commands/package_message_command.py
+++ /dev/null
@@ -1,11 +0,0 @@
-import sublime
-import sublime_plugin
-
-
-class PackageMessageCommand(sublime_plugin.TextCommand):
- """
- A command to write a package message to the Package Control messaging buffer
- """
-
- def run(self, edit, string=''):
- self.view.insert(edit, self.view.size(), string)
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/commands/remove_package_command.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/commands/remove_package_command.py
deleted file mode 100644
index df0350c..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/commands/remove_package_command.py
+++ /dev/null
@@ -1,88 +0,0 @@
-import threading
-
-import sublime
-import sublime_plugin
-
-from ..show_error import show_error
-from .existing_packages_command import ExistingPackagesCommand
-from ..preferences_filename import preferences_filename
-from ..thread_progress import ThreadProgress
-
-
-class RemovePackageCommand(sublime_plugin.WindowCommand,
- ExistingPackagesCommand):
- """
- A command that presents a list of installed packages, allowing the user to
- select one to remove
- """
-
- def __init__(self, window):
- """
- :param window:
- An instance of :class:`sublime.Window` that represents the Sublime
- Text window to show the list of installed packages in.
- """
-
- self.window = window
- ExistingPackagesCommand.__init__(self)
-
- def run(self):
- self.package_list = self.make_package_list('remove')
- if not self.package_list:
- show_error('There are no packages that can be removed.')
- return
- self.window.show_quick_panel(self.package_list, self.on_done)
-
- def on_done(self, picked):
- """
- Quick panel user selection handler - deletes the selected package
-
- :param picked:
- An integer of the 0-based package name index from the presented
- list. -1 means the user cancelled.
- """
-
- if picked == -1:
- return
- package = self.package_list[picked][0]
-
- settings = sublime.load_settings(preferences_filename())
- ignored = settings.get('ignored_packages')
- if not ignored:
- ignored = []
-
- # Don't disable Package Control so it does not get stuck disabled
- if package != 'Package Control':
- if not package in ignored:
- ignored.append(package)
- settings.set('ignored_packages', ignored)
- sublime.save_settings(preferences_filename())
- ignored.remove(package)
-
- thread = RemovePackageThread(self.manager, package,
- ignored)
- thread.start()
- ThreadProgress(thread, 'Removing package %s' % package,
- 'Package %s successfully removed' % package)
-
-
-class RemovePackageThread(threading.Thread):
- """
- A thread to run the remove package operation in so that the Sublime Text
- UI does not become frozen
- """
-
- def __init__(self, manager, package, ignored):
- self.manager = manager
- self.package = package
- self.ignored = ignored
- threading.Thread.__init__(self)
-
- def run(self):
- self.result = self.manager.remove_package(self.package)
-
- def unignore_package():
- settings = sublime.load_settings(preferences_filename())
- settings.set('ignored_packages', self.ignored)
- sublime.save_settings(preferences_filename())
- sublime.set_timeout(unignore_package, 10)
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/commands/upgrade_all_packages_command.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/commands/upgrade_all_packages_command.py
deleted file mode 100644
index a4a730d..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/commands/upgrade_all_packages_command.py
+++ /dev/null
@@ -1,77 +0,0 @@
-import time
-import threading
-
-import sublime
-import sublime_plugin
-
-from ..thread_progress import ThreadProgress
-from ..package_installer import PackageInstaller, PackageInstallerThread
-from ..package_renamer import PackageRenamer
-
-
-class UpgradeAllPackagesCommand(sublime_plugin.WindowCommand):
- """
- A command to automatically upgrade all installed packages that are
- upgradable.
- """
-
- def run(self):
- package_renamer = PackageRenamer()
- package_renamer.load_settings()
-
- thread = UpgradeAllPackagesThread(self.window, package_renamer)
- thread.start()
- ThreadProgress(thread, 'Loading repositories', '')
-
-
-class UpgradeAllPackagesThread(threading.Thread, PackageInstaller):
- """
- A thread to run the action of retrieving upgradable packages in.
- """
-
- def __init__(self, window, package_renamer):
- self.window = window
- self.package_renamer = package_renamer
- self.completion_type = 'upgraded'
- threading.Thread.__init__(self)
- PackageInstaller.__init__(self)
-
- def run(self):
- self.package_renamer.rename_packages(self)
- package_list = self.make_package_list(['install', 'reinstall', 'none'])
-
- disabled_packages = []
-
- def do_upgrades():
- # Pause so packages can be disabled
- time.sleep(0.5)
-
- # We use a function to generate the on-complete lambda because if
- # we don't, the lambda will bind to info at the current scope, and
- # thus use the last value of info from the loop
- def make_on_complete(name):
- return lambda: self.reenable_package(name)
-
- for info in package_list:
- if info[0] in disabled_packages:
- on_complete = make_on_complete(info[0])
- else:
- on_complete = None
- thread = PackageInstallerThread(self.manager, info[0],
- on_complete)
- thread.start()
- ThreadProgress(thread, 'Upgrading package %s' % info[0],
- 'Package %s successfully %s' % (info[0],
- self.completion_type))
-
- # Disabling a package means changing settings, which can only be done
- # in the main thread. We then create a new background thread so that
- # the upgrade process does not block the UI.
- def disable_packages():
- package_names = []
- for info in package_list:
- package_names.append(info[0])
- disabled_packages.extend(self.disable_packages(package_names))
- threading.Thread(target=do_upgrades).start()
-
- sublime.set_timeout(disable_packages, 1)
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/commands/upgrade_package_command.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/commands/upgrade_package_command.py
deleted file mode 100644
index 6c478e6..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/commands/upgrade_package_command.py
+++ /dev/null
@@ -1,81 +0,0 @@
-import threading
-
-import sublime
-import sublime_plugin
-
-from ..show_error import show_error
-from ..thread_progress import ThreadProgress
-from ..package_installer import PackageInstaller, PackageInstallerThread
-from ..package_renamer import PackageRenamer
-
-
-class UpgradePackageCommand(sublime_plugin.WindowCommand):
- """
- A command that presents the list of installed packages that can be upgraded
- """
-
- def run(self):
- package_renamer = PackageRenamer()
- package_renamer.load_settings()
-
- thread = UpgradePackageThread(self.window, package_renamer)
- thread.start()
- ThreadProgress(thread, 'Loading repositories', '')
-
-
-class UpgradePackageThread(threading.Thread, PackageInstaller):
- """
- A thread to run the action of retrieving upgradable packages in.
- """
-
- def __init__(self, window, package_renamer):
- """
- :param window:
- An instance of :class:`sublime.Window` that represents the Sublime
- Text window to show the list of upgradable packages in.
-
- :param package_renamer:
- An instance of :class:`PackageRenamer`
- """
- self.window = window
- self.package_renamer = package_renamer
- self.completion_type = 'upgraded'
- threading.Thread.__init__(self)
- PackageInstaller.__init__(self)
-
- def run(self):
- self.package_renamer.rename_packages(self)
-
- self.package_list = self.make_package_list(['install', 'reinstall',
- 'none'])
-
- def show_quick_panel():
- if not self.package_list:
- show_error('There are no packages ready for upgrade')
- return
- self.window.show_quick_panel(self.package_list, self.on_done)
- sublime.set_timeout(show_quick_panel, 10)
-
- def on_done(self, picked):
- """
- Quick panel user selection handler - disables a package, upgrades it,
- then re-enables the package
-
- :param picked:
- An integer of the 0-based package name index from the presented
- list. -1 means the user cancelled.
- """
-
- if picked == -1:
- return
- name = self.package_list[picked][0]
-
- if name in self.disable_packages(name):
- on_complete = lambda: self.reenable_package(name)
- else:
- on_complete = None
-
- thread = PackageInstallerThread(self.manager, name, on_complete)
- thread.start()
- ThreadProgress(thread, 'Upgrading package %s' % name,
- 'Package %s successfully %s' % (name, self.completion_type))
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/console_write.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/console_write.py
deleted file mode 100644
index 5fb0796..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/console_write.py
+++ /dev/null
@@ -1,20 +0,0 @@
-import sys
-
-
-def console_write(string, prefix=False):
- """
- Writes a value to the Sublime Text console, encoding unicode to utf-8 first
-
- :param string:
- The value to write
-
- :param prefix:
- If the string "Package Control: " should be prefixed to the string
- """
-
- if sys.version_info < (3,):
- if isinstance(string, unicode):
- string = string.encode('UTF-8')
- if prefix:
- sys.stdout.write('Package Control: ')
- print(string)
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/download_manager.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/download_manager.py
deleted file mode 100644
index a4d028d..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/download_manager.py
+++ /dev/null
@@ -1,231 +0,0 @@
-import sys
-import re
-import socket
-from threading import Lock, Timer
-from contextlib import contextmanager
-
-try:
- # Python 3
- from urllib.parse import urlparse
-except (ImportError):
- # Python 2
- from urlparse import urlparse
-
-from . import __version__
-
-from .show_error import show_error
-from .console_write import console_write
-from .cache import set_cache, get_cache
-from .unicode import unicode_from_os
-
-from .downloaders import DOWNLOADERS
-from .downloaders.binary_not_found_error import BinaryNotFoundError
-from .downloaders.rate_limit_exception import RateLimitException
-from .downloaders.no_ca_cert_exception import NoCaCertException
-from .downloaders.downloader_exception import DownloaderException
-from .http_cache import HttpCache
-
-
-# A dict of domains - each points to a list of downloaders
-_managers = {}
-
-# How many managers are currently checked out
-_in_use = 0
-
-# Make sure connection management doesn't run into threading issues
-_lock = Lock()
-
-# A timer used to disconnect all managers after a period of no usage
-_timer = None
-
-
-@contextmanager
-def downloader(url, settings):
- try:
- manager = _grab(url, settings)
- yield manager
-
- finally:
- _release(url, manager)
-
-
-def _grab(url, settings):
- global _managers, _lock, _in_use, _timer
-
- _lock.acquire()
- try:
- if _timer:
- _timer.cancel()
- _timer = None
-
- hostname = urlparse(url).hostname.lower()
- if hostname not in _managers:
- _managers[hostname] = []
-
- if not _managers[hostname]:
- _managers[hostname].append(DownloadManager(settings))
-
- _in_use += 1
-
- return _managers[hostname].pop()
-
- finally:
- _lock.release()
-
-
-def _release(url, manager):
- global _managers, _lock, _in_use, _timer
-
- _lock.acquire()
- try:
- hostname = urlparse(url).hostname.lower()
- _managers[hostname].insert(0, manager)
-
- _in_use -= 1
-
- if _timer:
- _timer.cancel()
- _timer = None
-
- if _in_use == 0:
- _timer = Timer(5.0, close_all_connections)
- _timer.start()
-
- finally:
- _lock.release()
-
-
-def close_all_connections():
- global _managers, _lock, _in_use, _timer
-
- _lock.acquire()
- try:
- if _timer:
- _timer.cancel()
- _timer = None
-
- for domain, managers in _managers.items():
- for manager in managers:
- manager.close()
- _managers = {}
-
- finally:
- _lock.release()
-
-
-class DownloadManager(object):
- def __init__(self, settings):
- # Cache the downloader for re-use
- self.downloader = None
-
- user_agent = settings.get('user_agent')
- if user_agent and user_agent.find('%s') != -1:
- settings['user_agent'] = user_agent % __version__
-
- self.settings = settings
- if settings.get('http_cache'):
- cache_length = settings.get('http_cache_length', 604800)
- self.settings['cache'] = HttpCache(cache_length)
-
- def close(self):
- if self.downloader:
- self.downloader.close()
- self.downloader = None
-
- def fetch(self, url, error_message, prefer_cached=False):
- """
- Downloads a URL and returns the contents
-
- :param url:
- The string URL to download
-
- :param error_message:
- The error message to include if the download fails
-
- :param prefer_cached:
- If cached version of the URL content is preferred over a new request
-
- :raises:
- DownloaderException: if there was an error downloading the URL
-
- :return:
- The string contents of the URL
- """
-
- is_ssl = re.search('^https://', url) != None
-
- # Make sure we have a downloader, and it supports SSL if we need it
- if not self.downloader or (is_ssl and not self.downloader.supports_ssl()):
- for downloader_class in DOWNLOADERS:
- try:
- downloader = downloader_class(self.settings)
- if is_ssl and not downloader.supports_ssl():
- continue
- self.downloader = downloader
- break
- except (BinaryNotFoundError):
- pass
-
- if not self.downloader:
- error_string = u'Unable to download %s due to no ssl module available and no capable program found. Please install curl or wget.' % url
- show_error(error_string)
- raise DownloaderException(error_string)
-
- url = url.replace(' ', '%20')
- hostname = urlparse(url).hostname
- if hostname:
- hostname = hostname.lower()
- timeout = self.settings.get('timeout', 3)
-
- rate_limited_domains = get_cache('rate_limited_domains', [])
- no_ca_cert_domains = get_cache('no_ca_cert_domains', [])
-
- if self.settings.get('debug'):
- try:
- ip = socket.gethostbyname(hostname)
- except (socket.gaierror) as e:
- ip = unicode_from_os(e)
- except (TypeError) as e:
- ip = None
-
- console_write(u"Download Debug", True)
- console_write(u" URL: %s" % url)
- console_write(u" Resolved IP: %s" % ip)
- console_write(u" Timeout: %s" % str(timeout))
-
- if hostname in rate_limited_domains:
- error_string = u"Skipping due to hitting rate limit for %s" % hostname
- if self.settings.get('debug'):
- console_write(u" %s" % error_string)
- raise DownloaderException(error_string)
-
- if hostname in no_ca_cert_domains:
- error_string = u" Skipping since there are no CA certs for %s" % hostname
- if self.settings.get('debug'):
- console_write(u" %s" % error_string)
- raise DownloaderException(error_string)
-
- try:
- return self.downloader.download(url, error_message, timeout, 3, prefer_cached)
-
- except (RateLimitException) as e:
-
- rate_limited_domains.append(hostname)
- set_cache('rate_limited_domains', rate_limited_domains, self.settings.get('cache_length'))
-
- error_string = (u'Hit rate limit of %s for %s, skipping all futher ' +
- u'download requests for this domain') % (e.limit, e.domain)
- console_write(error_string, True)
- raise
-
- except (NoCaCertException) as e:
-
- no_ca_cert_domains.append(hostname)
- set_cache('no_ca_cert_domains', no_ca_cert_domains, self.settings.get('cache_length'))
-
- error_string = (u'No CA certs available for %s, skipping all futher ' +
- u'download requests for this domain. If you are on a trusted ' +
- u'network, you can add the CA certs by running the "Grab ' +
- u'CA Certs" command from the command palette.') % e.domain
- console_write(error_string, True)
- raise
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/downloaders/__init__.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/downloaders/__init__.py
deleted file mode 100644
index fb68aef..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/downloaders/__init__.py
+++ /dev/null
@@ -1,11 +0,0 @@
-import os
-
-if os.name == 'nt':
- from .wininet_downloader import WinINetDownloader
- DOWNLOADERS = [WinINetDownloader]
-
-else:
- from .urllib_downloader import UrlLibDownloader
- from .curl_downloader import CurlDownloader
- from .wget_downloader import WgetDownloader
- DOWNLOADERS = [UrlLibDownloader, CurlDownloader, WgetDownloader]
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/downloaders/background_downloader.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/downloaders/background_downloader.py
deleted file mode 100644
index 250d2de..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/downloaders/background_downloader.py
+++ /dev/null
@@ -1,62 +0,0 @@
-import threading
-
-
-class BackgroundDownloader(threading.Thread):
- """
- Downloads information from one or more URLs in the background.
- Normal usage is to use one BackgroundDownloader per domain name.
-
- :param settings:
- A dict containing at least the following fields:
- `cache_length`,
- `debug`,
- `timeout`,
- `user_agent`,
- `http_proxy`,
- `https_proxy`,
- `proxy_username`,
- `proxy_password`
-
- :param providers:
- An array of providers that can download the URLs
- """
-
- def __init__(self, settings, providers):
- self.settings = settings
- self.urls = []
- self.providers = providers
- self.used_providers = {}
- threading.Thread.__init__(self)
-
- def add_url(self, url):
- """
- Adds a URL to the list to download
-
- :param url:
- The URL to download info about
- """
-
- self.urls.append(url)
-
- def get_provider(self, url):
- """
- Returns the provider for the URL specified
-
- :param url:
- The URL to return the provider for
-
- :return:
- The provider object for the URL
- """
-
- return self.used_providers[url]
-
- def run(self):
- for url in self.urls:
- for provider_class in self.providers:
- if provider_class.match_url(url):
- provider = provider_class(url, self.settings)
- break
-
- provider.prefetch()
- self.used_providers[url] = provider
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/downloaders/binary_not_found_error.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/downloaders/binary_not_found_error.py
deleted file mode 100644
index a7955b9..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/downloaders/binary_not_found_error.py
+++ /dev/null
@@ -1,4 +0,0 @@
-class BinaryNotFoundError(Exception):
- """If a necessary executable is not found in the PATH on the system"""
-
- pass
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/downloaders/caching_downloader.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/downloaders/caching_downloader.py
deleted file mode 100644
index ab3d71f..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/downloaders/caching_downloader.py
+++ /dev/null
@@ -1,185 +0,0 @@
-import sys
-import re
-import json
-import hashlib
-
-from ..console_write import console_write
-
-
-class CachingDownloader(object):
- """
- A base downloader that will use a caching backend to cache HTTP requests
- and make conditional requests.
- """
-
- def add_conditional_headers(self, url, headers):
- """
- Add `If-Modified-Since` and `If-None-Match` headers to a request if a
- cached copy exists
-
- :param headers:
- A dict with the request headers
-
- :return:
- The request headers dict, possibly with new headers added
- """
-
- if not self.settings.get('cache'):
- return headers
-
- info_key = self.generate_key(url, '.info')
- info_json = self.settings['cache'].get(info_key)
-
- if not info_json:
- return headers
-
- # Make sure we have the cached content to use if we get a 304
- key = self.generate_key(url)
- if not self.settings['cache'].has(key):
- return headers
-
- try:
- info = json.loads(info_json.decode('utf-8'))
- except ValueError:
- return headers
-
- etag = info.get('etag')
- if etag:
- headers['If-None-Match'] = etag
-
- last_modified = info.get('last-modified')
- if last_modified:
- headers['If-Modified-Since'] = last_modified
-
- return headers
-
- def cache_result(self, method, url, status, headers, content):
- """
- Processes a request result, either caching the result, or returning
- the cached version of the url.
-
- :param method:
- The HTTP method used for the request
-
- :param url:
- The url of the request
-
- :param status:
- The numeric response status of the request
-
- :param headers:
- A dict of reponse headers, with keys being lowercase
-
- :param content:
- The response content
-
- :return:
- The response content
- """
-
- debug = self.settings.get('debug', False)
-
- if not self.settings.get('cache'):
- if debug:
- console_write(u"Skipping cache since there is no cache object", True)
- return content
-
- if method.lower() != 'get':
- if debug:
- console_write(u"Skipping cache since the HTTP method != GET", True)
- return content
-
- status = int(status)
-
- # Don't do anything unless it was successful or not modified
- if status not in [200, 304]:
- if debug:
- console_write(u"Skipping cache since the HTTP status code not one of: 200, 304", True)
- return content
-
- key = self.generate_key(url)
-
- if status == 304:
- cached_content = self.settings['cache'].get(key)
- if cached_content:
- if debug:
- console_write(u"Using cached content for %s" % url, True)
- return cached_content
-
- # If we got a 304, but did not have the cached content
- # stop here so we don't cache an empty response
- return content
-
- # If we got here, the status is 200
-
- # Respect some basic cache control headers
- cache_control = headers.get('cache-control', '')
- if cache_control:
- fields = re.split(',\s*', cache_control)
- for field in fields:
- if field == 'no-store':
- return content
-
- # Don't ever cache zip/binary files for the sake of hard drive space
- if headers.get('content-type') in ['application/zip', 'application/octet-stream']:
- if debug:
- console_write(u"Skipping cache since the response is a zip file", True)
- return content
-
- etag = headers.get('etag')
- last_modified = headers.get('last-modified')
-
- if not etag and not last_modified:
- return content
-
- struct = {'etag': etag, 'last-modified': last_modified}
- struct_json = json.dumps(struct, indent=4)
-
- info_key = self.generate_key(url, '.info')
- if debug:
- console_write(u"Caching %s in %s" % (url, key), True)
-
- self.settings['cache'].set(info_key, struct_json.encode('utf-8'))
- self.settings['cache'].set(key, content)
-
- return content
-
- def generate_key(self, url, suffix=''):
- """
- Generates a key to store the cache under
-
- :param url:
- The URL being cached
-
- :param suffix:
- A string to append to the key
-
- :return:
- A string key for the URL
- """
-
- if sys.version_info >= (3,) or isinstance(url, unicode):
- url = url.encode('utf-8')
-
- key = hashlib.md5(url).hexdigest()
- return key + suffix
-
- def retrieve_cached(self, url):
- """
- Tries to return the cached content for a URL
-
- :param url:
- The URL to get the cached content for
-
- :return:
- The cached content
- """
-
- key = self.generate_key(url)
- if not self.settings['cache'].has(key):
- return False
-
- if self.settings.get('debug'):
- console_write(u"Using cached content for %s" % url, True)
-
- return self.settings['cache'].get(key)
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/downloaders/cert_provider.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/downloaders/cert_provider.py
deleted file mode 100644
index f8c8c3b..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/downloaders/cert_provider.py
+++ /dev/null
@@ -1,203 +0,0 @@
-import os
-import re
-import json
-
-import sublime
-
-from ..console_write import console_write
-from ..open_compat import open_compat, read_compat
-from ..package_io import read_package_file
-from ..cache import get_cache
-from ..ca_certs import get_system_ca_bundle_path
-from .no_ca_cert_exception import NoCaCertException
-from .downloader_exception import DownloaderException
-
-
-class CertProvider(object):
- """
- A base downloader that provides access to a ca-bundle for validating
- SSL certificates.
- """
-
- def check_certs(self, domain, timeout):
- """
- Ensures that the SSL CA cert for a domain is present on the machine
-
- :param domain:
- The domain to ensure there is a CA cert for
-
- :param timeout:
- The int timeout for downloading the CA cert from the channel
-
- :raises:
- NoCaCertException: when a suitable CA cert could not be found
-
- :return:
- The CA cert bundle path
- """
-
- # Try to use the system CA bundle
- ca_bundle_path = get_system_ca_bundle_path(self.settings)
- if ca_bundle_path:
- return ca_bundle_path
-
- # If the system bundle did not work, fall back to our CA distribution
- # system. Hopefully this will be going away soon.
- if self.settings.get('debug'):
- console_write(u'Unable to find system CA cert bundle, falling back to certs provided by Package Control')
-
- cert_match = False
-
- certs_list = get_cache('*.certs', self.settings.get('certs', {}))
-
- ca_bundle_path = os.path.join(sublime.packages_path(), 'User', 'Package Control.ca-bundle')
- if not os.path.exists(ca_bundle_path) or os.stat(ca_bundle_path).st_size == 0:
- bundle_contents = read_package_file('Package Control', 'Package Control.ca-bundle', True)
- if not bundle_contents:
- raise NoCaCertException(u'Unable to copy distributed Package Control.ca-bundle', domain)
- with open_compat(ca_bundle_path, 'wb') as f:
- f.write(bundle_contents)
-
- cert_info = certs_list.get(domain)
- if cert_info:
- cert_match = self.locate_cert(cert_info[0],
- cert_info[1], domain, timeout)
-
- wildcard_info = certs_list.get('*')
- if wildcard_info:
- cert_match = self.locate_cert(wildcard_info[0],
- wildcard_info[1], domain, timeout) or cert_match
-
- if not cert_match:
- raise NoCaCertException(u'No CA certs available for %s' % domain, domain)
-
- return ca_bundle_path
-
- def locate_cert(self, cert_id, location, domain, timeout):
- """
- Makes sure the SSL cert specified has been added to the CA cert
- bundle that is present on the machine
-
- :param cert_id:
- The identifier for CA cert(s). For those provided by the channel
- system, this will be an md5 of the contents of the cert(s). For
- user-provided certs, this is something they provide.
-
- :param location:
- An http(s) URL, or absolute filesystem path to the CA cert(s)
-
- :param domain:
- The domain to ensure there is a CA cert for
-
- :param timeout:
- The int timeout for downloading the CA cert from the channel
-
- :return:
- If the cert specified (by cert_id) is present on the machine and
- part of the Package Control.ca-bundle file in the User package folder
- """
-
- ca_list_path = os.path.join(sublime.packages_path(), 'User', 'Package Control.ca-list')
- if not os.path.exists(ca_list_path) or os.stat(ca_list_path).st_size == 0:
- list_contents = read_package_file('Package Control', 'Package Control.ca-list')
- if not list_contents:
- raise NoCaCertException(u'Unable to copy distributed Package Control.ca-list', domain)
- with open_compat(ca_list_path, 'w') as f:
- f.write(list_contents)
-
- ca_certs = []
- with open_compat(ca_list_path, 'r') as f:
- ca_certs = json.loads(read_compat(f))
-
- if not cert_id in ca_certs:
- if str(location) != '':
- if re.match('^https?://', location):
- contents = self.download_cert(cert_id, location, domain,
- timeout)
- else:
- contents = self.load_cert(cert_id, location, domain)
- if contents:
- self.save_cert(cert_id, contents)
- return True
- return False
- return True
-
- def download_cert(self, cert_id, url, domain, timeout):
- """
- Downloads CA cert(s) from a URL
-
- :param cert_id:
- The identifier for CA cert(s). For those provided by the channel
- system, this will be an md5 of the contents of the cert(s). For
- user-provided certs, this is something they provide.
-
- :param url:
- An http(s) URL to the CA cert(s)
-
- :param domain:
- The domain to ensure there is a CA cert for
-
- :param timeout:
- The int timeout for downloading the CA cert from the channel
-
- :return:
- The contents of the CA cert(s)
- """
-
- cert_downloader = self.__class__(self.settings)
- if self.settings.get('debug'):
- console_write(u"Downloading CA cert for %s from \"%s\"" % (domain, url), True)
- return cert_downloader.download(url,
- 'Error downloading CA certs for %s.' % domain, timeout, 1)
-
- def load_cert(self, cert_id, path, domain):
- """
- Copies CA cert(s) from a file path
-
- :param cert_id:
- The identifier for CA cert(s). For those provided by the channel
- system, this will be an md5 of the contents of the cert(s). For
- user-provided certs, this is something they provide.
-
- :param path:
- The absolute filesystem path to a file containing the CA cert(s)
-
- :param domain:
- The domain name the cert is for
-
- :return:
- The contents of the CA cert(s)
- """
-
- if os.path.exists(path):
- if self.settings.get('debug'):
- console_write(u"Copying CA cert for %s from \"%s\"" % (domain, path), True)
- with open_compat(path, 'rb') as f:
- return f.read()
- else:
- raise NoCaCertException(u"Unable to find CA cert for %s at \"%s\"" % (domain, path), domain)
-
- def save_cert(self, cert_id, contents):
- """
- Saves CA cert(s) to the Package Control.ca-bundle
-
- :param cert_id:
- The identifier for CA cert(s). For those provided by the channel
- system, this will be an md5 of the contents of the cert(s). For
- user-provided certs, this is something they provide.
-
- :param contents:
- The contents of the CA cert(s)
- """
-
-
- ca_bundle_path = os.path.join(sublime.packages_path(), 'User', 'Package Control.ca-bundle')
- with open_compat(ca_bundle_path, 'ab') as f:
- f.write(b"\n" + contents)
-
- ca_list_path = os.path.join(sublime.packages_path(), 'User', 'Package Control.ca-list')
- with open_compat(ca_list_path, 'r') as f:
- ca_certs = json.loads(read_compat(f))
- ca_certs.append(cert_id)
- with open_compat(ca_list_path, 'w') as f:
- f.write(json.dumps(ca_certs, indent=4))
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/downloaders/cli_downloader.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/downloaders/cli_downloader.py
deleted file mode 100644
index 76c42dd..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/downloaders/cli_downloader.py
+++ /dev/null
@@ -1,81 +0,0 @@
-import os
-import subprocess
-
-from ..console_write import console_write
-from ..cmd import create_cmd
-from .non_clean_exit_error import NonCleanExitError
-from .binary_not_found_error import BinaryNotFoundError
-
-
-class CliDownloader(object):
- """
- Base for downloaders that use a command line program
-
- :param settings:
- A dict of the various Package Control settings. The Sublime Text
- Settings API is not used because this code is run in a thread.
- """
-
- def __init__(self, settings):
- self.settings = settings
-
- def clean_tmp_file(self):
- if os.path.exists(self.tmp_file):
- os.remove(self.tmp_file)
-
- def find_binary(self, name):
- """
- Finds the given executable name in the system PATH
-
- :param name:
- The exact name of the executable to find
-
- :return:
- The absolute path to the executable
-
- :raises:
- BinaryNotFoundError when the executable can not be found
- """
-
- dirs = os.environ['PATH'].split(os.pathsep)
- if os.name != 'nt':
- # This is mostly for OS X, which seems to launch ST with a
- # minimal set of environmental variables
- dirs.append('/usr/local/bin')
-
- for dir_ in dirs:
- path = os.path.join(dir_, name)
- if os.path.exists(path):
- return path
-
- raise BinaryNotFoundError('The binary %s could not be located' % name)
-
- def execute(self, args):
- """
- Runs the executable and args and returns the result
-
- :param args:
- A list of the executable path and all arguments to be passed to it
-
- :return:
- The text output of the executable
-
- :raises:
- NonCleanExitError when the executable exits with an error
- """
-
- if self.settings.get('debug'):
- console_write(u"Trying to execute command %s" % create_cmd(args), True)
-
- proc = subprocess.Popen(args, stdin=subprocess.PIPE,
- stdout=subprocess.PIPE, stderr=subprocess.PIPE)
-
- output = proc.stdout.read()
- self.stderr = proc.stderr.read()
- returncode = proc.wait()
- if returncode != 0:
- error = NonCleanExitError(returncode)
- error.stderr = self.stderr
- error.stdout = output
- raise error
- return output
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/downloaders/curl_downloader.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/downloaders/curl_downloader.py
deleted file mode 100644
index b09d448..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/downloaders/curl_downloader.py
+++ /dev/null
@@ -1,267 +0,0 @@
-import tempfile
-import re
-import os
-
-from ..console_write import console_write
-from ..open_compat import open_compat, read_compat
-from .cli_downloader import CliDownloader
-from .non_clean_exit_error import NonCleanExitError
-from .rate_limit_exception import RateLimitException
-from .downloader_exception import DownloaderException
-from .cert_provider import CertProvider
-from .limiting_downloader import LimitingDownloader
-from .caching_downloader import CachingDownloader
-
-
-class CurlDownloader(CliDownloader, CertProvider, LimitingDownloader, CachingDownloader):
- """
- A downloader that uses the command line program curl
-
- :param settings:
- A dict of the various Package Control settings. The Sublime Text
- Settings API is not used because this code is run in a thread.
-
- :raises:
- BinaryNotFoundError: when curl can not be found
- """
-
- def __init__(self, settings):
- self.settings = settings
- self.curl = self.find_binary('curl')
-
- def close(self):
- """
- No-op for compatibility with UrllibDownloader and WinINetDownloader
- """
-
- pass
-
- def download(self, url, error_message, timeout, tries, prefer_cached=False):
- """
- Downloads a URL and returns the contents
-
- :param url:
- The URL to download
-
- :param error_message:
- A string to include in the console error that is printed
- when an error occurs
-
- :param timeout:
- The int number of seconds to set the timeout to
-
- :param tries:
- The int number of times to try and download the URL in the case of
- a timeout or HTTP 503 error
-
- :param prefer_cached:
- If a cached version should be returned instead of trying a new request
-
- :raises:
- NoCaCertException: when no CA certs can be found for the url
- RateLimitException: when a rate limit is hit
- DownloaderException: when any other download error occurs
-
- :return:
- The string contents of the URL
- """
-
- if prefer_cached:
- cached = self.retrieve_cached(url)
- if cached:
- return cached
-
- self.tmp_file = tempfile.NamedTemporaryFile().name
- command = [self.curl, '--user-agent', self.settings.get('user_agent'),
- '--connect-timeout', str(int(timeout)), '-sSL',
- # Don't be alarmed if the response from the server does not select
- # one of these since the server runs a relatively new version of
- # OpenSSL which supports compression on the SSL layer, and Apache
- # will use that instead of HTTP-level encoding.
- '--compressed',
- # We have to capture the headers to check for rate limit info
- '--dump-header', self.tmp_file]
-
- request_headers = self.add_conditional_headers(url, {})
-
- for name, value in request_headers.items():
- command.extend(['--header', "%s: %s" % (name, value)])
-
- secure_url_match = re.match('^https://([^/]+)', url)
- if secure_url_match != None:
- secure_domain = secure_url_match.group(1)
- bundle_path = self.check_certs(secure_domain, timeout)
- command.extend(['--cacert', bundle_path])
-
- debug = self.settings.get('debug')
- if debug:
- command.append('-v')
-
- http_proxy = self.settings.get('http_proxy')
- https_proxy = self.settings.get('https_proxy')
- proxy_username = self.settings.get('proxy_username')
- proxy_password = self.settings.get('proxy_password')
-
- if debug:
- console_write(u"Curl Debug Proxy", True)
- console_write(u" http_proxy: %s" % http_proxy)
- console_write(u" https_proxy: %s" % https_proxy)
- console_write(u" proxy_username: %s" % proxy_username)
- console_write(u" proxy_password: %s" % proxy_password)
-
- if http_proxy or https_proxy:
- command.append('--proxy-anyauth')
-
- if proxy_username or proxy_password:
- command.extend(['-U', u"%s:%s" % (proxy_username, proxy_password)])
-
- if http_proxy:
- os.putenv('http_proxy', http_proxy)
- if https_proxy:
- os.putenv('HTTPS_PROXY', https_proxy)
-
- command.append(url)
-
- error_string = None
- while tries > 0:
- tries -= 1
- try:
- output = self.execute(command)
-
- with open_compat(self.tmp_file, 'r') as f:
- headers_str = read_compat(f)
- self.clean_tmp_file()
-
- message = 'OK'
- status = 200
- headers = {}
- for header in headers_str.splitlines():
- if header[0:5] == 'HTTP/':
- message = re.sub('^HTTP/\d\.\d\s+\d+\s*', '', header)
- status = int(re.sub('^HTTP/\d\.\d\s+(\d+)(\s+.*)?$', '\\1', header))
- continue
- if header.strip() == '':
- continue
- name, value = header.split(':', 1)
- headers[name.lower()] = value.strip()
-
- if debug:
- self.print_debug(self.stderr.decode('utf-8'))
-
- self.handle_rate_limit(headers, url)
-
- if status not in [200, 304]:
- e = NonCleanExitError(22)
- e.stderr = "%s %s" % (status, message)
- raise e
-
- output = self.cache_result('get', url, status, headers, output)
-
- return output
-
- except (NonCleanExitError) as e:
- # Stderr is used for both the error message and the debug info
- # so we need to process it to extra the debug info
- if self.settings.get('debug'):
- if hasattr(e.stderr, 'decode'):
- e.stderr = e.stderr.decode('utf-8')
- e.stderr = self.print_debug(e.stderr)
-
- self.clean_tmp_file()
-
- if e.returncode == 22:
- code = re.sub('^.*?(\d+)([\w\s]+)?$', '\\1', e.stderr)
- if code == '503' and tries != 0:
- # GitHub and BitBucket seem to rate limit via 503
- error_string = u'Downloading %s was rate limited' % url
- if tries:
- error_string += ', trying again'
- if debug:
- console_write(error_string, True)
- continue
-
- download_error = u'HTTP error ' + code
-
- elif e.returncode == 6:
- download_error = u'URL error host not found'
-
- elif e.returncode == 28:
- # GitHub and BitBucket seem to time out a lot
- error_string = u'Downloading %s timed out' % url
- if tries:
- error_string += ', trying again'
- if debug:
- console_write(error_string, True)
- continue
-
- else:
- download_error = e.stderr.rstrip()
-
- error_string = u'%s %s downloading %s.' % (error_message, download_error, url)
-
- break
-
- raise DownloaderException(error_string)
-
- def supports_ssl(self):
- """
- Indicates if the object can handle HTTPS requests
-
- :return:
- If the object supports HTTPS requests
- """
-
- return True
-
- def print_debug(self, string):
- """
- Takes debug output from curl and groups and prints it
-
- :param string:
- The complete debug output from curl
-
- :return:
- A string containing any stderr output
- """
-
- section = 'General'
- last_section = None
-
- output = ''
-
- for line in string.splitlines():
- # Placeholder for body of request
- if line and line[0:2] == '{ ':
- continue
- if line and line[0:18] == '} [data not shown]':
- continue
-
- if len(line) > 1:
- subtract = 0
- if line[0:2] == '* ':
- section = 'General'
- subtract = 2
- elif line[0:2] == '> ':
- section = 'Write'
- subtract = 2
- elif line[0:2] == '< ':
- section = 'Read'
- subtract = 2
- line = line[subtract:]
-
- # If the line does not start with "* ", "< ", "> " or " "
- # then it is a real stderr message
- if subtract == 0 and line[0:2] != ' ':
- output += line.rstrip() + ' '
- continue
-
- if line.strip() == '':
- continue
-
- if section != last_section:
- console_write(u"Curl HTTP Debug %s" % section, True)
-
- console_write(u' ' + line)
- last_section = section
-
- return output.rstrip()
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/downloaders/decoding_downloader.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/downloaders/decoding_downloader.py
deleted file mode 100644
index bc1acf3..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/downloaders/decoding_downloader.py
+++ /dev/null
@@ -1,24 +0,0 @@
-import gzip
-import zlib
-
-try:
- # Python 3
- from io import BytesIO as StringIO
-except (ImportError):
- # Python 2
- from StringIO import StringIO
-
-
-class DecodingDownloader(object):
- """
- A base for downloaders that provides the ability to decode gzipped
- or deflated content.
- """
-
- def decode_response(self, encoding, response):
- if encoding == 'gzip':
- return gzip.GzipFile(fileobj=StringIO(response)).read()
- elif encoding == 'deflate':
- decompresser = zlib.decompressobj(-zlib.MAX_WBITS)
- return decompresser.decompress(response) + decompresser.flush()
- return response
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/downloaders/downloader_exception.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/downloaders/downloader_exception.py
deleted file mode 100644
index 7519d8f..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/downloaders/downloader_exception.py
+++ /dev/null
@@ -1,5 +0,0 @@
-class DownloaderException(Exception):
- """If a downloader could not download a URL"""
-
- def __str__(self):
- return self.args[0]
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/downloaders/http_error.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/downloaders/http_error.py
deleted file mode 100644
index 996e46d..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/downloaders/http_error.py
+++ /dev/null
@@ -1,9 +0,0 @@
-class HttpError(Exception):
- """If a downloader was able to download a URL, but the result was not a 200 or 304"""
-
- def __init__(self, message, code):
- self.code = code
- super(HttpError, self).__init__(message)
-
- def __str__(self):
- return self.args[0]
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/downloaders/limiting_downloader.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/downloaders/limiting_downloader.py
deleted file mode 100644
index 10d2f1f..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/downloaders/limiting_downloader.py
+++ /dev/null
@@ -1,36 +0,0 @@
-try:
- # Python 3
- from urllib.parse import urlparse
-except (ImportError):
- # Python 2
- from urlparse import urlparse
-
-from .rate_limit_exception import RateLimitException
-
-
-class LimitingDownloader(object):
- """
- A base for downloaders that checks for rate limiting headers.
- """
-
- def handle_rate_limit(self, headers, url):
- """
- Checks the headers of a response object to make sure we are obeying the
- rate limit
-
- :param headers:
- The dict-like object that contains lower-cased headers
-
- :param url:
- The URL that was requested
-
- :raises:
- RateLimitException when the rate limit has been hit
- """
-
- limit_remaining = headers.get('x-ratelimit-remaining', '1')
- limit = headers.get('x-ratelimit-limit', '1')
-
- if str(limit_remaining) == '0':
- hostname = urlparse(url).hostname
- raise RateLimitException(hostname, limit)
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/downloaders/no_ca_cert_exception.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/downloaders/no_ca_cert_exception.py
deleted file mode 100644
index 8452bd9..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/downloaders/no_ca_cert_exception.py
+++ /dev/null
@@ -1,11 +0,0 @@
-from .downloader_exception import DownloaderException
-
-
-class NoCaCertException(DownloaderException):
- """
- An exception for when there is no CA cert for a domain name
- """
-
- def __init__(self, message, domain):
- self.domain = domain
- super(NoCaCertException, self).__init__(message)
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/downloaders/non_clean_exit_error.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/downloaders/non_clean_exit_error.py
deleted file mode 100644
index a932363..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/downloaders/non_clean_exit_error.py
+++ /dev/null
@@ -1,13 +0,0 @@
-class NonCleanExitError(Exception):
- """
- When an subprocess does not exit cleanly
-
- :param returncode:
- The command line integer return code of the subprocess
- """
-
- def __init__(self, returncode):
- self.returncode = returncode
-
- def __str__(self):
- return repr(self.returncode)
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/downloaders/non_http_error.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/downloaders/non_http_error.py
deleted file mode 100644
index 8a45595..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/downloaders/non_http_error.py
+++ /dev/null
@@ -1,5 +0,0 @@
-class NonHttpError(Exception):
- """If a downloader had a non-clean exit, but it was not due to an HTTP error"""
-
- def __str__(self):
- return self.args[0]
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/downloaders/rate_limit_exception.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/downloaders/rate_limit_exception.py
deleted file mode 100644
index 18d2b9e..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/downloaders/rate_limit_exception.py
+++ /dev/null
@@ -1,13 +0,0 @@
-from .downloader_exception import DownloaderException
-
-
-class RateLimitException(DownloaderException):
- """
- An exception for when the rate limit of an API has been exceeded.
- """
-
- def __init__(self, domain, limit):
- self.domain = domain
- self.limit = limit
- message = u'Rate limit of %s exceeded for %s' % (limit, domain)
- super(RateLimitException, self).__init__(message)
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/downloaders/urllib_downloader.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/downloaders/urllib_downloader.py
deleted file mode 100644
index aa04d31..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/downloaders/urllib_downloader.py
+++ /dev/null
@@ -1,291 +0,0 @@
-import re
-import os
-import sys
-
-from .. import http
-
-try:
- # Python 3
- from http.client import HTTPException, BadStatusLine
- from urllib.request import ProxyHandler, HTTPPasswordMgrWithDefaultRealm, ProxyBasicAuthHandler, ProxyDigestAuthHandler, build_opener, Request
- from urllib.error import HTTPError, URLError
- import urllib.request as urllib_compat
-except (ImportError):
- # Python 2
- from httplib import HTTPException, BadStatusLine
- from urllib2 import ProxyHandler, HTTPPasswordMgrWithDefaultRealm, ProxyBasicAuthHandler, ProxyDigestAuthHandler, build_opener, Request
- from urllib2 import HTTPError, URLError
- import urllib2 as urllib_compat
-
-try:
- # Python 3.3
- import ConnectionError
-except (ImportError):
- # Python 2.6-3.2
- from socket import error as ConnectionError
-
-from ..console_write import console_write
-from ..unicode import unicode_from_os
-from ..http.validating_https_handler import ValidatingHTTPSHandler
-from ..http.debuggable_http_handler import DebuggableHTTPHandler
-from .rate_limit_exception import RateLimitException
-from .downloader_exception import DownloaderException
-from .cert_provider import CertProvider
-from .decoding_downloader import DecodingDownloader
-from .limiting_downloader import LimitingDownloader
-from .caching_downloader import CachingDownloader
-
-
-class UrlLibDownloader(CertProvider, DecodingDownloader, LimitingDownloader, CachingDownloader):
- """
- A downloader that uses the Python urllib module
-
- :param settings:
- A dict of the various Package Control settings. The Sublime Text
- Settings API is not used because this code is run in a thread.
- """
-
- def __init__(self, settings):
- self.opener = None
- self.settings = settings
-
- def close(self):
- """
- Closes any persistent/open connections
- """
-
- if not self.opener:
- return
- handler = self.get_handler()
- if handler:
- handler.close()
- self.opener = None
-
- def download(self, url, error_message, timeout, tries, prefer_cached=False):
- """
- Downloads a URL and returns the contents
-
- Uses the proxy settings from the Package Control.sublime-settings file,
- however there seem to be a decent number of proxies that this code
- does not work with. Patches welcome!
-
- :param url:
- The URL to download
-
- :param error_message:
- A string to include in the console error that is printed
- when an error occurs
-
- :param timeout:
- The int number of seconds to set the timeout to
-
- :param tries:
- The int number of times to try and download the URL in the case of
- a timeout or HTTP 503 error
-
- :param prefer_cached:
- If a cached version should be returned instead of trying a new request
-
- :raises:
- NoCaCertException: when no CA certs can be found for the url
- RateLimitException: when a rate limit is hit
- DownloaderException: when any other download error occurs
-
- :return:
- The string contents of the URL
- """
-
- if prefer_cached:
- cached = self.retrieve_cached(url)
- if cached:
- return cached
-
- self.setup_opener(url, timeout)
-
- debug = self.settings.get('debug')
- error_string = None
- while tries > 0:
- tries -= 1
- try:
- request_headers = {
- "User-Agent": self.settings.get('user_agent'),
- # Don't be alarmed if the response from the server does not
- # select one of these since the server runs a relatively new
- # version of OpenSSL which supports compression on the SSL
- # layer, and Apache will use that instead of HTTP-level
- # encoding.
- "Accept-Encoding": "gzip,deflate"
- }
- request_headers = self.add_conditional_headers(url, request_headers)
- request = Request(url, headers=request_headers)
- http_file = self.opener.open(request, timeout=timeout)
- self.handle_rate_limit(http_file.headers, url)
-
- result = http_file.read()
- # Make sure the response is closed so we can re-use the connection
- http_file.close()
-
- encoding = http_file.headers.get('content-encoding')
- result = self.decode_response(encoding, result)
-
- return self.cache_result('get', url, http_file.getcode(),
- http_file.headers, result)
-
- except (HTTPException) as e:
- # Since we use keep-alives, it is possible the other end closed
- # the connection, and we may just need to re-open
- if isinstance(e, BadStatusLine):
- handler = self.get_handler()
- if handler and handler.use_count > 1:
- self.close()
- self.setup_opener(url, timeout)
- tries += 1
- continue
-
- error_string = u'%s HTTP exception %s (%s) downloading %s.' % (
- error_message, e.__class__.__name__, unicode_from_os(e), url)
-
- except (HTTPError) as e:
- # Make sure the response is closed so we can re-use the connection
- e.read()
- e.close()
-
- # Make sure we obey Github's rate limiting headers
- self.handle_rate_limit(e.headers, url)
-
- # Handle cached responses
- if unicode_from_os(e.code) == '304':
- return self.cache_result('get', url, int(e.code), e.headers, b'')
-
- # Bitbucket and Github return 503 a decent amount
- if unicode_from_os(e.code) == '503' and tries != 0:
- error_string = u'Downloading %s was rate limited' % url
- if tries:
- error_string += ', trying again'
- if debug:
- console_write(error_string, True)
- continue
-
- error_string = u'%s HTTP error %s downloading %s.' % (
- error_message, unicode_from_os(e.code), url)
-
- except (URLError) as e:
-
- # Bitbucket and Github timeout a decent amount
- if unicode_from_os(e.reason) == 'The read operation timed out' \
- or unicode_from_os(e.reason) == 'timed out':
- error_string = u'Downloading %s timed out' % url
- if tries:
- error_string += ', trying again'
- if debug:
- console_write(error_string, True)
- continue
-
- error_string = u'%s URL error %s downloading %s.' % (
- error_message, unicode_from_os(e.reason), url)
-
- except (ConnectionError):
- # Handle broken pipes/reset connections by creating a new opener, and
- # thus getting new handlers and a new connection
- error_string = u'Connection went away while trying to download %s, trying again' % url
- if debug:
- console_write(error_string, True)
-
- self.opener = None
- self.setup_opener(url, timeout)
- tries += 1
-
- continue
-
- break
-
- raise DownloaderException(error_string)
-
- def get_handler(self):
- """
- Get the HTTPHandler object for the current connection
- """
-
- if not self.opener:
- return None
-
- for handler in self.opener.handlers:
- if isinstance(handler, ValidatingHTTPSHandler) or isinstance(handler, DebuggableHTTPHandler):
- return handler
-
- def setup_opener(self, url, timeout):
- """
- Sets up a urllib OpenerDirector to be used for requests. There is a
- fair amount of custom urllib code in Package Control, and part of it
- is to handle proxies and keep-alives. Creating an opener the way
- below is because the handlers have been customized to send the
- "Connection: Keep-Alive" header and hold onto connections so they
- can be re-used.
-
- :param url:
- The URL to download
-
- :param timeout:
- The int number of seconds to set the timeout to
- """
-
- if not self.opener:
- http_proxy = self.settings.get('http_proxy')
- https_proxy = self.settings.get('https_proxy')
- if http_proxy or https_proxy:
- proxies = {}
- if http_proxy:
- proxies['http'] = http_proxy
- if https_proxy:
- proxies['https'] = https_proxy
- proxy_handler = ProxyHandler(proxies)
- else:
- proxy_handler = ProxyHandler()
-
- password_manager = HTTPPasswordMgrWithDefaultRealm()
- proxy_username = self.settings.get('proxy_username')
- proxy_password = self.settings.get('proxy_password')
- if proxy_username and proxy_password:
- if http_proxy:
- password_manager.add_password(None, http_proxy, proxy_username,
- proxy_password)
- if https_proxy:
- password_manager.add_password(None, https_proxy, proxy_username,
- proxy_password)
-
- handlers = [proxy_handler]
-
- basic_auth_handler = ProxyBasicAuthHandler(password_manager)
- digest_auth_handler = ProxyDigestAuthHandler(password_manager)
- handlers.extend([digest_auth_handler, basic_auth_handler])
-
- debug = self.settings.get('debug')
-
- if debug:
- console_write(u"Urllib Debug Proxy", True)
- console_write(u" http_proxy: %s" % http_proxy)
- console_write(u" https_proxy: %s" % https_proxy)
- console_write(u" proxy_username: %s" % proxy_username)
- console_write(u" proxy_password: %s" % proxy_password)
-
- secure_url_match = re.match('^https://([^/]+)', url)
- if secure_url_match != None:
- secure_domain = secure_url_match.group(1)
- bundle_path = self.check_certs(secure_domain, timeout)
- bundle_path = bundle_path.encode(sys.getfilesystemencoding())
- handlers.append(ValidatingHTTPSHandler(ca_certs=bundle_path,
- debug=debug, passwd=password_manager,
- user_agent=self.settings.get('user_agent')))
- else:
- handlers.append(DebuggableHTTPHandler(debug=debug,
- passwd=password_manager))
- self.opener = build_opener(*handlers)
-
- def supports_ssl(self):
- """
- Indicates if the object can handle HTTPS requests
-
- :return:
- If the object supports HTTPS requests
- """
- return 'ssl' in sys.modules and hasattr(urllib_compat, 'HTTPSHandler')
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/downloaders/wget_downloader.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/downloaders/wget_downloader.py
deleted file mode 100644
index fb83d1b..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/downloaders/wget_downloader.py
+++ /dev/null
@@ -1,347 +0,0 @@
-import tempfile
-import re
-import os
-
-from ..console_write import console_write
-from ..unicode import unicode_from_os
-from ..open_compat import open_compat, read_compat
-from .cli_downloader import CliDownloader
-from .non_http_error import NonHttpError
-from .non_clean_exit_error import NonCleanExitError
-from .rate_limit_exception import RateLimitException
-from .downloader_exception import DownloaderException
-from .cert_provider import CertProvider
-from .decoding_downloader import DecodingDownloader
-from .limiting_downloader import LimitingDownloader
-from .caching_downloader import CachingDownloader
-
-
-class WgetDownloader(CliDownloader, CertProvider, DecodingDownloader, LimitingDownloader, CachingDownloader):
- """
- A downloader that uses the command line program wget
-
- :param settings:
- A dict of the various Package Control settings. The Sublime Text
- Settings API is not used because this code is run in a thread.
-
- :raises:
- BinaryNotFoundError: when wget can not be found
- """
-
- def __init__(self, settings):
- self.settings = settings
- self.debug = settings.get('debug')
- self.wget = self.find_binary('wget')
-
- def close(self):
- """
- No-op for compatibility with UrllibDownloader and WinINetDownloader
- """
-
- pass
-
- def download(self, url, error_message, timeout, tries, prefer_cached=False):
- """
- Downloads a URL and returns the contents
-
- :param url:
- The URL to download
-
- :param error_message:
- A string to include in the console error that is printed
- when an error occurs
-
- :param timeout:
- The int number of seconds to set the timeout to
-
- :param tries:
- The int number of times to try and download the URL in the case of
- a timeout or HTTP 503 error
-
- :param prefer_cached:
- If a cached version should be returned instead of trying a new request
-
- :raises:
- NoCaCertException: when no CA certs can be found for the url
- RateLimitException: when a rate limit is hit
- DownloaderException: when any other download error occurs
-
- :return:
- The string contents of the URL
- """
-
- if prefer_cached:
- cached = self.retrieve_cached(url)
- if cached:
- return cached
-
- self.tmp_file = tempfile.NamedTemporaryFile().name
- command = [self.wget, '--connect-timeout=' + str(int(timeout)), '-o',
- self.tmp_file, '-O', '-', '-U', self.settings.get('user_agent')]
-
- request_headers = {
- # Don't be alarmed if the response from the server does not select
- # one of these since the server runs a relatively new version of
- # OpenSSL which supports compression on the SSL layer, and Apache
- # will use that instead of HTTP-level encoding.
- 'Accept-Encoding': 'gzip,deflate'
- }
- request_headers = self.add_conditional_headers(url, request_headers)
-
- for name, value in request_headers.items():
- command.extend(['--header', "%s: %s" % (name, value)])
-
- secure_url_match = re.match('^https://([^/]+)', url)
- if secure_url_match != None:
- secure_domain = secure_url_match.group(1)
- bundle_path = self.check_certs(secure_domain, timeout)
- command.append(u'--ca-certificate=' + bundle_path)
-
- if self.debug:
- command.append('-d')
- else:
- command.append('-S')
-
- http_proxy = self.settings.get('http_proxy')
- https_proxy = self.settings.get('https_proxy')
- proxy_username = self.settings.get('proxy_username')
- proxy_password = self.settings.get('proxy_password')
-
- if proxy_username:
- command.append(u"--proxy-user=%s" % proxy_username)
- if proxy_password:
- command.append(u"--proxy-password=%s" % proxy_password)
-
- if self.debug:
- console_write(u"Wget Debug Proxy", True)
- console_write(u" http_proxy: %s" % http_proxy)
- console_write(u" https_proxy: %s" % https_proxy)
- console_write(u" proxy_username: %s" % proxy_username)
- console_write(u" proxy_password: %s" % proxy_password)
-
- command.append(url)
-
- if http_proxy:
- os.putenv('http_proxy', http_proxy)
- if https_proxy:
- os.putenv('https_proxy', https_proxy)
-
- error_string = None
- while tries > 0:
- tries -= 1
- try:
- result = self.execute(command)
-
- general, headers = self.parse_output()
- encoding = headers.get('content-encoding')
- if encoding:
- result = self.decode_response(encoding, result)
-
- result = self.cache_result('get', url, general['status'],
- headers, result)
-
- return result
-
- except (NonCleanExitError) as e:
-
- try:
- general, headers = self.parse_output()
- self.handle_rate_limit(headers, url)
-
- if general['status'] == 304:
- return self.cache_result('get', url, general['status'],
- headers, None)
-
- if general['status'] == 503 and tries != 0:
- # GitHub and BitBucket seem to rate limit via 503
- error_string = u'Downloading %s was rate limited' % url
- if tries:
- error_string += ', trying again'
- if self.debug:
- console_write(error_string, True)
- continue
-
- download_error = 'HTTP error %s' % general['status']
-
- except (NonHttpError) as e:
-
- download_error = unicode_from_os(e)
-
- # GitHub and BitBucket seem to time out a lot
- if download_error.find('timed out') != -1:
- error_string = u'Downloading %s timed out' % url
- if tries:
- error_string += ', trying again'
- if self.debug:
- console_write(error_string, True)
- continue
-
- error_string = u'%s %s downloading %s.' % (error_message, download_error, url)
-
- break
-
- raise DownloaderException(error_string)
-
- def supports_ssl(self):
- """
- Indicates if the object can handle HTTPS requests
-
- :return:
- If the object supports HTTPS requests
- """
-
- return True
-
- def parse_output(self):
- """
- Parses the wget output file, prints debug information and returns headers
-
- :return:
- A tuple of (general, headers) where general is a dict with the keys:
- `version` - HTTP version number (string)
- `status` - HTTP status code (integer)
- `message` - HTTP status message (string)
- And headers is a dict with the keys being lower-case version of the
- HTTP header names.
- """
-
- with open_compat(self.tmp_file, 'r') as f:
- output = read_compat(f).splitlines()
- self.clean_tmp_file()
-
- error = None
- header_lines = []
- if self.debug:
- section = 'General'
- last_section = None
- for line in output:
- if section == 'General':
- if self.skippable_line(line):
- continue
-
- # Skip blank lines
- if line.strip() == '':
- continue
-
- # Error lines
- if line[0:5] == 'wget:':
- error = line[5:].strip()
- if line[0:7] == 'failed:':
- error = line[7:].strip()
-
- if line == '---request begin---':
- section = 'Write'
- continue
- elif line == '---request end---':
- section = 'General'
- continue
- elif line == '---response begin---':
- section = 'Read'
- continue
- elif line == '---response end---':
- section = 'General'
- continue
-
- if section != last_section:
- console_write(u"Wget HTTP Debug %s" % section, True)
-
- if section == 'Read':
- header_lines.append(line)
-
- console_write(u' ' + line)
- last_section = section
-
- else:
- for line in output:
- if self.skippable_line(line):
- continue
-
- # Check the resolving and connecting to lines for errors
- if re.match('(Resolving |Connecting to )', line):
- failed_match = re.search(' failed: (.*)$', line)
- if failed_match:
- error = failed_match.group(1).strip()
-
- # Error lines
- if line[0:5] == 'wget:':
- error = line[5:].strip()
- if line[0:7] == 'failed:':
- error = line[7:].strip()
-
- if line[0:2] == ' ':
- header_lines.append(line.lstrip())
-
- if error:
- raise NonHttpError(error)
-
- return self.parse_headers(header_lines)
-
- def skippable_line(self, line):
- """
- Determines if a debug line is skippable - usually because of extraneous
- or duplicate information.
-
- :param line:
- The debug line to check
-
- :return:
- True if the line is skippable, otherwise None
- """
-
- # Skip date lines
- if re.match('--\d{4}-\d{2}-\d{2}', line):
- return True
- if re.match('\d{4}-\d{2}-\d{2}', line):
- return True
- # Skip HTTP status code lines since we already have that info
- if re.match('\d{3} ', line):
- return True
- # Skip Saving to and progress lines
- if re.match('(Saving to:|\s*\d+K)', line):
- return True
- # Skip notice about ignoring body on HTTP error
- if re.match('Skipping \d+ byte', line):
- return True
-
- def parse_headers(self, output=None):
- """
- Parses HTTP headers into two dict objects
-
- :param output:
- An array of header lines, if None, loads from temp output file
-
- :return:
- A tuple of (general, headers) where general is a dict with the keys:
- `version` - HTTP version number (string)
- `status` - HTTP status code (integer)
- `message` - HTTP status message (string)
- And headers is a dict with the keys being lower-case version of the
- HTTP header names.
- """
-
- if not output:
- with open_compat(self.tmp_file, 'r') as f:
- output = read_compat(f).splitlines()
- self.clean_tmp_file()
-
- general = {
- 'version': '0.9',
- 'status': 200,
- 'message': 'OK'
- }
- headers = {}
- for line in output:
- # When using the -S option, headers have two spaces before them,
- # additionally, valid headers won't have spaces, so this is always
- # a safe operation to perform
- line = line.lstrip()
- if line.find('HTTP/') == 0:
- match = re.match('HTTP/(\d\.\d)\s+(\d+)(?:\s+(.*))?$', line)
- general['version'] = match.group(1)
- general['status'] = int(match.group(2))
- general['message'] = match.group(3) or ''
- else:
- name, value = line.split(':', 1)
- headers[name.lower()] = value.strip()
-
- return (general, headers)
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/downloaders/wininet_downloader.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/downloaders/wininet_downloader.py
deleted file mode 100644
index 7134db9..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/downloaders/wininet_downloader.py
+++ /dev/null
@@ -1,652 +0,0 @@
-from ctypes import windll, wintypes
-import ctypes
-import time
-import re
-import datetime
-import struct
-import locale
-
-wininet = windll.wininet
-
-try:
- # Python 3
- from urllib.parse import urlparse
-except (ImportError):
- # Python 2
- from urlparse import urlparse
-
-from ..console_write import console_write
-from ..unicode import unicode_from_os
-from .non_http_error import NonHttpError
-from .http_error import HttpError
-from .rate_limit_exception import RateLimitException
-from .downloader_exception import DownloaderException
-from .decoding_downloader import DecodingDownloader
-from .limiting_downloader import LimitingDownloader
-from .caching_downloader import CachingDownloader
-
-
-class WinINetDownloader(DecodingDownloader, LimitingDownloader, CachingDownloader):
- """
- A downloader that uses the Windows WinINet DLL to perform downloads. This
- has the benefit of utilizing system-level proxy configuration and CA certs.
-
- :param settings:
- A dict of the various Package Control settings. The Sublime Text
- Settings API is not used because this code is run in a thread.
- """
-
- # General constants
- ERROR_INSUFFICIENT_BUFFER = 122
-
- # InternetOpen constants
- INTERNET_OPEN_TYPE_PRECONFIG = 0
-
- # InternetConnect constants
- INTERNET_SERVICE_HTTP = 3
- INTERNET_FLAG_EXISTING_CONNECT = 0x20000000
- INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS = 0x00004000
-
- # InternetSetOption constants
- INTERNET_OPTION_CONNECT_TIMEOUT = 2
- INTERNET_OPTION_SEND_TIMEOUT = 5
- INTERNET_OPTION_RECEIVE_TIMEOUT = 6
-
- # InternetQueryOption constants
- INTERNET_OPTION_SECURITY_CERTIFICATE_STRUCT = 32
- INTERNET_OPTION_PROXY = 38
- INTERNET_OPTION_PROXY_USERNAME = 43
- INTERNET_OPTION_PROXY_PASSWORD = 44
- INTERNET_OPTION_CONNECTED_STATE = 50
-
- # HttpOpenRequest constants
- INTERNET_FLAG_KEEP_CONNECTION = 0x00400000
- INTERNET_FLAG_RELOAD = 0x80000000
- INTERNET_FLAG_NO_CACHE_WRITE = 0x04000000
- INTERNET_FLAG_PRAGMA_NOCACHE = 0x00000100
- INTERNET_FLAG_SECURE = 0x00800000
-
- # HttpQueryInfo constants
- HTTP_QUERY_RAW_HEADERS_CRLF = 22
-
- # InternetConnectedState constants
- INTERNET_STATE_CONNECTED = 1
- INTERNET_STATE_DISCONNECTED = 2
- INTERNET_STATE_DISCONNECTED_BY_USER = 0x10
- INTERNET_STATE_IDLE = 0x100
- INTERNET_STATE_BUSY = 0x200
-
-
- def __init__(self, settings):
- self.settings = settings
- self.debug = settings.get('debug')
- self.network_connection = None
- self.tcp_connection = None
- self.use_count = 0
- self.hostname = None
- self.port = None
- self.scheme = None
- self.was_offline = None
-
- def close(self):
- """
- Closes any persistent/open connections
- """
-
- closed = False
- changed_state_back = False
-
- if self.tcp_connection:
- wininet.InternetCloseHandle(self.tcp_connection)
- self.tcp_connection = None
- closed = True
-
- if self.network_connection:
- wininet.InternetCloseHandle(self.network_connection)
- self.network_connection = None
- closed = True
-
- if self.was_offline:
- dw_connected_state = wintypes.DWORD(self.INTERNET_STATE_DISCONNECTED_BY_USER)
- dw_flags = wintypes.DWORD(0)
- connected_info = InternetConnectedInfo(dw_connected_state, dw_flags)
- wininet.InternetSetOptionA(None,
- self.INTERNET_OPTION_CONNECTED_STATE, ctypes.byref(connected_info), ctypes.sizeof(connected_info))
- changed_state_back = True
-
- if self.debug:
- s = '' if self.use_count == 1 else 's'
- console_write(u"WinINet %s Debug General" % self.scheme.upper(), True)
- console_write(u" Closing connection to %s on port %s after %s request%s" % (
- self.hostname, self.port, self.use_count, s))
- if changed_state_back:
- console_write(u" Changed Internet Explorer back to Work Offline")
-
- self.hostname = None
- self.port = None
- self.scheme = None
- self.use_count = 0
- self.was_offline = None
-
- def download(self, url, error_message, timeout, tries, prefer_cached=False):
- """
- Downloads a URL and returns the contents
-
- :param url:
- The URL to download
-
- :param error_message:
- A string to include in the console error that is printed
- when an error occurs
-
- :param timeout:
- The int number of seconds to set the timeout to
-
- :param tries:
- The int number of times to try and download the URL in the case of
- a timeout or HTTP 503 error
-
- :param prefer_cached:
- If a cached version should be returned instead of trying a new request
-
- :raises:
- RateLimitException: when a rate limit is hit
- DownloaderException: when any other download error occurs
-
- :return:
- The string contents of the URL
- """
-
- if prefer_cached:
- cached = self.retrieve_cached(url)
- if cached:
- return cached
-
- url_info = urlparse(url)
-
- if not url_info.port:
- port = 443 if url_info.scheme == 'https' else 80
- hostname = url_info.netloc
- else:
- port = url_info.port
- hostname = url_info.hostname
-
- path = url_info.path
- if url_info.params:
- path += ';' + url_info.params
- if url_info.query:
- path += '?' + url_info.query
-
- request_headers = {
- 'Accept-Encoding': 'gzip,deflate'
- }
- request_headers = self.add_conditional_headers(url, request_headers)
-
- created_connection = False
- # If we switched Internet Explorer out of "Work Offline" mode
- changed_to_online = False
-
- # If the user is requesting a connection to another server, close the connection
- if (self.hostname and self.hostname != hostname) or (self.port and self.port != port):
- self.close()
-
- # Reset the error info to a known clean state
- ctypes.windll.kernel32.SetLastError(0)
-
- # Save the internet setup in the class for re-use
- if not self.tcp_connection:
- created_connection = True
-
- # Connect to the internet if necessary
- state = self.read_option(None, self.INTERNET_OPTION_CONNECTED_STATE)
- state = ord(state)
- if state & self.INTERNET_STATE_DISCONNECTED or state & self.INTERNET_STATE_DISCONNECTED_BY_USER:
- # Track the previous state so we can go back once complete
- self.was_offline = True
-
- dw_connected_state = wintypes.DWORD(self.INTERNET_STATE_CONNECTED)
- dw_flags = wintypes.DWORD(0)
- connected_info = InternetConnectedInfo(dw_connected_state, dw_flags)
- wininet.InternetSetOptionA(None,
- self.INTERNET_OPTION_CONNECTED_STATE, ctypes.byref(connected_info), ctypes.sizeof(connected_info))
- changed_to_online = True
-
- self.network_connection = wininet.InternetOpenW(self.settings.get('user_agent'),
- self.INTERNET_OPEN_TYPE_PRECONFIG, None, None, 0)
-
- if not self.network_connection:
- error_string = u'%s %s during network phase of downloading %s.' % (error_message, self.extract_error(), url)
- raise DownloaderException(error_string)
-
- win_timeout = wintypes.DWORD(int(timeout) * 1000)
- # Apparently INTERNET_OPTION_CONNECT_TIMEOUT just doesn't work, leaving it in hoping they may fix in the future
- wininet.InternetSetOptionA(self.network_connection,
- self.INTERNET_OPTION_CONNECT_TIMEOUT, win_timeout, ctypes.sizeof(win_timeout))
- wininet.InternetSetOptionA(self.network_connection,
- self.INTERNET_OPTION_SEND_TIMEOUT, win_timeout, ctypes.sizeof(win_timeout))
- wininet.InternetSetOptionA(self.network_connection,
- self.INTERNET_OPTION_RECEIVE_TIMEOUT, win_timeout, ctypes.sizeof(win_timeout))
-
- # Don't allow HTTPS sites to redirect to HTTP sites
- tcp_flags = self.INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS
- # Try to re-use an existing connection to the server
- tcp_flags |= self.INTERNET_FLAG_EXISTING_CONNECT
- self.tcp_connection = wininet.InternetConnectW(self.network_connection,
- hostname, port, None, None, self.INTERNET_SERVICE_HTTP, tcp_flags, 0)
-
- if not self.tcp_connection:
- error_string = u'%s %s during connection phase of downloading %s.' % (error_message, self.extract_error(), url)
- raise DownloaderException(error_string)
-
- # Normally the proxy info would come from IE, but this allows storing it in
- # the Package Control settings file.
- proxy_username = self.settings.get('proxy_username')
- proxy_password = self.settings.get('proxy_password')
- if proxy_username and proxy_password:
- username = ctypes.c_wchar_p(proxy_username)
- password = ctypes.c_wchar_p(proxy_password)
- wininet.InternetSetOptionW(self.tcp_connection,
- self.INTERNET_OPTION_PROXY_USERNAME, ctypes.cast(username, ctypes.c_void_p), len(proxy_username))
- wininet.InternetSetOptionW(self.tcp_connection,
- self.INTERNET_OPTION_PROXY_PASSWORD, ctypes.cast(password, ctypes.c_void_p), len(proxy_password))
-
- self.hostname = hostname
- self.port = port
- self.scheme = url_info.scheme
-
- else:
- if self.debug:
- console_write(u"WinINet %s Debug General" % self.scheme.upper(), True)
- console_write(u" Re-using connection to %s on port %s for request #%s" % (
- self.hostname, self.port, self.use_count))
-
- error_string = None
- while tries > 0:
- tries -= 1
- try:
- http_connection = None
-
- # Keep-alive for better performance
- http_flags = self.INTERNET_FLAG_KEEP_CONNECTION
- # Prevent caching/retrieving from cache
- http_flags |= self.INTERNET_FLAG_RELOAD
- http_flags |= self.INTERNET_FLAG_NO_CACHE_WRITE
- http_flags |= self.INTERNET_FLAG_PRAGMA_NOCACHE
- # Use SSL
- if self.scheme == 'https':
- http_flags |= self.INTERNET_FLAG_SECURE
-
- http_connection = wininet.HttpOpenRequestW(self.tcp_connection, u'GET', path, u'HTTP/1.1', None, None, http_flags, 0)
- if not http_connection:
- error_string = u'%s %s during HTTP connection phase of downloading %s.' % (error_message, self.extract_error(), url)
- raise DownloaderException(error_string)
-
- request_header_lines = []
- for header, value in request_headers.items():
- request_header_lines.append(u"%s: %s" % (header, value))
- request_header_lines = u"\r\n".join(request_header_lines)
-
- success = wininet.HttpSendRequestW(http_connection, request_header_lines, len(request_header_lines), None, 0)
-
- if not success:
- error_string = u'%s %s during HTTP write phase of downloading %s.' % (error_message, self.extract_error(), url)
- raise DownloaderException(error_string)
-
- # If we try to query before here, the proxy info will not be available to the first request
- if self.debug:
- proxy_struct = self.read_option(self.network_connection, self.INTERNET_OPTION_PROXY)
- proxy = ''
- if proxy_struct.lpszProxy:
- proxy = proxy_struct.lpszProxy.decode('cp1252')
- proxy_bypass = ''
- if proxy_struct.lpszProxyBypass:
- proxy_bypass = proxy_struct.lpszProxyBypass.decode('cp1252')
-
- proxy_username = self.read_option(self.tcp_connection, self.INTERNET_OPTION_PROXY_USERNAME)
- proxy_password = self.read_option(self.tcp_connection, self.INTERNET_OPTION_PROXY_PASSWORD)
-
- console_write(u"WinINet Debug Proxy", True)
- console_write(u" proxy: %s" % proxy)
- console_write(u" proxy bypass: %s" % proxy_bypass)
- console_write(u" proxy username: %s" % proxy_username)
- console_write(u" proxy password: %s" % proxy_password)
-
- self.use_count += 1
-
- if self.debug and created_connection:
- if self.scheme == 'https':
- cert_struct = self.read_option(http_connection, self.INTERNET_OPTION_SECURITY_CERTIFICATE_STRUCT)
-
- if cert_struct.lpszIssuerInfo:
- issuer_info = cert_struct.lpszIssuerInfo.decode('cp1252')
- issuer_parts = issuer_info.split("\r\n")
- else:
- issuer_parts = ['No issuer info']
-
- if cert_struct.lpszSubjectInfo:
- subject_info = cert_struct.lpszSubjectInfo.decode('cp1252')
- subject_parts = subject_info.split("\r\n")
- else:
- subject_parts = ["No subject info"]
-
- common_name = subject_parts[-1]
-
- if cert_struct.ftStart.dwLowDateTime != 0 and cert_struct.ftStart.dwHighDateTime != 0:
- issue_date = self.convert_filetime_to_datetime(cert_struct.ftStart)
- issue_date = issue_date.strftime('%a, %d %b %Y %H:%M:%S GMT')
- else:
- issue_date = u"No issue date"
-
- if cert_struct.ftExpiry.dwLowDateTime != 0 and cert_struct.ftExpiry.dwHighDateTime != 0:
- expiration_date = self.convert_filetime_to_datetime(cert_struct.ftExpiry)
- expiration_date = expiration_date.strftime('%a, %d %b %Y %H:%M:%S GMT')
- else:
- expiration_date = u"No expiration date"
-
- console_write(u"WinINet HTTPS Debug General", True)
- if changed_to_online:
- console_write(u" Internet Explorer was set to Work Offline, temporarily going online")
- console_write(u" Server SSL Certificate:")
- console_write(u" subject: %s" % ", ".join(subject_parts))
- console_write(u" issuer: %s" % ", ".join(issuer_parts))
- console_write(u" common name: %s" % common_name)
- console_write(u" issue date: %s" % issue_date)
- console_write(u" expire date: %s" % expiration_date)
-
- elif changed_to_online:
- console_write(u"WinINet HTTP Debug General", True)
- console_write(u" Internet Explorer was set to Work Offline, temporarily going online")
-
- if self.debug:
- console_write(u"WinINet %s Debug Write" % self.scheme.upper(), True)
- # Add in some known headers that WinINet sends since we can't get the real list
- console_write(u" GET %s HTTP/1.1" % path)
- for header, value in request_headers.items():
- console_write(u" %s: %s" % (header, value))
- console_write(u" User-Agent: %s" % self.settings.get('user_agent'))
- console_write(u" Host: %s" % hostname)
- console_write(u" Connection: Keep-Alive")
- console_write(u" Cache-Control: no-cache")
-
- header_buffer_size = 8192
-
- try_again = True
- while try_again:
- try_again = False
-
- to_read_was_read = wintypes.DWORD(header_buffer_size)
- headers_buffer = ctypes.create_string_buffer(header_buffer_size)
-
- success = wininet.HttpQueryInfoA(http_connection, self.HTTP_QUERY_RAW_HEADERS_CRLF, ctypes.byref(headers_buffer), ctypes.byref(to_read_was_read), None)
- if not success:
- if ctypes.GetLastError() != self.ERROR_INSUFFICIENT_BUFFER:
- error_string = u'%s %s during header read phase of downloading %s.' % (error_message, self.extract_error(), url)
- raise DownloaderException(error_string)
- # The error was a buffer that was too small, so try again
- header_buffer_size = to_read_was_read.value
- try_again = True
- continue
-
- headers = b''
- if to_read_was_read.value > 0:
- headers += headers_buffer.raw[:to_read_was_read.value]
- headers = headers.decode('iso-8859-1').rstrip("\r\n").split("\r\n")
-
- if self.debug:
- console_write(u"WinINet %s Debug Read" % self.scheme.upper(), True)
- for header in headers:
- console_write(u" %s" % header)
-
- buffer_length = 65536
- output_buffer = ctypes.create_string_buffer(buffer_length)
- bytes_read = wintypes.DWORD()
-
- result = b''
- try_again = True
- while try_again:
- try_again = False
- wininet.InternetReadFile(http_connection, output_buffer, buffer_length, ctypes.byref(bytes_read))
- if bytes_read.value > 0:
- result += output_buffer.raw[:bytes_read.value]
- try_again = True
-
- general, headers = self.parse_headers(headers)
- self.handle_rate_limit(headers, url)
-
- if general['status'] == 503 and tries != 0:
- # GitHub and BitBucket seem to rate limit via 503
- error_string = u'Downloading %s was rate limited' % url
- if tries:
- error_string += ', trying again'
- if self.debug:
- console_write(error_string, True)
- continue
-
- encoding = headers.get('content-encoding')
- if encoding:
- result = self.decode_response(encoding, result)
-
- result = self.cache_result('get', url, general['status'],
- headers, result)
-
- if general['status'] not in [200, 304]:
- raise HttpError("HTTP error %s" % general['status'], general['status'])
-
- return result
-
- except (NonHttpError, HttpError) as e:
-
- # GitHub and BitBucket seem to time out a lot
- if str(e).find('timed out') != -1:
- error_string = u'Downloading %s timed out' % url
- if tries:
- error_string += ', trying again'
- if self.debug:
- console_write(error_string, True)
- continue
-
- error_string = u'%s %s downloading %s.' % (error_message, e, url)
-
- finally:
- if http_connection:
- wininet.InternetCloseHandle(http_connection)
-
- break
-
- raise DownloaderException(error_string)
-
- def convert_filetime_to_datetime(self, filetime):
- """
- Windows returns times as 64-bit unsigned longs that are the number
- of hundreds of nanoseconds since Jan 1 1601. This converts it to
- a datetime object.
-
- :param filetime:
- A FileTime struct object
-
- :return:
- A (UTC) datetime object
- """
-
- hundreds_nano_seconds = struct.unpack('>Q', struct.pack('>LL', filetime.dwHighDateTime, filetime.dwLowDateTime))[0]
- seconds_since_1601 = hundreds_nano_seconds / 10000000
- epoch_seconds = seconds_since_1601 - 11644473600 # Seconds from Jan 1 1601 to Jan 1 1970
- return datetime.datetime.fromtimestamp(epoch_seconds)
-
- def extract_error(self):
- """
- Retrieves and formats an error from WinINet
-
- :return:
- A string with a nice description of the error
- """
-
- error_num = ctypes.GetLastError()
- raw_error_string = ctypes.FormatError(error_num)
-
- error_string = unicode_from_os(raw_error_string)
-
- # Try to fill in some known errors
- if error_string == u"":
- error_lookup = {
- 12007: u'host not found',
- 12029: u'connection refused',
- 12057: u'error checking for server certificate revocation',
- 12169: u'invalid secure certificate',
- 12157: u'secure channel error, server not providing SSL',
- 12002: u'operation timed out'
- }
- if error_num in error_lookup:
- error_string = error_lookup[error_num]
-
- if error_string == u"":
- return u"(errno %s)" % error_num
-
- error_string = error_string[0].upper() + error_string[1:]
- return u"%s (errno %s)" % (error_string, error_num)
-
- def supports_ssl(self):
- """
- Indicates if the object can handle HTTPS requests
-
- :return:
- If the object supports HTTPS requests
- """
-
- return True
-
- def read_option(self, handle, option):
- """
- Reads information about the internet connection, which may be a string or struct
-
- :param handle:
- The handle to query for the info
-
- :param option:
- The (int) option to get
-
- :return:
- A string, or one of the InternetCertificateInfo or InternetProxyInfo structs
- """
-
- option_buffer_size = 8192
- try_again = True
-
- while try_again:
- try_again = False
-
- to_read_was_read = wintypes.DWORD(option_buffer_size)
- option_buffer = ctypes.create_string_buffer(option_buffer_size)
- ref = ctypes.byref(option_buffer)
-
- success = wininet.InternetQueryOptionA(handle, option, ref, ctypes.byref(to_read_was_read))
- if not success:
- if ctypes.GetLastError() != self.ERROR_INSUFFICIENT_BUFFER:
- raise NonHttpError(self.extract_error())
- # The error was a buffer that was too small, so try again
- option_buffer_size = to_read_was_read.value
- try_again = True
- continue
-
- if option == self.INTERNET_OPTION_SECURITY_CERTIFICATE_STRUCT:
- length = min(len(option_buffer), ctypes.sizeof(InternetCertificateInfo))
- cert_info = InternetCertificateInfo()
- ctypes.memmove(ctypes.addressof(cert_info), option_buffer, length)
- return cert_info
- elif option == self.INTERNET_OPTION_PROXY:
- length = min(len(option_buffer), ctypes.sizeof(InternetProxyInfo))
- proxy_info = InternetProxyInfo()
- ctypes.memmove(ctypes.addressof(proxy_info), option_buffer, length)
- return proxy_info
- else:
- option = b''
- if to_read_was_read.value > 0:
- option += option_buffer.raw[:to_read_was_read.value]
- return option.decode('cp1252').rstrip("\x00")
-
- def parse_headers(self, output):
- """
- Parses HTTP headers into two dict objects
-
- :param output:
- An array of header lines
-
- :return:
- A tuple of (general, headers) where general is a dict with the keys:
- `version` - HTTP version number (string)
- `status` - HTTP status code (integer)
- `message` - HTTP status message (string)
- And headers is a dict with the keys being lower-case version of the
- HTTP header names.
- """
-
- general = {
- 'version': '0.9',
- 'status': 200,
- 'message': 'OK'
- }
- headers = {}
- for line in output:
- line = line.lstrip()
- if line.find('HTTP/') == 0:
- match = re.match('HTTP/(\d\.\d)\s+(\d+)\s+(.*)$', line)
- general['version'] = match.group(1)
- general['status'] = int(match.group(2))
- general['message'] = match.group(3)
- else:
- name, value = line.split(':', 1)
- headers[name.lower()] = value.strip()
-
- return (general, headers)
-
-
-class FileTime(ctypes.Structure):
- """
- A Windows struct used by InternetCertificateInfo for certificate
- date information
- """
-
- _fields_ = [
- ("dwLowDateTime", wintypes.DWORD),
- ("dwHighDateTime", wintypes.DWORD)
- ]
-
-
-class InternetCertificateInfo(ctypes.Structure):
- """
- A Windows struct used to store information about an SSL certificate
- """
-
- _fields_ = [
- ("ftExpiry", FileTime),
- ("ftStart", FileTime),
- ("lpszSubjectInfo", ctypes.c_char_p),
- ("lpszIssuerInfo", ctypes.c_char_p),
- ("lpszProtocolName", ctypes.c_char_p),
- ("lpszSignatureAlgName", ctypes.c_char_p),
- ("lpszEncryptionAlgName", ctypes.c_char_p),
- ("dwKeySize", wintypes.DWORD)
- ]
-
-
-class InternetProxyInfo(ctypes.Structure):
- """
- A Windows struct usd to store information about the configured proxy server
- """
-
- _fields_ = [
- ("dwAccessType", wintypes.DWORD),
- ("lpszProxy", ctypes.c_char_p),
- ("lpszProxyBypass", ctypes.c_char_p)
- ]
-
-
-class InternetConnectedInfo(ctypes.Structure):
- """
- A Windows struct usd to store information about the global internet connection state
- """
-
- _fields_ = [
- ("dwConnectedState", wintypes.DWORD),
- ("dwFlags", wintypes.DWORD)
- ]
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/file_not_found_error.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/file_not_found_error.py
deleted file mode 100644
index 3fd4da5..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/file_not_found_error.py
+++ /dev/null
@@ -1,4 +0,0 @@
-class FileNotFoundError(Exception):
- """If a file is not found"""
-
- pass
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/http/__init__.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/http/__init__.py
deleted file mode 100644
index e3358df..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/http/__init__.py
+++ /dev/null
@@ -1,65 +0,0 @@
-import sys
-
-try:
- # Python 2
- import urllib2
- import httplib
-
- # Monkey patch AbstractBasicAuthHandler to prevent infinite recursion
- def non_recursive_http_error_auth_reqed(self, authreq, host, req, headers):
- authreq = headers.get(authreq, None)
-
- if not hasattr(self, 'retried'):
- self.retried = 0
-
- if self.retried > 5:
- raise urllib2.HTTPError(req.get_full_url(), 401, "basic auth failed",
- headers, None)
- else:
- self.retried += 1
-
- if authreq:
- mo = urllib2.AbstractBasicAuthHandler.rx.search(authreq)
- if mo:
- scheme, quote, realm = mo.groups()
- if scheme.lower() == 'basic':
- return self.retry_http_basic_auth(host, req, realm)
-
- urllib2.AbstractBasicAuthHandler.http_error_auth_reqed = non_recursive_http_error_auth_reqed
-
- # Money patch urllib2.Request and httplib.HTTPConnection so that
- # HTTPS proxies work in Python 2.6.1-2
- if sys.version_info < (2, 6, 3):
-
- urllib2.Request._tunnel_host = None
-
- def py268_set_proxy(self, host, type):
- if self.type == 'https' and not self._tunnel_host:
- self._tunnel_host = self.host
- else:
- self.type = type
- # The _Request prefix is to handle python private name mangling
- self._Request__r_host = self._Request__original
- self.host = host
- urllib2.Request.set_proxy = py268_set_proxy
-
- if sys.version_info < (2, 6, 5):
-
- def py268_set_tunnel(self, host, port=None, headers=None):
- """ Sets up the host and the port for the HTTP CONNECT Tunnelling.
-
- The headers argument should be a mapping of extra HTTP headers
- to send with the CONNECT request.
- """
- self._tunnel_host = host
- self._tunnel_port = port
- if headers:
- self._tunnel_headers = headers
- else:
- self._tunnel_headers.clear()
- httplib.HTTPConnection._set_tunnel = py268_set_tunnel
-
-
-except (ImportError):
- # Python 3 does not need to be patched
- pass
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/http/debuggable_http_connection.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/http/debuggable_http_connection.py
deleted file mode 100644
index e0044a9..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/http/debuggable_http_connection.py
+++ /dev/null
@@ -1,72 +0,0 @@
-import os
-import re
-import socket
-
-try:
- # Python 3
- from http.client import HTTPConnection
- from urllib.error import URLError
-except (ImportError):
- # Python 2
- from httplib import HTTPConnection
- from urllib2 import URLError
-
-from ..console_write import console_write
-from .debuggable_http_response import DebuggableHTTPResponse
-
-
-class DebuggableHTTPConnection(HTTPConnection):
- """
- A custom HTTPConnection that formats debugging info for Sublime Text
- """
-
- response_class = DebuggableHTTPResponse
- _debug_protocol = 'HTTP'
-
- def __init__(self, host, port=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT,
- **kwargs):
- self.passwd = kwargs.get('passwd')
-
- # Python 2.6.1 on OS X 10.6 does not include these
- self._tunnel_host = None
- self._tunnel_port = None
- self._tunnel_headers = {}
- if 'debug' in kwargs and kwargs['debug']:
- self.debuglevel = 5
- elif 'debuglevel' in kwargs:
- self.debuglevel = kwargs['debuglevel']
-
- HTTPConnection.__init__(self, host, port=port, timeout=timeout)
-
- def connect(self):
- if self.debuglevel == -1:
- console_write(u'Urllib %s Debug General' % self._debug_protocol, True)
- console_write(u" Connecting to %s on port %s" % (self.host, self.port))
- HTTPConnection.connect(self)
-
- def send(self, string):
- # We have to use a positive debuglevel to get it passed to the
- # HTTPResponse object, however we don't want to use it because by
- # default debugging prints to the stdout and we can't capture it, so
- # we temporarily set it to -1 for the standard httplib code
- reset_debug = False
- if self.debuglevel == 5:
- reset_debug = 5
- self.debuglevel = -1
- HTTPConnection.send(self, string)
- if reset_debug or self.debuglevel == -1:
- if len(string.strip()) > 0:
- console_write(u'Urllib %s Debug Write' % self._debug_protocol, True)
- for line in string.strip().splitlines():
- console_write(u' ' + line.decode('iso-8859-1'))
- if reset_debug:
- self.debuglevel = reset_debug
-
- def request(self, method, url, body=None, headers={}):
- original_headers = headers.copy()
-
- # By default urllib2 and urllib.request override the Connection header,
- # however, it is preferred to be able to re-use it
- original_headers['Connection'] = 'Keep-Alive'
-
- HTTPConnection.request(self, method, url, body, original_headers)
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/http/debuggable_http_handler.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/http/debuggable_http_handler.py
deleted file mode 100644
index ae4b8d1..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/http/debuggable_http_handler.py
+++ /dev/null
@@ -1,35 +0,0 @@
-import sys
-
-try:
- # Python 3
- from urllib.request import HTTPHandler
-except (ImportError):
- # Python 2
- from urllib2 import HTTPHandler
-
-from .debuggable_http_connection import DebuggableHTTPConnection
-from .persistent_handler import PersistentHandler
-
-
-class DebuggableHTTPHandler(PersistentHandler, HTTPHandler):
- """
- A custom HTTPHandler that formats debugging info for Sublime Text
- """
-
- def __init__(self, debuglevel=0, debug=False, **kwargs):
- # This is a special value that will not trigger the standard debug
- # functionality, but custom code where we can format the output
- if debug:
- self._debuglevel = 5
- else:
- self._debuglevel = debuglevel
- self.passwd = kwargs.get('passwd')
-
- def http_open(self, req):
- def http_class_wrapper(host, **kwargs):
- kwargs['passwd'] = self.passwd
- if 'debuglevel' not in kwargs:
- kwargs['debuglevel'] = self._debuglevel
- return DebuggableHTTPConnection(host, **kwargs)
-
- return self.do_open(http_class_wrapper, req)
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/http/debuggable_http_response.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/http/debuggable_http_response.py
deleted file mode 100644
index 2dd3af6..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/http/debuggable_http_response.py
+++ /dev/null
@@ -1,66 +0,0 @@
-try:
- # Python 3
- from http.client import HTTPResponse, IncompleteRead
-except (ImportError):
- # Python 2
- from httplib import HTTPResponse, IncompleteRead
-
-from ..console_write import console_write
-
-
-class DebuggableHTTPResponse(HTTPResponse):
- """
- A custom HTTPResponse that formats debugging info for Sublime Text
- """
-
- _debug_protocol = 'HTTP'
-
- def __init__(self, sock, debuglevel=0, method=None, **kwargs):
- # We have to use a positive debuglevel to get it passed to here,
- # however we don't want to use it because by default debugging prints
- # to the stdout and we can't capture it, so we use a special -1 value
- if debuglevel == 5:
- debuglevel = -1
- HTTPResponse.__init__(self, sock, debuglevel=debuglevel, method=method)
-
- def begin(self):
- return_value = HTTPResponse.begin(self)
- if self.debuglevel == -1:
- console_write(u'Urllib %s Debug Read' % self._debug_protocol, True)
-
- # Python 2
- if hasattr(self.msg, 'headers'):
- headers = self.msg.headers
- # Python 3
- else:
- headers = []
- for header in self.msg:
- headers.append("%s: %s" % (header, self.msg[header]))
-
- versions = {
- 9: 'HTTP/0.9',
- 10: 'HTTP/1.0',
- 11: 'HTTP/1.1'
- }
- status_line = versions[self.version] + ' ' + str(self.status) + ' ' + self.reason
- headers.insert(0, status_line)
- for line in headers:
- console_write(u" %s" % line.rstrip())
- return return_value
-
- def is_keep_alive(self):
- # Python 2
- if hasattr(self.msg, 'headers'):
- connection = self.msg.getheader('connection')
- # Python 3
- else:
- connection = self.msg['connection']
- if connection and connection.lower() == 'keep-alive':
- return True
- return False
-
- def read(self, *args):
- try:
- return HTTPResponse.read(self, *args)
- except (IncompleteRead) as e:
- return e.partial
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/http/debuggable_https_response.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/http/debuggable_https_response.py
deleted file mode 100644
index edc9fb0..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/http/debuggable_https_response.py
+++ /dev/null
@@ -1,9 +0,0 @@
-from .debuggable_http_response import DebuggableHTTPResponse
-
-
-class DebuggableHTTPSResponse(DebuggableHTTPResponse):
- """
- A version of DebuggableHTTPResponse that sets the debug protocol to HTTPS
- """
-
- _debug_protocol = 'HTTPS'
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/http/invalid_certificate_exception.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/http/invalid_certificate_exception.py
deleted file mode 100644
index 2715707..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/http/invalid_certificate_exception.py
+++ /dev/null
@@ -1,25 +0,0 @@
-try:
- # Python 3
- from http.client import HTTPException
- from urllib.error import URLError
-except (ImportError):
- # Python 2
- from httplib import HTTPException
- from urllib2 import URLError
-
-
-class InvalidCertificateException(HTTPException, URLError):
- """
- An exception for when an SSL certification is not valid for the URL
- it was presented for.
- """
-
- def __init__(self, host, cert, reason):
- HTTPException.__init__(self)
- self.host = host
- self.cert = cert
- self.reason = reason
-
- def __str__(self):
- return ('Host %s returned an invalid certificate (%s) %s\n' %
- (self.host, self.reason, self.cert))
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/http/persistent_handler.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/http/persistent_handler.py
deleted file mode 100644
index 4bfd3d7..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/http/persistent_handler.py
+++ /dev/null
@@ -1,116 +0,0 @@
-import sys
-import socket
-
-try:
- # Python 3
- from urllib.error import URLError
-except ImportError:
- # Python 2
- from urllib2 import URLError
- from urllib import addinfourl
-
-from ..console_write import console_write
-
-
-class PersistentHandler:
- connection = None
- use_count = 0
-
- def close(self):
- if self.connection:
- if self._debuglevel == 5:
- s = '' if self.use_count == 1 else 's'
- console_write(u"Urllib %s Debug General" % self.connection._debug_protocol, True)
- console_write(u" Closing connection to %s on port %s after %s request%s" % (
- self.connection.host, self.connection.port, self.use_count, s))
- self.connection.close()
- self.connection = None
- self.use_count = 0
-
- def do_open(self, http_class, req):
- # Large portions from Python 3.3 Lib/urllib/request.py and
- # Python 2.6 Lib/urllib2.py
-
- if sys.version_info >= (3,):
- host = req.host
- else:
- host = req.get_host()
-
- if not host:
- raise URLError('no host given')
-
- if self.connection and self.connection.host != host:
- self.close()
-
- # Re-use the connection if possible
- self.use_count += 1
- if not self.connection:
- h = http_class(host, timeout=req.timeout)
- else:
- h = self.connection
- if self._debuglevel == 5:
- console_write(u"Urllib %s Debug General" % h._debug_protocol, True)
- console_write(u" Re-using connection to %s on port %s for request #%s" % (
- h.host, h.port, self.use_count))
-
- if sys.version_info >= (3,):
- headers = dict(req.unredirected_hdrs)
- headers.update(dict((k, v) for k, v in req.headers.items()
- if k not in headers))
- headers = dict((name.title(), val) for name, val in headers.items())
-
- else:
- h.set_debuglevel(self._debuglevel)
-
- headers = dict(req.headers)
- headers.update(req.unredirected_hdrs)
- headers = dict(
- (name.title(), val) for name, val in headers.items())
-
- if req._tunnel_host and not self.connection:
- tunnel_headers = {}
- proxy_auth_hdr = "Proxy-Authorization"
- if proxy_auth_hdr in headers:
- tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr]
- del headers[proxy_auth_hdr]
-
- if sys.version_info >= (3,):
- h.set_tunnel(req._tunnel_host, headers=tunnel_headers)
- else:
- h._set_tunnel(req._tunnel_host, headers=tunnel_headers)
-
- try:
- if sys.version_info >= (3,):
- h.request(req.get_method(), req.selector, req.data, headers)
- else:
- h.request(req.get_method(), req.get_selector(), req.data, headers)
- except socket.error as err: # timeout error
- h.close()
- raise URLError(err)
- else:
- r = h.getresponse()
-
- # Keep the connection around for re-use
- if r.is_keep_alive():
- self.connection = h
- else:
- if self._debuglevel == 5:
- s = '' if self.use_count == 1 else 's'
- console_write(u"Urllib %s Debug General" % h._debug_protocol, True)
- console_write(u" Closing connection to %s on port %s after %s request%s" % (
- h.host, h.port, self.use_count, s))
- self.use_count = 0
- self.connection = None
-
- if sys.version_info >= (3,):
- r.url = req.get_full_url()
- r.msg = r.reason
- return r
-
- r.recv = r.read
- fp = socket._fileobject(r, close=True)
-
- resp = addinfourl(fp, r.msg, req.get_full_url())
- resp.code = r.status
- resp.msg = r.reason
- return resp
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/http/validating_https_connection.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/http/validating_https_connection.py
deleted file mode 100644
index a01afdb..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/http/validating_https_connection.py
+++ /dev/null
@@ -1,345 +0,0 @@
-import re
-import socket
-import base64
-import hashlib
-import os
-import sys
-
-try:
- # Python 3
- from http.client import HTTPS_PORT
- from urllib.request import parse_keqv_list, parse_http_list
-except (ImportError):
- # Python 2
- from httplib import HTTPS_PORT
- from urllib2 import parse_keqv_list, parse_http_list
-
-from ..console_write import console_write
-from .debuggable_https_response import DebuggableHTTPSResponse
-from .debuggable_http_connection import DebuggableHTTPConnection
-from .invalid_certificate_exception import InvalidCertificateException
-
-
-# The following code is wrapped in a try because the Linux versions of Sublime
-# Text do not include the ssl module due to the fact that different distros
-# have different versions
-try:
- import ssl
-
- class ValidatingHTTPSConnection(DebuggableHTTPConnection):
- """
- A custom HTTPConnection class that validates SSL certificates, and
- allows proxy authentication for HTTPS connections.
- """
-
- default_port = HTTPS_PORT
-
- response_class = DebuggableHTTPSResponse
- _debug_protocol = 'HTTPS'
-
- def __init__(self, host, port=None, key_file=None, cert_file=None,
- ca_certs=None, **kwargs):
- passed_args = {}
- if 'timeout' in kwargs:
- passed_args['timeout'] = kwargs['timeout']
- if 'debug' in kwargs:
- passed_args['debug'] = kwargs['debug']
- DebuggableHTTPConnection.__init__(self, host, port, **passed_args)
-
- self.passwd = kwargs.get('passwd')
- self.key_file = key_file
- self.cert_file = cert_file
- self.ca_certs = ca_certs
- if 'user_agent' in kwargs:
- self.user_agent = kwargs['user_agent']
- if self.ca_certs:
- self.cert_reqs = ssl.CERT_REQUIRED
- else:
- self.cert_reqs = ssl.CERT_NONE
-
- def get_valid_hosts_for_cert(self, cert):
- """
- Returns a list of valid hostnames for an SSL certificate
-
- :param cert: A dict from SSLSocket.getpeercert()
-
- :return: An array of hostnames
- """
-
- if 'subjectAltName' in cert:
- return [x[1] for x in cert['subjectAltName']
- if x[0].lower() == 'dns']
- else:
- return [x[0][1] for x in cert['subject']
- if x[0][0].lower() == 'commonname']
-
- def validate_cert_host(self, cert, hostname):
- """
- Checks if the cert is valid for the hostname
-
- :param cert: A dict from SSLSocket.getpeercert()
-
- :param hostname: A string hostname to check
-
- :return: A boolean if the cert is valid for the hostname
- """
-
- hosts = self.get_valid_hosts_for_cert(cert)
- for host in hosts:
- host_re = host.replace('.', '\.').replace('*', '[^.]*')
- if re.search('^%s$' % (host_re,), hostname, re.I):
- return True
- return False
-
- def _tunnel(self):
- """
- This custom _tunnel method allows us to read and print the debug
- log for the whole response before throwing an error, and adds
- support for proxy authentication
- """
-
- self._proxy_host = self.host
- self._proxy_port = self.port
- self._set_hostport(self._tunnel_host, self._tunnel_port)
-
- self._tunnel_headers['Host'] = u"%s:%s" % (self.host, self.port)
- self._tunnel_headers['User-Agent'] = self.user_agent
- self._tunnel_headers['Proxy-Connection'] = 'Keep-Alive'
-
- request = "CONNECT %s:%d HTTP/1.1\r\n" % (self.host, self.port)
- for header, value in self._tunnel_headers.items():
- request += "%s: %s\r\n" % (header, value)
- request += "\r\n"
-
- if sys.version_info >= (3,):
- request = bytes(request, 'iso-8859-1')
-
- self.send(request)
-
- response = self.response_class(self.sock, method=self._method)
- (version, code, message) = response._read_status()
-
- status_line = u"%s %s %s" % (version, code, message.rstrip())
- headers = [status_line]
-
- if self.debuglevel in [-1, 5]:
- console_write(u'Urllib %s Debug Read' % self._debug_protocol, True)
- console_write(u" %s" % status_line)
-
- content_length = 0
- close_connection = False
- while True:
- line = response.fp.readline()
-
- if sys.version_info >= (3,):
- line = str(line, encoding='iso-8859-1')
-
- if line == '\r\n':
- break
-
- headers.append(line.rstrip())
-
- parts = line.rstrip().split(': ', 1)
- name = parts[0].lower()
- value = parts[1].lower().strip()
- if name == 'content-length':
- content_length = int(value)
-
- if name in ['connection', 'proxy-connection'] and value == 'close':
- close_connection = True
-
- if self.debuglevel in [-1, 5]:
- console_write(u" %s" % line.rstrip())
-
- # Handle proxy auth for SSL connections since regular urllib punts on this
- if code == 407 and self.passwd and 'Proxy-Authorization' not in self._tunnel_headers:
- if content_length:
- response._safe_read(content_length)
-
- supported_auth_methods = {}
- for line in headers:
- parts = line.split(': ', 1)
- if parts[0].lower() != 'proxy-authenticate':
- continue
- details = parts[1].split(' ', 1)
- supported_auth_methods[details[0].lower()] = details[1] if len(details) > 1 else ''
-
- username, password = self.passwd.find_user_password(None, "%s:%s" % (
- self._proxy_host, self._proxy_port))
-
- if 'digest' in supported_auth_methods:
- response_value = self.build_digest_response(
- supported_auth_methods['digest'], username, password)
- if response_value:
- self._tunnel_headers['Proxy-Authorization'] = u"Digest %s" % response_value
-
- elif 'basic' in supported_auth_methods:
- response_value = u"%s:%s" % (username, password)
- response_value = base64.b64encode(response_value).strip()
- self._tunnel_headers['Proxy-Authorization'] = u"Basic %s" % response_value
-
- if 'Proxy-Authorization' in self._tunnel_headers:
- self.host = self._proxy_host
- self.port = self._proxy_port
-
- # If the proxy wanted the connection closed, we need to make a new connection
- if close_connection:
- self.sock.close()
- self.sock = socket.create_connection((self.host, self.port), self.timeout)
-
- return self._tunnel()
-
- if code != 200:
- self.close()
- raise socket.error("Tunnel connection failed: %d %s" % (code,
- message.strip()))
-
- def build_digest_response(self, fields, username, password):
- """
- Takes a Proxy-Authenticate: Digest header and creates a response
- header
-
- :param fields:
- The string portion of the Proxy-Authenticate header after
- "Digest "
-
- :param username:
- The username to use for the response
-
- :param password:
- The password to use for the response
-
- :return:
- None if invalid Proxy-Authenticate header, otherwise the
- string of fields for the Proxy-Authorization: Digest header
- """
-
- fields = parse_keqv_list(parse_http_list(fields))
-
- realm = fields.get('realm')
- nonce = fields.get('nonce')
- qop = fields.get('qop')
- algorithm = fields.get('algorithm')
- if algorithm:
- algorithm = algorithm.lower()
- opaque = fields.get('opaque')
-
- if algorithm in ['md5', None]:
- def md5hash(string):
- return hashlib.md5(string).hexdigest()
- hash = md5hash
-
- elif algorithm == 'sha':
- def sha1hash(string):
- return hashlib.sha1(string).hexdigest()
- hash = sha1hash
-
- else:
- return None
-
- host_port = u"%s:%s" % (self.host, self.port)
-
- a1 = "%s:%s:%s" % (username, realm, password)
- a2 = "CONNECT:%s" % host_port
- ha1 = hash(a1)
- ha2 = hash(a2)
-
- if qop == None:
- response = hash(u"%s:%s:%s" % (ha1, nonce, ha2))
- elif qop == 'auth':
- nc = '00000001'
- cnonce = hash(os.urandom(8))[:8]
- response = hash(u"%s:%s:%s:%s:%s:%s" % (ha1, nonce, nc, cnonce, qop, ha2))
- else:
- return None
-
- response_fields = {
- 'username': username,
- 'realm': realm,
- 'nonce': nonce,
- 'response': response,
- 'uri': host_port
- }
- if algorithm:
- response_fields['algorithm'] = algorithm
- if qop == 'auth':
- response_fields['nc'] = nc
- response_fields['cnonce'] = cnonce
- response_fields['qop'] = qop
- if opaque:
- response_fields['opaque'] = opaque
-
- return ', '.join([u"%s=\"%s\"" % (field, response_fields[field]) for field in response_fields])
-
- def connect(self):
- """
- Adds debugging and SSL certification validation
- """
-
- if self.debuglevel == -1:
- console_write(u"Urllib HTTPS Debug General", True)
- console_write(u" Connecting to %s on port %s" % (self.host, self.port))
-
- self.sock = socket.create_connection((self.host, self.port), self.timeout)
- if self._tunnel_host:
- self._tunnel()
-
- if self.debuglevel == -1:
- console_write(u"Urllib HTTPS Debug General", True)
- console_write(u" Connecting to %s on port %s" % (self.host, self.port))
- console_write(u" CA certs file at %s" % (self.ca_certs.decode(sys.getfilesystemencoding())))
-
- self.sock = ssl.wrap_socket(self.sock, keyfile=self.key_file,
- certfile=self.cert_file, cert_reqs=self.cert_reqs,
- ca_certs=self.ca_certs)
-
- if self.debuglevel == -1:
- console_write(u" Successfully upgraded connection to %s:%s with SSL" % (
- self.host, self.port))
-
- # This debugs and validates the SSL certificate
- if self.cert_reqs & ssl.CERT_REQUIRED:
- cert = self.sock.getpeercert()
-
- if self.debuglevel == -1:
- subjectMap = {
- 'organizationName': 'O',
- 'commonName': 'CN',
- 'organizationalUnitName': 'OU',
- 'countryName': 'C',
- 'serialNumber': 'serialNumber',
- 'commonName': 'CN',
- 'localityName': 'L',
- 'stateOrProvinceName': 'S'
- }
- subject_list = list(cert['subject'])
- subject_list.reverse()
- subject_parts = []
- for pair in subject_list:
- if pair[0][0] in subjectMap:
- field_name = subjectMap[pair[0][0]]
- else:
- field_name = pair[0][0]
- subject_parts.append(field_name + '=' + pair[0][1])
-
- console_write(u" Server SSL certificate:")
- console_write(u" subject: " + ','.join(subject_parts))
- if 'subjectAltName' in cert:
- console_write(u" common name: " + cert['subjectAltName'][0][1])
- if 'notAfter' in cert:
- console_write(u" expire date: " + cert['notAfter'])
-
- hostname = self.host.split(':', 0)[0]
-
- if not self.validate_cert_host(cert, hostname):
- if self.debuglevel == -1:
- console_write(u" Certificate INVALID")
-
- raise InvalidCertificateException(hostname, cert,
- 'hostname mismatch')
-
- if self.debuglevel == -1:
- console_write(u" Certificate validated for %s" % hostname)
-
-except (ImportError):
- pass
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/http/validating_https_handler.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/http/validating_https_handler.py
deleted file mode 100644
index 5b02c7a..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/http/validating_https_handler.py
+++ /dev/null
@@ -1,59 +0,0 @@
-try:
- # Python 3
- from urllib.error import URLError
- import urllib.request as urllib_compat
-except (ImportError):
- # Python 2
- from urllib2 import URLError
- import urllib2 as urllib_compat
-
-
-# The following code is wrapped in a try because the Linux versions of Sublime
-# Text do not include the ssl module due to the fact that different distros
-# have different versions
-try:
- import ssl
-
- from .validating_https_connection import ValidatingHTTPSConnection
- from .invalid_certificate_exception import InvalidCertificateException
- from .persistent_handler import PersistentHandler
-
- if hasattr(urllib_compat, 'HTTPSHandler'):
- class ValidatingHTTPSHandler(PersistentHandler, urllib_compat.HTTPSHandler):
- """
- A urllib handler that validates SSL certificates for HTTPS requests
- """
-
- def __init__(self, **kwargs):
- # This is a special value that will not trigger the standard debug
- # functionality, but custom code where we can format the output
- self._debuglevel = 0
- if 'debug' in kwargs and kwargs['debug']:
- self._debuglevel = 5
- elif 'debuglevel' in kwargs:
- self._debuglevel = kwargs['debuglevel']
- self._connection_args = kwargs
-
- def https_open(self, req):
- def http_class_wrapper(host, **kwargs):
- full_kwargs = dict(self._connection_args)
- full_kwargs.update(kwargs)
- return ValidatingHTTPSConnection(host, **full_kwargs)
-
- try:
- return self.do_open(http_class_wrapper, req)
- except URLError as e:
- if type(e.reason) == ssl.SSLError and e.reason.args[0] == 1:
- raise InvalidCertificateException(req.host, '',
- e.reason.args[1])
- raise
-
- https_request = urllib_compat.AbstractHTTPHandler.do_request_
- else:
- raise ImportError()
-
-except (ImportError) as e:
-
- class ValidatingHTTPSHandler():
- def __init__(self, **kwargs):
- raise e
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/http_cache.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/http_cache.py
deleted file mode 100644
index 2f6f3a2..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/http_cache.py
+++ /dev/null
@@ -1,75 +0,0 @@
-import os
-import time
-
-import sublime
-
-from .open_compat import open_compat, read_compat
-
-
-class HttpCache(object):
- """
- A data store for caching HTTP response data.
- """
-
- def __init__(self, ttl):
- self.base_path = os.path.join(sublime.packages_path(), 'User', 'Package Control.cache')
- if not os.path.exists(self.base_path):
- os.mkdir(self.base_path)
- self.clear(int(ttl))
-
- def clear(self, ttl):
- """
- Removes all cache entries older than the TTL
-
- :param ttl:
- The number of seconds a cache entry should be valid for
- """
-
- ttl = int(ttl)
-
- for filename in os.listdir(self.base_path):
- path = os.path.join(self.base_path, filename)
- # There should not be any folders in the cache dir, but we
- # ignore to prevent an exception
- if os.path.isdir(path):
- continue
- mtime = os.stat(path).st_mtime
- if mtime < time.time() - ttl:
- os.unlink(path)
-
- def get(self, key):
- """
- Returns a cached value
-
- :param key:
- The key to fetch the cache for
-
- :return:
- The (binary) cached value, or False
- """
-
- cache_file = os.path.join(self.base_path, key)
- if not os.path.exists(cache_file):
- return False
-
- with open_compat(cache_file, 'rb') as f:
- return read_compat(f)
-
- def has(self, key):
- cache_file = os.path.join(self.base_path, key)
- return os.path.exists(cache_file)
-
- def set(self, key, content):
- """
- Saves a value in the cache
-
- :param key:
- The key to save the cache with
-
- :param content:
- The (binary) content to cache
- """
-
- cache_file = os.path.join(self.base_path, key)
- with open_compat(cache_file, 'wb') as f:
- f.write(content)
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/open_compat.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/open_compat.py
deleted file mode 100644
index b22f066..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/open_compat.py
+++ /dev/null
@@ -1,27 +0,0 @@
-import os
-import sys
-
-from .file_not_found_error import FileNotFoundError
-
-
-def open_compat(path, mode='r'):
- if mode in ['r', 'rb'] and not os.path.exists(path):
- raise FileNotFoundError(u"The file \"%s\" could not be found" % path)
-
- if sys.version_info >= (3,):
- encoding = 'utf-8'
- errors = 'replace'
- if mode in ['rb', 'wb', 'ab']:
- encoding = None
- errors = None
- return open(path, mode, encoding=encoding, errors=errors)
-
- else:
- return open(path, mode)
-
-
-def read_compat(file_obj):
- if sys.version_info >= (3,):
- return file_obj.read()
- else:
- return unicode(file_obj.read(), 'utf-8', errors='replace')
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/package_cleanup.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/package_cleanup.py
deleted file mode 100644
index 352f4d4..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/package_cleanup.py
+++ /dev/null
@@ -1,107 +0,0 @@
-import threading
-import os
-import shutil
-
-import sublime
-
-from .show_error import show_error
-from .console_write import console_write
-from .unicode import unicode_from_os
-from .clear_directory import clear_directory
-from .automatic_upgrader import AutomaticUpgrader
-from .package_manager import PackageManager
-from .package_renamer import PackageRenamer
-from .open_compat import open_compat
-from .package_io import package_file_exists
-
-
-class PackageCleanup(threading.Thread, PackageRenamer):
- """
- Cleans up folders for packages that were removed, but that still have files
- in use.
- """
-
- def __init__(self):
- self.manager = PackageManager()
- self.load_settings()
- threading.Thread.__init__(self)
-
- def run(self):
- found_pkgs = []
- installed_pkgs = list(self.installed_packages)
- for package_name in os.listdir(sublime.packages_path()):
- package_dir = os.path.join(sublime.packages_path(), package_name)
-
- # Cleanup packages that could not be removed due to in-use files
- cleanup_file = os.path.join(package_dir, 'package-control.cleanup')
- if os.path.exists(cleanup_file):
- try:
- shutil.rmtree(package_dir)
- console_write(u'Removed old directory for package %s' % package_name, True)
-
- except (OSError) as e:
- if not os.path.exists(cleanup_file):
- open_compat(cleanup_file, 'w').close()
-
- error_string = (u'Unable to remove old directory for package ' +
- u'%s - deferring until next start: %s') % (
- package_name, unicode_from_os(e))
- console_write(error_string, True)
-
- # Finish reinstalling packages that could not be upgraded due to
- # in-use files
- reinstall = os.path.join(package_dir, 'package-control.reinstall')
- if os.path.exists(reinstall):
- metadata_path = os.path.join(package_dir, 'package-metadata.json')
- if not clear_directory(package_dir, [metadata_path]):
- if not os.path.exists(reinstall):
- open_compat(reinstall, 'w').close()
- # Assigning this here prevents the callback from referencing the value
- # of the "package_name" variable when it is executed
- restart_message = (u'An error occurred while trying to ' +
- u'finish the upgrade of %s. You will most likely need to ' +
- u'restart your computer to complete the upgrade.') % package_name
-
- def show_still_locked():
- show_error(restart_message)
- sublime.set_timeout(show_still_locked, 10)
- else:
- self.manager.install_package(package_name)
-
- # This adds previously installed packages from old versions of PC
- if package_file_exists(package_name, 'package-metadata.json') and \
- package_name not in self.installed_packages:
- installed_pkgs.append(package_name)
- params = {
- 'package': package_name,
- 'operation': 'install',
- 'version': \
- self.manager.get_metadata(package_name).get('version')
- }
- self.manager.record_usage(params)
-
- found_pkgs.append(package_name)
-
- if int(sublime.version()) >= 3000:
- package_files = os.listdir(sublime.installed_packages_path())
- found_pkgs += [file.replace('.sublime-package', '') for file in package_files]
-
- sublime.set_timeout(lambda: self.finish(installed_pkgs, found_pkgs), 10)
-
- def finish(self, installed_pkgs, found_pkgs):
- """
- A callback that can be run the main UI thread to perform saving of the
- Package Control.sublime-settings file. Also fires off the
- :class:`AutomaticUpgrader`.
-
- :param installed_pkgs:
- A list of the string package names of all "installed" packages,
- even ones that do not appear to be in the filesystem.
-
- :param found_pkgs:
- A list of the string package names of all packages that are
- currently installed on the filesystem.
- """
-
- self.save_packages(installed_pkgs)
- AutomaticUpgrader(found_pkgs).start()
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/package_creator.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/package_creator.py
deleted file mode 100644
index 47a3087..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/package_creator.py
+++ /dev/null
@@ -1,39 +0,0 @@
-import os
-
-from .show_error import show_error
-from .package_manager import PackageManager
-
-
-class PackageCreator():
- """
- Abstract class for commands that create .sublime-package files
- """
-
- def show_panel(self):
- """
- Shows a list of packages that can be turned into a .sublime-package file
- """
-
- self.manager = PackageManager()
- self.packages = self.manager.list_packages(unpacked_only=True)
- if not self.packages:
- show_error('There are no packages available to be packaged')
- return
- self.window.show_quick_panel(self.packages, self.on_done)
-
- def get_package_destination(self):
- """
- Retrieves the destination for .sublime-package files
-
- :return:
- A string - the path to the folder to save .sublime-package files in
- """
-
- destination = self.manager.settings.get('package_destination')
-
- # We check destination via an if statement instead of using
- # the dict.get() method since the key may be set, but to a blank value
- if not destination:
- destination = os.path.join(os.path.expanduser('~'), 'Desktop')
-
- return destination
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/package_installer.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/package_installer.py
deleted file mode 100644
index 9c8809c..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/package_installer.py
+++ /dev/null
@@ -1,247 +0,0 @@
-import os
-import re
-import threading
-
-import sublime
-
-from .preferences_filename import preferences_filename
-from .thread_progress import ThreadProgress
-from .package_manager import PackageManager
-from .upgraders.git_upgrader import GitUpgrader
-from .upgraders.hg_upgrader import HgUpgrader
-from .versions import version_comparable
-
-
-class PackageInstaller():
- """
- Provides helper functionality related to installing packages
- """
-
- def __init__(self):
- self.manager = PackageManager()
-
- def make_package_list(self, ignore_actions=[], override_action=None,
- ignore_packages=[]):
- """
- Creates a list of packages and what operation would be performed for
- each. Allows filtering by the applicable action or package name.
- Returns the information in a format suitable for displaying in the
- quick panel.
-
- :param ignore_actions:
- A list of actions to ignore packages by. Valid actions include:
- `install`, `upgrade`, `downgrade`, `reinstall`, `overwrite`,
- `pull` and `none`. `pull` andd `none` are for Git and Hg
- repositories. `pull` is present when incoming changes are detected,
- where as `none` is selected if no commits are available. `overwrite`
- is for packages that do not include version information via the
- `package-metadata.json` file.
-
- :param override_action:
- A string action name to override the displayed action for all listed
- packages.
-
- :param ignore_packages:
- A list of packages names that should not be returned in the list
-
- :return:
- A list of lists, each containing three strings:
- 0 - package name
- 1 - package description
- 2 - action; [extra info;] package url
- """
-
- packages = self.manager.list_available_packages()
- installed_packages = self.manager.list_packages()
-
- package_list = []
- for package in sorted(iter(packages.keys()), key=lambda s: s.lower()):
- if ignore_packages and package in ignore_packages:
- continue
- package_entry = [package]
- info = packages[package]
- download = info['download']
-
- if package in installed_packages:
- installed = True
- metadata = self.manager.get_metadata(package)
- if metadata.get('version'):
- installed_version = metadata['version']
- else:
- installed_version = None
- else:
- installed = False
-
- installed_version_name = 'v' + installed_version if \
- installed and installed_version else 'unknown version'
- new_version = 'v' + download['version']
-
- vcs = None
- package_dir = self.manager.get_package_dir(package)
- settings = self.manager.settings
-
- if override_action:
- action = override_action
- extra = ''
-
- else:
- if os.path.exists(os.path.join(package_dir, '.git')):
- if settings.get('ignore_vcs_packages'):
- continue
- vcs = 'git'
- incoming = GitUpgrader(settings.get('git_binary'),
- settings.get('git_update_command'), package_dir,
- settings.get('cache_length'), settings.get('debug')
- ).incoming()
- elif os.path.exists(os.path.join(package_dir, '.hg')):
- if settings.get('ignore_vcs_packages'):
- continue
- vcs = 'hg'
- incoming = HgUpgrader(settings.get('hg_binary'),
- settings.get('hg_update_command'), package_dir,
- settings.get('cache_length'), settings.get('debug')
- ).incoming()
-
- if installed:
- if vcs:
- if incoming:
- action = 'pull'
- extra = ' with ' + vcs
- else:
- action = 'none'
- extra = ''
- elif not installed_version:
- action = 'overwrite'
- extra = ' %s with %s' % (installed_version_name,
- new_version)
- else:
- installed_version = version_comparable(installed_version)
- download_version = version_comparable(download['version'])
- if download_version > installed_version:
- action = 'upgrade'
- extra = ' to %s from %s' % (new_version,
- installed_version_name)
- elif download_version < installed_version:
- action = 'downgrade'
- extra = ' to %s from %s' % (new_version,
- installed_version_name)
- else:
- action = 'reinstall'
- extra = ' %s' % new_version
- else:
- action = 'install'
- extra = ' %s' % new_version
- extra += ';'
-
- if action in ignore_actions:
- continue
-
- description = info.get('description')
- if not description:
- description = 'No description provided'
- package_entry.append(description)
- package_entry.append(action + extra + ' ' +
- re.sub('^https?://', '', info['homepage']))
- package_list.append(package_entry)
- return package_list
-
- def disable_packages(self, packages):
- """
- Disables one or more packages before installing or upgrading to prevent
- errors where Sublime Text tries to read files that no longer exist, or
- read a half-written file.
-
- :param packages: The string package name, or an array of strings
- """
-
- if not isinstance(packages, list):
- packages = [packages]
-
- # Don't disable Package Control so it does not get stuck disabled
- if 'Package Control' in packages:
- packages.remove('Package Control')
-
- disabled = []
-
- settings = sublime.load_settings(preferences_filename())
- ignored = settings.get('ignored_packages')
- if not ignored:
- ignored = []
- for package in packages:
- if not package in ignored:
- ignored.append(package)
- disabled.append(package)
- settings.set('ignored_packages', ignored)
- sublime.save_settings(preferences_filename())
- return disabled
-
- def reenable_package(self, package):
- """
- Re-enables a package after it has been installed or upgraded
-
- :param package: The string package name
- """
-
- settings = sublime.load_settings(preferences_filename())
- ignored = settings.get('ignored_packages')
- if not ignored:
- return
- if package in ignored:
- settings.set('ignored_packages',
- list(set(ignored) - set([package])))
- sublime.save_settings(preferences_filename())
-
- def on_done(self, picked):
- """
- Quick panel user selection handler - disables a package, installs or
- upgrades it, then re-enables the package
-
- :param picked:
- An integer of the 0-based package name index from the presented
- list. -1 means the user cancelled.
- """
-
- if picked == -1:
- return
- name = self.package_list[picked][0]
-
- if name in self.disable_packages(name):
- on_complete = lambda: self.reenable_package(name)
- else:
- on_complete = None
-
- thread = PackageInstallerThread(self.manager, name, on_complete)
- thread.start()
- ThreadProgress(thread, 'Installing package %s' % name,
- 'Package %s successfully %s' % (name, self.completion_type))
-
-
-class PackageInstallerThread(threading.Thread):
- """
- A thread to run package install/upgrade operations in so that the main
- Sublime Text thread does not get blocked and freeze the UI
- """
-
- def __init__(self, manager, package, on_complete):
- """
- :param manager:
- An instance of :class:`PackageManager`
-
- :param package:
- The string package name to install/upgrade
-
- :param on_complete:
- A callback to run after installing/upgrading the package
- """
-
- self.package = package
- self.manager = manager
- self.on_complete = on_complete
- threading.Thread.__init__(self)
-
- def run(self):
- try:
- self.result = self.manager.install_package(self.package)
- finally:
- if self.on_complete:
- sublime.set_timeout(self.on_complete, 1)
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/package_io.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/package_io.py
deleted file mode 100644
index 14ab134..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/package_io.py
+++ /dev/null
@@ -1,126 +0,0 @@
-import os
-import zipfile
-
-import sublime
-
-from .console_write import console_write
-from .open_compat import open_compat, read_compat
-from .unicode import unicode_from_os
-from .file_not_found_error import FileNotFoundError
-
-
-def read_package_file(package, relative_path, binary=False, debug=False):
- package_dir = _get_package_dir(package)
- file_path = os.path.join(package_dir, relative_path)
-
- if os.path.exists(package_dir):
- result = _read_regular_file(package, relative_path, binary, debug)
- if result != False:
- return result
-
- if int(sublime.version()) >= 3000:
- result = _read_zip_file(package, relative_path, binary, debug)
- if result != False:
- return result
-
- if debug:
- console_write(u"Unable to find file %s in the package %s" % (relative_path, package), True)
- return False
-
-
-def package_file_exists(package, relative_path):
- package_dir = _get_package_dir(package)
- file_path = os.path.join(package_dir, relative_path)
-
- if os.path.exists(package_dir):
- result = _regular_file_exists(package, relative_path)
- if result:
- return result
-
- if int(sublime.version()) >= 3000:
- return _zip_file_exists(package, relative_path)
-
- return False
-
-
-def _get_package_dir(package):
- """:return: The full filesystem path to the package directory"""
-
- return os.path.join(sublime.packages_path(), package)
-
-
-def _read_regular_file(package, relative_path, binary=False, debug=False):
- package_dir = _get_package_dir(package)
- file_path = os.path.join(package_dir, relative_path)
- try:
- with open_compat(file_path, ('rb' if binary else 'r')) as f:
- return read_compat(f)
-
- except (FileNotFoundError) as e:
- if debug:
- console_write(u"Unable to find file %s in the package folder for %s" % (relative_path, package), True)
- return False
-
-
-def _read_zip_file(package, relative_path, binary=False, debug=False):
- zip_path = os.path.join(sublime.installed_packages_path(),
- package + '.sublime-package')
-
- if not os.path.exists(zip_path):
- if debug:
- console_write(u"Unable to find a sublime-package file for %s" % package, True)
- return False
-
- try:
- package_zip = zipfile.ZipFile(zip_path, 'r')
-
- except (zipfile.BadZipfile):
- console_write(u'An error occurred while trying to unzip the sublime-package file for %s.' % package, True)
- return False
-
- try:
- contents = package_zip.read(relative_path)
- if not binary:
- contents = contents.decode('utf-8')
- return contents
-
- except (KeyError) as e:
- if debug:
- console_write(u"Unable to find file %s in the sublime-package file for %s" % (relative_path, package), True)
-
- except (IOError) as e:
- message = unicode_from_os(e)
- console_write(u'Unable to read file from sublime-package file for %s due to an invalid filename' % package, True)
-
- except (UnicodeDecodeError):
- console_write(u'Unable to read file from sublime-package file for %s due to an invalid filename or character encoding issue' % package, True)
-
- return False
-
-
-def _regular_file_exists(package, relative_path):
- package_dir = _get_package_dir(package)
- file_path = os.path.join(package_dir, relative_path)
- return os.path.exists(file_path)
-
-
-def _zip_file_exists(package, relative_path):
- zip_path = os.path.join(sublime.installed_packages_path(),
- package + '.sublime-package')
-
- if not os.path.exists(zip_path):
- return False
-
- try:
- package_zip = zipfile.ZipFile(zip_path, 'r')
-
- except (zipfile.BadZipfile):
- console_write(u'An error occurred while trying to unzip the sublime-package file for %s.' % package_name, True)
- return False
-
- try:
- package_zip.getinfo(relative_path)
- return True
-
- except (KeyError) as e:
- return False
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/package_manager.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/package_manager.py
deleted file mode 100644
index 03e4120..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/package_manager.py
+++ /dev/null
@@ -1,1024 +0,0 @@
-import sys
-import os
-import re
-import socket
-import json
-import time
-import zipfile
-import shutil
-from fnmatch import fnmatch
-import datetime
-import tempfile
-import locale
-
-try:
- # Python 3
- from urllib.parse import urlencode, urlparse
- import compileall
- str_cls = str
-except (ImportError):
- # Python 2
- from urllib import urlencode
- from urlparse import urlparse
- str_cls = unicode
-
-import sublime
-
-from .show_error import show_error
-from .console_write import console_write
-from .open_compat import open_compat, read_compat
-from .unicode import unicode_from_os
-from .clear_directory import clear_directory
-from .cache import (clear_cache, set_cache, get_cache, merge_cache_under_settings,
- merge_cache_over_settings, set_cache_under_settings, set_cache_over_settings)
-from .versions import version_comparable, version_sort
-from .downloaders.background_downloader import BackgroundDownloader
-from .downloaders.downloader_exception import DownloaderException
-from .providers.provider_exception import ProviderException
-from .clients.client_exception import ClientException
-from .download_manager import downloader
-from .providers.channel_provider import ChannelProvider
-from .upgraders.git_upgrader import GitUpgrader
-from .upgraders.hg_upgrader import HgUpgrader
-from .package_io import read_package_file
-from .providers import CHANNEL_PROVIDERS, REPOSITORY_PROVIDERS
-from . import __version__
-
-
-class PackageManager():
- """
- Allows downloading, creating, installing, upgrading, and deleting packages
-
- Delegates metadata retrieval to the CHANNEL_PROVIDERS classes.
- Uses VcsUpgrader-based classes for handling git and hg repositories in the
- Packages folder. Downloader classes are utilized to fetch contents of URLs.
-
- Also handles displaying package messaging, and sending usage information to
- the usage server.
- """
-
- def __init__(self):
- # Here we manually copy the settings since sublime doesn't like
- # code accessing settings from threads
- self.settings = {}
- settings = sublime.load_settings('Package Control.sublime-settings')
- for setting in ['timeout', 'repositories', 'channels',
- 'package_name_map', 'dirs_to_ignore', 'files_to_ignore',
- 'package_destination', 'cache_length', 'auto_upgrade',
- 'files_to_ignore_binary', 'files_to_keep', 'dirs_to_keep',
- 'git_binary', 'git_update_command', 'hg_binary',
- 'hg_update_command', 'http_proxy', 'https_proxy',
- 'auto_upgrade_ignore', 'auto_upgrade_frequency',
- 'submit_usage', 'submit_url', 'renamed_packages',
- 'files_to_include', 'files_to_include_binary', 'certs',
- 'ignore_vcs_packages', 'proxy_username', 'proxy_password',
- 'debug', 'user_agent', 'http_cache', 'http_cache_length',
- 'install_prereleases', 'openssl_binary']:
- if settings.get(setting) == None:
- continue
- self.settings[setting] = settings.get(setting)
-
- # https_proxy will inherit from http_proxy unless it is set to a
- # string value or false
- no_https_proxy = self.settings.get('https_proxy') in ["", None]
- if no_https_proxy and self.settings.get('http_proxy'):
- self.settings['https_proxy'] = self.settings.get('http_proxy')
- if self.settings.get('https_proxy') == False:
- self.settings['https_proxy'] = ''
-
- self.settings['platform'] = sublime.platform()
- self.settings['version'] = sublime.version()
-
- # Use the cache to see if settings have changed since the last
- # time the package manager was created, and clearing any cached
- # values if they have.
- previous_settings = get_cache('filtered_settings', {})
-
- # Reduce the settings down to exclude channel info since that will
- # make the settings always different
- filtered_settings = self.settings.copy()
- for key in ['repositories', 'channels', 'package_name_map', 'cache']:
- if key in filtered_settings:
- del filtered_settings[key]
-
- if filtered_settings != previous_settings and previous_settings != {}:
- console_write(u'Settings change detected, clearing cache', True)
- clear_cache()
- set_cache('filtered_settings', filtered_settings)
-
- def get_metadata(self, package):
- """
- Returns the package metadata for an installed package
-
- :return:
- A dict with the keys:
- version
- url
- description
- or an empty dict on error
- """
-
- try:
- debug = self.settings.get('debug')
- metadata_json = read_package_file(package, 'package-metadata.json', debug=debug)
- if metadata_json:
- return json.loads(metadata_json)
-
- except (IOError, ValueError) as e:
- pass
-
- return {}
-
- def list_repositories(self):
- """
- Returns a master list of all repositories pulled from all sources
-
- These repositories come from the channels specified in the
- "channels" setting, plus any repositories listed in the
- "repositories" setting.
-
- :return:
- A list of all available repositories
- """
-
- cache_ttl = self.settings.get('cache_length')
-
- repositories = self.settings.get('repositories')[:]
- channels = self.settings.get('channels')
- for channel in channels:
- channel = channel.strip()
-
- # Caches various info from channels for performance
- cache_key = channel + '.repositories'
- channel_repositories = get_cache(cache_key)
-
- merge_cache_under_settings(self, 'package_name_map', channel)
- merge_cache_under_settings(self, 'renamed_packages', channel)
- merge_cache_under_settings(self, 'unavailable_packages', channel, list_=True)
-
- # If any of the info was not retrieved from the cache, we need to
- # grab the channel to get it
- if channel_repositories == None:
-
- for provider_class in CHANNEL_PROVIDERS:
- if provider_class.match_url(channel):
- provider = provider_class(channel, self.settings)
- break
-
- try:
- channel_repositories = provider.get_repositories()
- set_cache(cache_key, channel_repositories, cache_ttl)
-
- for repo in channel_repositories:
- repo_packages = provider.get_packages(repo)
- packages_cache_key = repo + '.packages'
- set_cache(packages_cache_key, repo_packages, cache_ttl)
-
- # Have the local name map override the one from the channel
- name_map = provider.get_name_map()
- set_cache_under_settings(self, 'package_name_map', channel, name_map, cache_ttl)
-
- renamed_packages = provider.get_renamed_packages()
- set_cache_under_settings(self, 'renamed_packages', channel, renamed_packages, cache_ttl)
-
- unavailable_packages = provider.get_unavailable_packages()
- set_cache_under_settings(self, 'unavailable_packages', channel, unavailable_packages, cache_ttl, list_=True)
-
- provider_certs = provider.get_certs()
- certs = self.settings.get('certs', {}).copy()
- certs.update(provider_certs)
- # Save the master list of certs, used by downloaders/cert_provider.py
- set_cache('*.certs', certs, cache_ttl)
-
- except (DownloaderException, ClientException, ProviderException) as e:
- console_write(e, True)
- continue
-
- repositories.extend(channel_repositories)
- return [repo.strip() for repo in repositories]
-
- def list_available_packages(self):
- """
- Returns a master list of every available package from all sources
-
- :return:
- A dict in the format:
- {
- 'Package Name': {
- # Package details - see example-packages.json for format
- },
- ...
- }
- """
-
- if self.settings.get('debug'):
- console_write(u"Fetching list of available packages", True)
- console_write(u" Platform: %s-%s" % (sublime.platform(),sublime.arch()))
- console_write(u" Sublime Text Version: %s" % sublime.version())
- console_write(u" Package Control Version: %s" % __version__)
-
- cache_ttl = self.settings.get('cache_length')
- repositories = self.list_repositories()
- packages = {}
- bg_downloaders = {}
- active = []
- repos_to_download = []
- name_map = self.settings.get('package_name_map', {})
-
- # Repositories are run in reverse order so that the ones first
- # on the list will overwrite those last on the list
- for repo in repositories[::-1]:
- cache_key = repo + '.packages'
- repository_packages = get_cache(cache_key)
-
- if repository_packages != None:
- packages.update(repository_packages)
-
- else:
- domain = urlparse(repo).hostname
- if domain not in bg_downloaders:
- bg_downloaders[domain] = BackgroundDownloader(
- self.settings, REPOSITORY_PROVIDERS)
- bg_downloaders[domain].add_url(repo)
- repos_to_download.append(repo)
-
- for bg_downloader in list(bg_downloaders.values()):
- bg_downloader.start()
- active.append(bg_downloader)
-
- # Wait for all of the downloaders to finish
- while active:
- bg_downloader = active.pop()
- bg_downloader.join()
-
- # Grabs the results and stuff it all in the cache
- for repo in repos_to_download:
- domain = urlparse(repo).hostname
- bg_downloader = bg_downloaders[domain]
- provider = bg_downloader.get_provider(repo)
-
- # Allow name mapping of packages for schema version < 2.0
- repository_packages = {}
- for name, info in provider.get_packages():
- name = name_map.get(name, name)
- info['name'] = name
- repository_packages[name] = info
-
- # Display errors we encountered while fetching package info
- for url, exception in provider.get_failed_sources():
- console_write(exception, True)
- for name, exception in provider.get_broken_packages():
- console_write(exception, True)
-
- cache_key = repo + '.packages'
- set_cache(cache_key, repository_packages, cache_ttl)
- packages.update(repository_packages)
-
- renamed_packages = provider.get_renamed_packages()
- set_cache_under_settings(self, 'renamed_packages', repo, renamed_packages, cache_ttl)
-
- unavailable_packages = provider.get_unavailable_packages()
- set_cache_under_settings(self, 'unavailable_packages', repo, unavailable_packages, cache_ttl, list_=True)
-
- return packages
-
- def list_packages(self, unpacked_only=False):
- """
- :param unpacked_only:
- Only list packages that are not inside of .sublime-package files
-
- :return: A list of all installed, non-default, package names
- """
-
- package_names = os.listdir(sublime.packages_path())
- package_names = [path for path in package_names if
- os.path.isdir(os.path.join(sublime.packages_path(), path))]
-
- if int(sublime.version()) > 3000 and unpacked_only == False:
- package_files = os.listdir(sublime.installed_packages_path())
- package_names += [f.replace('.sublime-package', '') for f in package_files if re.search('\.sublime-package$', f) != None]
-
- # Ignore things to be deleted
- ignored = ['User']
- for package in package_names:
- cleanup_file = os.path.join(sublime.packages_path(), package,
- 'package-control.cleanup')
- if os.path.exists(cleanup_file):
- ignored.append(package)
-
- packages = list(set(package_names) - set(ignored) -
- set(self.list_default_packages()))
- packages = sorted(packages, key=lambda s: s.lower())
-
- return packages
-
- def list_all_packages(self):
- """ :return: A list of all installed package names, including default packages"""
-
- packages = self.list_default_packages() + self.list_packages()
- packages = sorted(packages, key=lambda s: s.lower())
- return packages
-
- def list_default_packages(self):
- """ :return: A list of all default package names"""
-
- if int(sublime.version()) > 3000:
- bundled_packages_path = os.path.join(os.path.dirname(sublime.executable_path()),
- 'Packages')
- files = os.listdir(bundled_packages_path)
-
- else:
- files = os.listdir(os.path.join(os.path.dirname(
- sublime.packages_path()), 'Pristine Packages'))
- files = list(set(files) - set(os.listdir(
- sublime.installed_packages_path())))
- packages = [file.replace('.sublime-package', '') for file in files]
- packages = sorted(packages, key=lambda s: s.lower())
- return packages
-
- def get_package_dir(self, package):
- """:return: The full filesystem path to the package directory"""
-
- return os.path.join(sublime.packages_path(), package)
-
- def get_mapped_name(self, package):
- """:return: The name of the package after passing through mapping rules"""
-
- return self.settings.get('package_name_map', {}).get(package, package)
-
- def create_package(self, package_name, package_destination,
- binary_package=False):
- """
- Creates a .sublime-package file from the running Packages directory
-
- :param package_name:
- The package to create a .sublime-package file for
-
- :param package_destination:
- The full filesystem path of the directory to save the new
- .sublime-package file in.
-
- :param binary_package:
- If the created package should follow the binary package include/
- exclude patterns from the settings. These normally include a setup
- to exclude .py files and include .pyc files, but that can be
- changed via settings.
-
- :return: bool if the package file was successfully created
- """
-
- package_dir = self.get_package_dir(package_name)
-
- if not os.path.exists(package_dir):
- show_error(u'The folder for the package name specified, %s, does not exist in %s' % (
- package_name, sublime.packages_path()))
- return False
-
- package_filename = package_name + '.sublime-package'
- package_path = os.path.join(package_destination,
- package_filename)
-
- if not os.path.exists(sublime.installed_packages_path()):
- os.mkdir(sublime.installed_packages_path())
-
- if os.path.exists(package_path):
- os.remove(package_path)
-
- try:
- package_file = zipfile.ZipFile(package_path, "w",
- compression=zipfile.ZIP_DEFLATED)
- except (OSError, IOError) as e:
- show_error(u'An error occurred creating the package file %s in %s.\n\n%s' % (
- package_filename, package_destination, unicode_from_os(e)))
- return False
-
- if int(sublime.version()) >= 3000:
- compileall.compile_dir(package_dir, quiet=True, legacy=True, optimize=2)
-
- dirs_to_ignore = self.settings.get('dirs_to_ignore', [])
- if not binary_package:
- files_to_ignore = self.settings.get('files_to_ignore', [])
- files_to_include = self.settings.get('files_to_include', [])
- else:
- files_to_ignore = self.settings.get('files_to_ignore_binary', [])
- files_to_include = self.settings.get('files_to_include_binary', [])
-
- slash = '\\' if os.name == 'nt' else '/'
- trailing_package_dir = package_dir + slash if package_dir[-1] != slash else package_dir
- package_dir_regex = re.compile('^' + re.escape(trailing_package_dir))
- for root, dirs, files in os.walk(package_dir):
- [dirs.remove(dir_) for dir_ in dirs if dir_ in dirs_to_ignore]
- paths = dirs
- paths.extend(files)
- for path in paths:
- full_path = os.path.join(root, path)
- relative_path = re.sub(package_dir_regex, '', full_path)
-
- ignore_matches = [fnmatch(relative_path, p) for p in files_to_ignore]
- include_matches = [fnmatch(relative_path, p) for p in files_to_include]
- if any(ignore_matches) and not any(include_matches):
- continue
-
- if os.path.isdir(full_path):
- continue
- package_file.write(full_path, relative_path)
-
- package_file.close()
-
- return True
-
- def install_package(self, package_name):
- """
- Downloads and installs (or upgrades) a package
-
- Uses the self.list_available_packages() method to determine where to
- retrieve the package file from.
-
- The install process consists of:
-
- 1. Finding the package
- 2. Downloading the .sublime-package/.zip file
- 3. Extracting the package file
- 4. Showing install/upgrade messaging
- 5. Submitting usage info
- 6. Recording that the package is installed
-
- :param package_name:
- The package to download and install
-
- :return: bool if the package was successfully installed
- """
-
- packages = self.list_available_packages()
-
- is_available = package_name in list(packages.keys())
- is_unavailable = package_name in self.settings.get('unavailable_packages', [])
-
- if is_unavailable and not is_available:
- console_write(u'The package "%s" is not available on this platform.' % package_name, True)
- return False
-
- if not is_available:
- show_error(u'The package specified, %s, is not available' % package_name)
- return False
-
- url = packages[package_name]['download']['url']
- package_filename = package_name + '.sublime-package'
-
- tmp_dir = tempfile.mkdtemp()
-
- try:
- # This is refers to the zipfile later on, so we define it here so we can
- # close the zip file if set during the finally clause
- package_zip = None
-
- tmp_package_path = os.path.join(tmp_dir, package_filename)
-
- unpacked_package_dir = self.get_package_dir(package_name)
- package_path = os.path.join(sublime.installed_packages_path(),
- package_filename)
- pristine_package_path = os.path.join(os.path.dirname(
- sublime.packages_path()), 'Pristine Packages', package_filename)
-
- if os.path.exists(os.path.join(unpacked_package_dir, '.git')):
- if self.settings.get('ignore_vcs_packages'):
- show_error(u'Skipping git package %s since the setting ignore_vcs_packages is set to true' % package_name)
- return False
- return GitUpgrader(self.settings['git_binary'],
- self.settings['git_update_command'], unpacked_package_dir,
- self.settings['cache_length'], self.settings['debug']).run()
- elif os.path.exists(os.path.join(unpacked_package_dir, '.hg')):
- if self.settings.get('ignore_vcs_packages'):
- show_error(u'Skipping hg package %s since the setting ignore_vcs_packages is set to true' % package_name)
- return False
- return HgUpgrader(self.settings['hg_binary'],
- self.settings['hg_update_command'], unpacked_package_dir,
- self.settings['cache_length'], self.settings['debug']).run()
-
- old_version = self.get_metadata(package_name).get('version')
- is_upgrade = old_version != None
-
- # Download the sublime-package or zip file
- try:
- with downloader(url, self.settings) as manager:
- package_bytes = manager.fetch(url, 'Error downloading package.')
- except (DownloaderException) as e:
- console_write(e, True)
- show_error(u'Unable to download %s. Please view the console for more details.' % package_name)
- return False
-
- with open_compat(tmp_package_path, "wb") as package_file:
- package_file.write(package_bytes)
-
- # Try to open it as a zip file
- try:
- package_zip = zipfile.ZipFile(tmp_package_path, 'r')
- except (zipfile.BadZipfile):
- show_error(u'An error occurred while trying to unzip the package file for %s. Please try installing the package again.' % package_name)
- return False
-
- # Scan through the root level of the zip file to gather some info
- root_level_paths = []
- last_path = None
- for path in package_zip.namelist():
- try:
- if not isinstance(path, str_cls):
- path = path.decode('utf-8', 'strict')
- except (UnicodeDecodeError):
- console_write(u'One or more of the zip file entries in %s is not encoded using UTF-8, aborting' % package_name, True)
- return False
-
- last_path = path
-
- if path.find('/') in [len(path) - 1, -1]:
- root_level_paths.append(path)
- # Make sure there are no paths that look like security vulnerabilities
- if path[0] == '/' or path.find('../') != -1 or path.find('..\\') != -1:
- show_error(u'The package specified, %s, contains files outside of the package dir and cannot be safely installed.' % package_name)
- return False
-
- if last_path and len(root_level_paths) == 0:
- root_level_paths.append(last_path[0:last_path.find('/') + 1])
-
- # If there is only a single directory at the top leve, the file
- # is most likely a zip from BitBucket or GitHub and we need
- # to skip the top-level dir when extracting
- skip_root_dir = len(root_level_paths) == 1 and \
- root_level_paths[0].endswith('/')
-
- no_package_file_zip_path = '.no-sublime-package'
- if skip_root_dir:
- no_package_file_zip_path = root_level_paths[0] + no_package_file_zip_path
-
- # If we should extract unpacked or as a .sublime-package file
- unpack = True
-
- # By default, ST3 prefers .sublime-package files since this allows
- # overriding files in the Packages/{package_name}/ folder
- if int(sublime.version()) >= 3000:
- unpack = False
-
- # If the package maintainer doesn't want a .sublime-package
- try:
- package_zip.getinfo(no_package_file_zip_path)
- unpack = True
- except (KeyError):
- pass
-
- # If we already have a package-metadata.json file in
- # Packages/{package_name}/, the only way to successfully upgrade
- # will be to unpack
- unpacked_metadata_file = os.path.join(unpacked_package_dir,
- 'package-metadata.json')
- if os.path.exists(unpacked_metadata_file):
- unpack = True
-
- # If we determined it should be unpacked, we extract directly
- # into the Packages/{package_name}/ folder
- if unpack:
- self.backup_package_dir(package_name)
- package_dir = unpacked_package_dir
-
- # Otherwise we go into a temp dir since we will be creating a
- # new .sublime-package file later
- else:
- tmp_working_dir = os.path.join(tmp_dir, 'working')
- os.mkdir(tmp_working_dir)
- package_dir = tmp_working_dir
-
- package_metadata_file = os.path.join(package_dir,
- 'package-metadata.json')
-
- if not os.path.exists(package_dir):
- os.mkdir(package_dir)
-
- os.chdir(package_dir)
-
- # Here we don't use .extractall() since it was having issues on OS X
- overwrite_failed = False
- extracted_paths = []
- for path in package_zip.namelist():
- dest = path
-
- try:
- if not isinstance(dest, str_cls):
- dest = dest.decode('utf-8', 'strict')
- except (UnicodeDecodeError):
- console_write(u'One or more of the zip file entries in %s is not encoded using UTF-8, aborting' % package_name, True)
- return False
-
- if os.name == 'nt':
- regex = ':|\*|\?|"|<|>|\|'
- if re.search(regex, dest) != None:
- console_write(u'Skipping file from package named %s due to an invalid filename' % package_name, True)
- continue
-
- # If there was only a single directory in the package, we remove
- # that folder name from the paths as we extract entries
- if skip_root_dir:
- dest = dest[len(root_level_paths[0]):]
-
- if os.name == 'nt':
- dest = dest.replace('/', '\\')
- else:
- dest = dest.replace('\\', '/')
-
- dest = os.path.join(package_dir, dest)
-
- def add_extracted_dirs(dir_):
- while dir_ not in extracted_paths:
- extracted_paths.append(dir_)
- dir_ = os.path.dirname(dir_)
- if dir_ == package_dir:
- break
-
- if path.endswith('/'):
- if not os.path.exists(dest):
- os.makedirs(dest)
- add_extracted_dirs(dest)
- else:
- dest_dir = os.path.dirname(dest)
- if not os.path.exists(dest_dir):
- os.makedirs(dest_dir)
- add_extracted_dirs(dest_dir)
- extracted_paths.append(dest)
- try:
- open_compat(dest, 'wb').write(package_zip.read(path))
- except (IOError) as e:
- message = unicode_from_os(e)
- if re.search('[Ee]rrno 13', message):
- overwrite_failed = True
- break
- console_write(u'Skipping file from package named %s due to an invalid filename' % package_name, True)
-
- except (UnicodeDecodeError):
- console_write(u'Skipping file from package named %s due to an invalid filename' % package_name, True)
-
- package_zip.close()
- package_zip = None
-
- # If upgrading failed, queue the package to upgrade upon next start
- if overwrite_failed:
- reinstall_file = os.path.join(package_dir, 'package-control.reinstall')
- open_compat(reinstall_file, 'w').close()
-
- # Don't delete the metadata file, that way we have it
- # when the reinstall happens, and the appropriate
- # usage info can be sent back to the server
- clear_directory(package_dir, [reinstall_file, package_metadata_file])
-
- show_error(u'An error occurred while trying to upgrade %s. Please restart Sublime Text to finish the upgrade.' % package_name)
- return False
-
- # Here we clean out any files that were not just overwritten. It is ok
- # if there is an error removing a file. The next time there is an
- # upgrade, it should be cleaned out successfully then.
- clear_directory(package_dir, extracted_paths)
-
- self.print_messages(package_name, package_dir, is_upgrade, old_version)
-
- with open_compat(package_metadata_file, 'w') as f:
- metadata = {
- "version": packages[package_name]['download']['version'],
- "url": packages[package_name]['homepage'],
- "description": packages[package_name]['description']
- }
- json.dump(metadata, f)
-
- # Submit install and upgrade info
- if is_upgrade:
- params = {
- 'package': package_name,
- 'operation': 'upgrade',
- 'version': packages[package_name]['download']['version'],
- 'old_version': old_version
- }
- else:
- params = {
- 'package': package_name,
- 'operation': 'install',
- 'version': packages[package_name]['download']['version']
- }
- self.record_usage(params)
-
- # Record the install in the settings file so that you can move
- # settings across computers and have the same packages installed
- def save_package():
- settings = sublime.load_settings('Package Control.sublime-settings')
- installed_packages = settings.get('installed_packages', [])
- if not installed_packages:
- installed_packages = []
- installed_packages.append(package_name)
- installed_packages = list(set(installed_packages))
- installed_packages = sorted(installed_packages,
- key=lambda s: s.lower())
- settings.set('installed_packages', installed_packages)
- sublime.save_settings('Package Control.sublime-settings')
- sublime.set_timeout(save_package, 1)
-
- # If we didn't extract directly into the Packages/{package_name}/
- # folder, we need to create a .sublime-package file and install it
- if not unpack:
- try:
- # Remove the downloaded file since we are going to overwrite it
- os.remove(tmp_package_path)
- package_zip = zipfile.ZipFile(tmp_package_path, "w",
- compression=zipfile.ZIP_DEFLATED)
- except (OSError, IOError) as e:
- show_error(u'An error occurred creating the package file %s in %s.\n\n%s' % (
- package_filename, tmp_dir, unicode_from_os(e)))
- return False
-
- package_dir_regex = re.compile('^' + re.escape(package_dir))
- for root, dirs, files in os.walk(package_dir):
- paths = dirs
- paths.extend(files)
- for path in paths:
- full_path = os.path.join(root, path)
- relative_path = re.sub(package_dir_regex, '', full_path)
- if os.path.isdir(full_path):
- continue
- package_zip.write(full_path, relative_path)
-
- package_zip.close()
- package_zip = None
-
- if os.path.exists(package_path):
- os.remove(package_path)
- shutil.move(tmp_package_path, package_path)
-
- # We have to remove the pristine package too or else Sublime Text 2
- # will silently delete the package
- if os.path.exists(pristine_package_path):
- os.remove(pristine_package_path)
-
- os.chdir(sublime.packages_path())
- return True
-
- finally:
- # We need to make sure the zipfile is closed to
- # help prevent permissions errors on Windows
- if package_zip:
- package_zip.close()
-
- # Try to remove the tmp dir after a second to make sure
- # a virus scanner is holding a reference to the zipfile
- # after we close it.
- def remove_tmp_dir():
- try:
- shutil.rmtree(tmp_dir)
- except (PermissionError):
- # If we can't remove the tmp dir, don't let an uncaught exception
- # fall through and break the install process
- pass
- sublime.set_timeout(remove_tmp_dir, 1000)
-
- def backup_package_dir(self, package_name):
- """
- Does a full backup of the Packages/{package}/ dir to Backup/
-
- :param package_name:
- The name of the package to back up
-
- :return:
- If the backup succeeded
- """
-
- package_dir = os.path.join(sublime.packages_path(), package_name)
- if not os.path.exists(package_dir):
- return True
-
- try:
- backup_dir = os.path.join(os.path.dirname(
- sublime.packages_path()), 'Backup',
- datetime.datetime.now().strftime('%Y%m%d%H%M%S'))
- if not os.path.exists(backup_dir):
- os.makedirs(backup_dir)
- package_backup_dir = os.path.join(backup_dir, package_name)
- if os.path.exists(package_backup_dir):
- console_write(u"FOLDER %s ALREADY EXISTS!" % package_backup_dir)
- shutil.copytree(package_dir, package_backup_dir)
- return True
-
- except (OSError, IOError) as e:
- show_error(u'An error occurred while trying to backup the package directory for %s.\n\n%s' % (
- package_name, unicode_from_os(e)))
- if os.path.exists(package_backup_dir):
- shutil.rmtree(package_backup_dir)
- return False
-
- def print_messages(self, package, package_dir, is_upgrade, old_version):
- """
- Prints out package install and upgrade messages
-
- The functionality provided by this allows package maintainers to
- show messages to the user when a package is installed, or when
- certain version upgrade occur.
-
- :param package:
- The name of the package the message is for
-
- :param package_dir:
- The full filesystem path to the package directory
-
- :param is_upgrade:
- If the install was actually an upgrade
-
- :param old_version:
- The string version of the package before the upgrade occurred
- """
-
- messages_file = os.path.join(package_dir, 'messages.json')
- if not os.path.exists(messages_file):
- return
-
- messages_fp = open_compat(messages_file, 'r')
- try:
- message_info = json.loads(read_compat(messages_fp))
- except (ValueError):
- console_write(u'Error parsing messages.json for %s' % package, True)
- return
- messages_fp.close()
-
- output = ''
- if not is_upgrade and message_info.get('install'):
- install_messages = os.path.join(package_dir,
- message_info.get('install'))
- message = '\n\n%s:\n%s\n\n ' % (package,
- ('-' * len(package)))
- with open_compat(install_messages, 'r') as f:
- message += read_compat(f).replace('\n', '\n ')
- output += message + '\n'
-
- elif is_upgrade and old_version:
- upgrade_messages = list(set(message_info.keys()) -
- set(['install']))
- upgrade_messages = version_sort(upgrade_messages, reverse=True)
- old_version_cmp = version_comparable(old_version)
-
- for version in upgrade_messages:
- if version_comparable(version) <= old_version_cmp:
- break
- if not output:
- message = '\n\n%s:\n%s\n' % (package,
- ('-' * len(package)))
- output += message
- upgrade_message_path = os.path.join(package_dir,
- message_info.get(version))
- message = '\n '
- with open_compat(upgrade_message_path, 'r') as f:
- message += read_compat(f).replace('\n', '\n ')
- output += message + '\n'
-
- if not output:
- return
-
- def print_to_panel():
- window = sublime.active_window()
-
- views = window.views()
- view = None
- for _view in views:
- if _view.name() == 'Package Control Messages':
- view = _view
- break
-
- if not view:
- view = window.new_file()
- view.set_name('Package Control Messages')
- view.set_scratch(True)
-
- def write(string):
- view.run_command('package_message', {'string': string})
-
- if not view.size():
- view.settings().set("word_wrap", True)
- write('Package Control Messages\n' +
- '========================')
-
- write(output)
- sublime.set_timeout(print_to_panel, 1)
-
- def remove_package(self, package_name):
- """
- Deletes a package
-
- The deletion process consists of:
-
- 1. Deleting the directory (or marking it for deletion if deletion fails)
- 2. Submitting usage info
- 3. Removing the package from the list of installed packages
-
- :param package_name:
- The package to delete
-
- :return: bool if the package was successfully deleted
- """
-
- installed_packages = self.list_packages()
-
- if package_name not in installed_packages:
- show_error(u'The package specified, %s, is not installed' % package_name)
- return False
-
- os.chdir(sublime.packages_path())
-
- # Give Sublime Text some time to ignore the package
- time.sleep(1)
-
- package_filename = package_name + '.sublime-package'
- installed_package_path = os.path.join(sublime.installed_packages_path(),
- package_filename)
- pristine_package_path = os.path.join(os.path.dirname(
- sublime.packages_path()), 'Pristine Packages', package_filename)
- package_dir = self.get_package_dir(package_name)
-
- version = self.get_metadata(package_name).get('version')
-
- try:
- if os.path.exists(installed_package_path):
- os.remove(installed_package_path)
- except (OSError, IOError) as e:
- show_error(u'An error occurred while trying to remove the installed package file for %s.\n\n%s' % (
- package_name, unicode_from_os(e)))
- return False
-
- try:
- if os.path.exists(pristine_package_path):
- os.remove(pristine_package_path)
- except (OSError, IOError) as e:
- show_error(u'An error occurred while trying to remove the pristine package file for %s.\n\n%s' % (
- package_name, unicode_from_os(e)))
- return False
-
- # We don't delete the actual package dir immediately due to a bug
- # in sublime_plugin.py
- can_delete_dir = True
- if not clear_directory(package_dir):
- # If there is an error deleting now, we will mark it for
- # cleanup the next time Sublime Text starts
- open_compat(os.path.join(package_dir, 'package-control.cleanup'),
- 'w').close()
- can_delete_dir = False
-
- params = {
- 'package': package_name,
- 'operation': 'remove',
- 'version': version
- }
- self.record_usage(params)
-
- # Remove the package from the installed packages list
- def clear_package():
- settings = sublime.load_settings('Package Control.sublime-settings')
- installed_packages = settings.get('installed_packages', [])
- if not installed_packages:
- installed_packages = []
- installed_packages.remove(package_name)
- settings.set('installed_packages', installed_packages)
- sublime.save_settings('Package Control.sublime-settings')
- sublime.set_timeout(clear_package, 1)
-
- if can_delete_dir and os.path.exists(package_dir):
- os.rmdir(package_dir)
-
- return True
-
- def record_usage(self, params):
- """
- Submits install, upgrade and delete actions to a usage server
-
- The usage information is currently displayed on the Package Control
- community package list at http://wbond.net/sublime_packages/community
-
- :param params:
- A dict of the information to submit
- """
-
- if not self.settings.get('submit_usage'):
- return
- params['package_control_version'] = \
- self.get_metadata('Package Control').get('version')
- params['sublime_platform'] = self.settings.get('platform')
- params['sublime_version'] = self.settings.get('version')
-
- # For Python 2, we need to explicitly encoding the params
- for param in params:
- if isinstance(params[param], str_cls):
- params[param] = params[param].encode('utf-8')
-
- url = self.settings.get('submit_url') + '?' + urlencode(params)
-
- try:
- with downloader(url, self.settings) as manager:
- result = manager.fetch(url, 'Error submitting usage information.')
- except (DownloaderException) as e:
- console_write(e, True)
- return
-
- try:
- result = json.loads(result.decode('utf-8'))
- if result['result'] != 'success':
- raise ValueError()
- except (ValueError):
- console_write(u'Error submitting usage information for %s' % params['package'], True)
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/package_renamer.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/package_renamer.py
deleted file mode 100644
index 73e83fd..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/package_renamer.py
+++ /dev/null
@@ -1,117 +0,0 @@
-import os
-
-import sublime
-
-from .console_write import console_write
-from .package_io import package_file_exists
-
-
-class PackageRenamer():
- """
- Class to handle renaming packages via the renamed_packages setting
- gathered from channels and repositories.
- """
-
- def load_settings(self):
- """
- Loads the list of installed packages from the
- Package Control.sublime-settings file.
- """
-
- self.settings_file = 'Package Control.sublime-settings'
- self.settings = sublime.load_settings(self.settings_file)
- self.installed_packages = self.settings.get('installed_packages', [])
- if not isinstance(self.installed_packages, list):
- self.installed_packages = []
-
- def rename_packages(self, installer):
- """
- Renames any installed packages that the user has installed.
-
- :param installer:
- An instance of :class:`PackageInstaller`
- """
-
- # Fetch the packages since that will pull in the renamed packages list
- installer.manager.list_available_packages()
- renamed_packages = installer.manager.settings.get('renamed_packages', {})
- if not renamed_packages:
- renamed_packages = {}
-
- # These are packages that have been tracked as installed
- installed_pkgs = self.installed_packages
- # There are the packages actually present on the filesystem
- present_packages = installer.manager.list_packages()
-
- # Rename directories for packages that have changed names
- for package_name in renamed_packages:
- package_dir = os.path.join(sublime.packages_path(), package_name)
- if not package_file_exists(package_name, 'package-metadata.json'):
- continue
-
- new_package_name = renamed_packages[package_name]
- new_package_dir = os.path.join(sublime.packages_path(),
- new_package_name)
-
- changing_case = package_name.lower() == new_package_name.lower()
- case_insensitive_fs = sublime.platform() in ['windows', 'osx']
-
- # Since Windows and OSX use case-insensitive filesystems, we have to
- # scan through the list of installed packages if the rename of the
- # package is just changing the case of it. If we don't find the old
- # name for it, we continue the loop since os.path.exists() will return
- # true due to the case-insensitive nature of the filesystems.
- if case_insensitive_fs and changing_case:
- has_old = False
- for present_package_name in present_packages:
- if present_package_name == package_name:
- has_old = True
- break
- if not has_old:
- continue
-
- if not os.path.exists(new_package_dir) or (case_insensitive_fs and changing_case):
-
- # Windows will not allow you to rename to the same name with
- # a different case, so we work around that with a temporary name
- if os.name == 'nt' and changing_case:
- temp_package_name = '__' + new_package_name
- temp_package_dir = os.path.join(sublime.packages_path(),
- temp_package_name)
- os.rename(package_dir, temp_package_dir)
- package_dir = temp_package_dir
-
- os.rename(package_dir, new_package_dir)
- installed_pkgs.append(new_package_name)
-
- console_write(u'Renamed %s to %s' % (package_name, new_package_name), True)
-
- else:
- installer.manager.remove_package(package_name)
- message_string = u'Removed %s since package with new name (%s) already exists' % (
- package_name, new_package_name)
- console_write(message_string, True)
-
- try:
- installed_pkgs.remove(package_name)
- except (ValueError):
- pass
-
- sublime.set_timeout(lambda: self.save_packages(installed_pkgs), 10)
-
- def save_packages(self, installed_packages):
- """
- Saves the list of installed packages (after having been appropriately
- renamed)
-
- :param installed_packages:
- The new list of installed packages
- """
-
- installed_packages = list(set(installed_packages))
- installed_packages = sorted(installed_packages,
- key=lambda s: s.lower())
-
- if installed_packages != self.installed_packages:
- self.settings.set('installed_packages', installed_packages)
- sublime.save_settings(self.settings_file)
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/preferences_filename.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/preferences_filename.py
deleted file mode 100644
index 7091dd9..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/preferences_filename.py
+++ /dev/null
@@ -1,11 +0,0 @@
-import sublime
-
-
-def preferences_filename():
- """
- :return: The appropriate settings filename based on the version of Sublime Text
- """
-
- if int(sublime.version()) >= 2174:
- return 'Preferences.sublime-settings'
- return 'Global.sublime-settings'
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/providers/__init__.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/providers/__init__.py
deleted file mode 100644
index cfea3bd..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/providers/__init__.py
+++ /dev/null
@@ -1,12 +0,0 @@
-from .bitbucket_repository_provider import BitBucketRepositoryProvider
-from .github_repository_provider import GitHubRepositoryProvider
-from .github_user_provider import GitHubUserProvider
-from .repository_provider import RepositoryProvider
-
-from .channel_provider import ChannelProvider
-
-
-REPOSITORY_PROVIDERS = [BitBucketRepositoryProvider, GitHubRepositoryProvider,
- GitHubUserProvider, RepositoryProvider]
-
-CHANNEL_PROVIDERS = [ChannelProvider]
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/providers/bitbucket_repository_provider.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/providers/bitbucket_repository_provider.py
deleted file mode 100644
index b5d603f..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/providers/bitbucket_repository_provider.py
+++ /dev/null
@@ -1,163 +0,0 @@
-import re
-
-from ..clients.bitbucket_client import BitBucketClient
-from ..downloaders.downloader_exception import DownloaderException
-from ..clients.client_exception import ClientException
-from .provider_exception import ProviderException
-
-
-class BitBucketRepositoryProvider():
- """
- Allows using a public BitBucket repository as the source for a single package.
- For legacy purposes, this can also be treated as the source for a Package
- Control "repository".
-
- :param repo:
- The public web URL to the BitBucket repository. Should be in the format
- `https://bitbucket.org/user/package`.
-
- :param settings:
- A dict containing at least the following fields:
- `cache_length`,
- `debug`,
- `timeout`,
- `user_agent`
- Optional fields:
- `http_proxy`,
- `https_proxy`,
- `proxy_username`,
- `proxy_password`,
- `query_string_params`
- `install_prereleases`
- """
-
- def __init__(self, repo, settings):
- self.cache = {}
- self.repo = repo
- self.settings = settings
- self.failed_sources = {}
-
- @classmethod
- def match_url(cls, repo):
- """Indicates if this provider can handle the provided repo"""
-
- return re.search('^https?://bitbucket.org/([^/]+/[^/]+)/?$', repo) != None
-
- def prefetch(self):
- """
- Go out and perform HTTP operations, caching the result
-
- :raises:
- DownloaderException: when there is an issue download package info
- ClientException: when there is an issue parsing package info
- """
-
- [name for name, info in self.get_packages()]
-
- def get_failed_sources(self):
- """
- List of any URLs that could not be accessed while accessing this repository
-
- :return:
- A generator of ("https://bitbucket.org/user/repo", Exception()) tuples
- """
-
- return self.failed_sources.items()
-
- def get_broken_packages(self):
- """
- For API-compatibility with RepositoryProvider
- """
-
- return {}.items()
-
- def get_packages(self, invalid_sources=None):
- """
- Uses the BitBucket API to construct necessary info for a package
-
- :param invalid_sources:
- A list of URLs that should be ignored
-
- :raises:
- DownloaderException: when there is an issue download package info
- ClientException: when there is an issue parsing package info
-
- :return:
- A generator of
- (
- 'Package Name',
- {
- 'name': name,
- 'description': description,
- 'author': author,
- 'homepage': homepage,
- 'last_modified': last modified date,
- 'download': {
- 'url': url,
- 'date': date,
- 'version': version
- },
- 'previous_names': [],
- 'labels': [],
- 'sources': [the repo URL],
- 'readme': url,
- 'issues': url,
- 'donate': url,
- 'buy': None
- }
- )
- tuples
- """
-
- if 'get_packages' in self.cache:
- for key, value in self.cache['get_packages'].items():
- yield (key, value)
- return
-
- client = BitBucketClient(self.settings)
-
- if invalid_sources != None and self.repo in invalid_sources:
- raise StopIteration()
-
- try:
- repo_info = client.repo_info(self.repo)
- download = client.download_info(self.repo)
-
- name = repo_info['name']
- details = {
- 'name': name,
- 'description': repo_info['description'],
- 'homepage': repo_info['homepage'],
- 'author': repo_info['author'],
- 'last_modified': download.get('date'),
- 'download': download,
- 'previous_names': [],
- 'labels': [],
- 'sources': [self.repo],
- 'readme': repo_info['readme'],
- 'issues': repo_info['issues'],
- 'donate': repo_info['donate'],
- 'buy': None
- }
- self.cache['get_packages'] = {name: details}
- yield (name, details)
-
- except (DownloaderException, ClientException, ProviderException) as e:
- self.failed_sources[self.repo] = e
- self.cache['get_packages'] = {}
- raise StopIteration()
-
- def get_renamed_packages(self):
- """For API-compatibility with RepositoryProvider"""
-
- return {}
-
- def get_unavailable_packages(self):
- """
- Method for compatibility with RepositoryProvider class. These providers
- are based on API calls, and thus do not support different platform
- downloads, making it impossible for there to be unavailable packages.
-
- :return: An empty list
- """
- return []
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/providers/channel_provider.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/providers/channel_provider.py
deleted file mode 100644
index 5543bdc..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/providers/channel_provider.py
+++ /dev/null
@@ -1,312 +0,0 @@
-import json
-import os
-import re
-
-try:
- # Python 3
- from urllib.parse import urlparse
-except (ImportError):
- # Python 2
- from urlparse import urlparse
-
-from ..console_write import console_write
-from .release_selector import ReleaseSelector
-from .provider_exception import ProviderException
-from ..downloaders.downloader_exception import DownloaderException
-from ..clients.client_exception import ClientException
-from ..download_manager import downloader
-
-
-class ChannelProvider(ReleaseSelector):
- """
- Retrieves a channel and provides an API into the information
-
- The current channel/repository infrastructure caches repository info into
- the channel to improve the Package Control client performance. This also
- has the side effect of lessening the load on the GitHub and BitBucket APIs
- and getting around not-infrequent HTTP 503 errors from those APIs.
-
- :param channel:
- The URL of the channel
-
- :param settings:
- A dict containing at least the following fields:
- `cache_length`,
- `debug`,
- `timeout`,
- `user_agent`
- Optional fields:
- `http_proxy`,
- `https_proxy`,
- `proxy_username`,
- `proxy_password`,
- `query_string_params`
- `install_prereleases`
- """
-
- def __init__(self, channel, settings):
- self.channel_info = None
- self.schema_version = 0.0
- self.channel = channel
- self.settings = settings
- self.unavailable_packages = []
-
- @classmethod
- def match_url(cls, channel):
- """Indicates if this provider can handle the provided channel"""
-
- return True
-
- def prefetch(self):
- """
- Go out and perform HTTP operations, caching the result
-
- :raises:
- ProviderException: when an error occurs trying to open a file
- DownloaderException: when an error occurs trying to open a URL
- """
-
- self.fetch()
-
- def fetch(self):
- """
- Retrieves and loads the JSON for other methods to use
-
- :raises:
- ProviderException: when an error occurs with the channel contents
- DownloaderException: when an error occurs trying to open a URL
- """
-
- if self.channel_info != None:
- return
-
- if re.match('https?://', self.channel, re.I):
- with downloader(self.channel, self.settings) as manager:
- channel_json = manager.fetch(self.channel,
- 'Error downloading channel.')
-
- # All other channels are expected to be filesystem paths
- else:
- if not os.path.exists(self.channel):
- raise ProviderException(u'Error, file %s does not exist' % self.channel)
-
- if self.settings.get('debug'):
- console_write(u'Loading %s as a channel' % self.channel, True)
-
- # We open as binary so we get bytes like the DownloadManager
- with open(self.channel, 'rb') as f:
- channel_json = f.read()
-
- try:
- channel_info = json.loads(channel_json.decode('utf-8'))
- except (ValueError):
- raise ProviderException(u'Error parsing JSON from channel %s.' % self.channel)
-
- schema_error = u'Channel %s does not appear to be a valid channel file because ' % self.channel
-
- if 'schema_version' not in channel_info:
- raise ProviderException(u'%s the "schema_version" JSON key is missing.' % schema_error)
-
- try:
- self.schema_version = float(channel_info.get('schema_version'))
- except (ValueError):
- raise ProviderException(u'%s the "schema_version" is not a valid number.' % schema_error)
-
- if self.schema_version not in [1.0, 1.1, 1.2, 2.0]:
- raise ProviderException(u'%s the "schema_version" is not recognized. Must be one of: 1.0, 1.1, 1.2 or 2.0.' % schema_error)
-
- self.channel_info = channel_info
-
- def get_name_map(self):
- """
- :raises:
- ProviderException: when an error occurs with the channel contents
- DownloaderException: when an error occurs trying to open a URL
-
- :return:
- A dict of the mapping for URL slug -> package name
- """
-
- self.fetch()
-
- if self.schema_version >= 2.0:
- return {}
-
- return self.channel_info.get('package_name_map', {})
-
- def get_renamed_packages(self):
- """
- :raises:
- ProviderException: when an error occurs with the channel contents
- DownloaderException: when an error occurs trying to open a URL
-
- :return:
- A dict of the packages that have been renamed
- """
-
- self.fetch()
-
- if self.schema_version >= 2.0:
- return {}
-
- return self.channel_info.get('renamed_packages', {})
-
- def get_repositories(self):
- """
- :raises:
- ProviderException: when an error occurs with the channel contents
- DownloaderException: when an error occurs trying to open a URL
-
- :return:
- A list of the repository URLs
- """
-
- self.fetch()
-
- if 'repositories' not in self.channel_info:
- raise ProviderException(u'Channel %s does not appear to be a valid channel file because the "repositories" JSON key is missing.' % self.channel)
-
- # Determine a relative root so repositories can be defined
- # relative to the location of the channel file.
- if re.match('https?://', self.channel, re.I):
- url_pieces = urlparse(self.channel)
- domain = url_pieces.scheme + '://' + url_pieces.netloc
- path = '/' if url_pieces.path == '' else url_pieces.path
- if path[-1] != '/':
- path = os.path.dirname(path)
- relative_base = domain + path
- else:
- relative_base = os.path.dirname(self.channel) + '/'
-
- output = []
- repositories = self.channel_info.get('repositories', [])
- for repository in repositories:
- if re.match('^\./|\.\./', repository):
- repository = os.path.normpath(relative_base + repository)
- output.append(repository)
-
- return output
-
- def get_certs(self):
- """
- Provides a secure way for distribution of SSL CA certificates
-
- Unfortunately Python does not include a bundle of CA certs with urllib
- to perform SSL certificate validation. To circumvent this issue,
- Package Control acts as a distributor of the CA certs for all HTTPS
- URLs of package downloads.
-
- The default channel scrapes and caches info about all packages
- periodically, and in the process it checks the CA certs for all of
- the HTTPS URLs listed in the repositories. The contents of the CA cert
- files are then hashed, and the CA cert is stored in a filename with
- that hash. This is a fingerprint to ensure that Package Control has
- the appropriate CA cert for a domain name.
-
- Next, the default channel file serves up a JSON object of the domain
- names and the hashes of their current CA cert files. If Package Control
- does not have the appropriate hash for a domain, it may retrieve it
- from the channel server. To ensure that Package Control is talking to
- a trusted authority to get the CA certs from, the CA cert for
- sublime.wbond.net is bundled with Package Control. Then when downloading
- the channel file, Package Control can ensure that the channel file's
- SSL certificate is valid, thus ensuring the resulting CA certs are
- legitimate.
-
- As a matter of optimization, the distribution of Package Control also
- includes the current CA certs for all known HTTPS domains that are
- included in the channel, as of the time when Package Control was
- last released.
-
- :raises:
- ProviderException: when an error occurs with the channel contents
- DownloaderException: when an error occurs trying to open a URL
-
- :return:
- A dict of {'Domain Name': ['cert_file_hash', 'cert_file_download_url']}
- """
-
- self.fetch()
-
- return self.channel_info.get('certs', {})
-
- def get_packages(self, repo):
- """
- Provides access to the repository info that is cached in a channel
-
- :param repo:
- The URL of the repository to get the cached info of
-
- :raises:
- ProviderException: when an error occurs with the channel contents
- DownloaderException: when an error occurs trying to open a URL
-
- :return:
- A dict in the format:
- {
- 'Package Name': {
- 'name': name,
- 'description': description,
- 'author': author,
- 'homepage': homepage,
- 'last_modified': last modified date,
- 'download': {
- 'url': url,
- 'date': date,
- 'version': version
- },
- 'previous_names': [old_name, ...],
- 'labels': [label, ...],
- 'readme': url,
- 'issues': url,
- 'donate': url,
- 'buy': url
- },
- ...
- }
- """
-
- self.fetch()
-
- # The 2.0 channel schema renamed the key cached package info was
- # stored under in order to be more clear to new users.
- packages_key = 'packages_cache' if self.schema_version >= 2.0 else 'packages'
-
- if self.channel_info.get(packages_key, False) == False:
- return {}
-
- if self.channel_info[packages_key].get(repo, False) == False:
- return {}
-
- output = {}
- for package in self.channel_info[packages_key][repo]:
- copy = package.copy()
-
- # In schema version 2.0, we store a list of dicts containing info
- # about all available releases. These include "version" and
- # "platforms" keys that are used to pick the download for the
- # current machine.
- if self.schema_version >= 2.0:
- copy = self.select_release(copy)
- else:
- copy = self.select_platform(copy)
-
- if not copy:
- self.unavailable_packages.append(package['name'])
- continue
-
- output[copy['name']] = copy
-
- return output
-
- def get_unavailable_packages(self):
- """
- Provides a list of packages that are unavailable for the current
- platform/architecture that Sublime Text is running on.
-
- This list will be empty unless get_packages() is called first.
-
- :return: A list of package names
- """
-
- return self.unavailable_packages
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/providers/github_repository_provider.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/providers/github_repository_provider.py
deleted file mode 100644
index 158c850..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/providers/github_repository_provider.py
+++ /dev/null
@@ -1,169 +0,0 @@
-import re
-
-from ..clients.github_client import GitHubClient
-from ..downloaders.downloader_exception import DownloaderException
-from ..clients.client_exception import ClientException
-from .provider_exception import ProviderException
-
-
-class GitHubRepositoryProvider():
- """
- Allows using a public GitHub repository as the source for a single package.
- For legacy purposes, this can also be treated as the source for a Package
- Control "repository".
-
- :param repo:
- The public web URL to the GitHub repository. Should be in the format
- `https://github.com/user/package` for the master branch, or
- `https://github.com/user/package/tree/{branch_name}` for any other
- branch.
-
- :param settings:
- A dict containing at least the following fields:
- `cache_length`,
- `debug`,
- `timeout`,
- `user_agent`
- Optional fields:
- `http_proxy`,
- `https_proxy`,
- `proxy_username`,
- `proxy_password`,
- `query_string_params`
- `install_prereleases`
- """
-
- def __init__(self, repo, settings):
- self.cache = {}
- # Clean off the trailing .git to be more forgiving
- self.repo = re.sub('\.git$', '', repo)
- self.settings = settings
- self.failed_sources = {}
-
- @classmethod
- def match_url(cls, repo):
- """Indicates if this provider can handle the provided repo"""
-
- master = re.search('^https?://github.com/[^/]+/[^/]+/?$', repo)
- branch = re.search('^https?://github.com/[^/]+/[^/]+/tree/[^/]+/?$',
- repo)
- return master != None or branch != None
-
- def prefetch(self):
- """
- Go out and perform HTTP operations, caching the result
-
- :raises:
- DownloaderException: when there is an issue download package info
- ClientException: when there is an issue parsing package info
- """
-
- [name for name, info in self.get_packages()]
-
- def get_failed_sources(self):
- """
- List of any URLs that could not be accessed while accessing this repository
-
- :return:
- A generator of ("https://github.com/user/repo", Exception()) tuples
- """
-
- return self.failed_sources.items()
-
- def get_broken_packages(self):
- """
- For API-compatibility with RepositoryProvider
- """
-
- return {}.items()
-
- def get_packages(self, invalid_sources=None):
- """
- Uses the GitHub API to construct necessary info for a package
-
- :param invalid_sources:
- A list of URLs that should be ignored
-
- :raises:
- DownloaderException: when there is an issue download package info
- ClientException: when there is an issue parsing package info
-
- :return:
- A generator of
- (
- 'Package Name',
- {
- 'name': name,
- 'description': description,
- 'author': author,
- 'homepage': homepage,
- 'last_modified': last modified date,
- 'download': {
- 'url': url,
- 'date': date,
- 'version': version
- },
- 'previous_names': [],
- 'labels': [],
- 'sources': [the repo URL],
- 'readme': url,
- 'issues': url,
- 'donate': url,
- 'buy': None
- }
- )
- tuples
- """
-
- if 'get_packages' in self.cache:
- for key, value in self.cache['get_packages'].items():
- yield (key, value)
- return
-
- client = GitHubClient(self.settings)
-
- if invalid_sources != None and self.repo in invalid_sources:
- raise StopIteration()
-
- try:
- repo_info = client.repo_info(self.repo)
- download = client.download_info(self.repo)
-
- name = repo_info['name']
- details = {
- 'name': name,
- 'description': repo_info['description'],
- 'homepage': repo_info['homepage'],
- 'author': repo_info['author'],
- 'last_modified': download.get('date'),
- 'download': download,
- 'previous_names': [],
- 'labels': [],
- 'sources': [self.repo],
- 'readme': repo_info['readme'],
- 'issues': repo_info['issues'],
- 'donate': repo_info['donate'],
- 'buy': None
- }
- self.cache['get_packages'] = {name: details}
- yield (name, details)
-
- except (DownloaderException, ClientException, ProviderException) as e:
- self.failed_sources[self.repo] = e
- self.cache['get_packages'] = {}
- raise StopIteration()
-
- def get_renamed_packages(self):
- """For API-compatibility with RepositoryProvider"""
-
- return {}
-
- def get_unavailable_packages(self):
- """
- Method for compatibility with RepositoryProvider class. These providers
- are based on API calls, and thus do not support different platform
- downloads, making it impossible for there to be unavailable packages.
-
- :return: An empty list
- """
- return []
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/providers/github_user_provider.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/providers/github_user_provider.py
deleted file mode 100644
index 6af60be..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/providers/github_user_provider.py
+++ /dev/null
@@ -1,172 +0,0 @@
-import re
-
-from ..clients.github_client import GitHubClient
-from ..downloaders.downloader_exception import DownloaderException
-from ..clients.client_exception import ClientException
-from .provider_exception import ProviderException
-
-
-class GitHubUserProvider():
- """
- Allows using a GitHub user/organization as the source for multiple packages,
- or in Package Control terminology, a "repository".
-
- :param repo:
- The public web URL to the GitHub user/org. Should be in the format
- `https://github.com/user`.
-
- :param settings:
- A dict containing at least the following fields:
- `cache_length`,
- `debug`,
- `timeout`,
- `user_agent`,
- Optional fields:
- `http_proxy`,
- `https_proxy`,
- `proxy_username`,
- `proxy_password`,
- `query_string_params`
- `install_prereleases`
- """
-
- def __init__(self, repo, settings):
- self.cache = {}
- self.repo = repo
- self.settings = settings
- self.failed_sources = {}
-
- @classmethod
- def match_url(cls, repo):
- """Indicates if this provider can handle the provided repo"""
-
- return re.search('^https?://github.com/[^/]+/?$', repo) != None
-
- def prefetch(self):
- """
- Go out and perform HTTP operations, caching the result
- """
-
- [name for name, info in self.get_packages()]
-
- def get_failed_sources(self):
- """
- List of any URLs that could not be accessed while accessing this repository
-
- :raises:
- DownloaderException: when there is an issue download package info
- ClientException: when there is an issue parsing package info
-
- :return:
- A generator of ("https://github.com/user/repo", Exception()) tuples
- """
-
- return self.failed_sources.items()
-
- def get_broken_packages(self):
- """
- For API-compatibility with RepositoryProvider
- """
-
- return {}.items()
-
- def get_packages(self, invalid_sources=None):
- """
- Uses the GitHub API to construct necessary info for all packages
-
- :param invalid_sources:
- A list of URLs that should be ignored
-
- :raises:
- DownloaderException: when there is an issue download package info
- ClientException: when there is an issue parsing package info
-
- :return:
- A generator of
- (
- 'Package Name',
- {
- 'name': name,
- 'description': description,
- 'author': author,
- 'homepage': homepage,
- 'last_modified': last modified date,
- 'download': {
- 'url': url,
- 'date': date,
- 'version': version
- },
- 'previous_names': [],
- 'labels': [],
- 'sources': [the user URL],
- 'readme': url,
- 'issues': url,
- 'donate': url,
- 'buy': None
- }
- )
- tuples
- """
-
- if 'get_packages' in self.cache:
- for key, value in self.cache['get_packages'].items():
- yield (key, value)
- return
-
- client = GitHubClient(self.settings)
-
- if invalid_sources != None and self.repo in invalid_sources:
- raise StopIteration()
-
- try:
- user_repos = client.user_info(self.repo)
- except (DownloaderException, ClientException, ProviderException) as e:
- self.failed_sources = [self.repo]
- self.cache['get_packages'] = e
- raise e
-
- output = {}
- for repo_info in user_repos:
- try:
- name = repo_info['name']
- repo_url = 'https://github.com/' + repo_info['user_repo']
-
- download = client.download_info(repo_url)
-
- details = {
- 'name': name,
- 'description': repo_info['description'],
- 'homepage': repo_info['homepage'],
- 'author': repo_info['author'],
- 'last_modified': download.get('date'),
- 'download': download,
- 'previous_names': [],
- 'labels': [],
- 'sources': [self.repo],
- 'readme': repo_info['readme'],
- 'issues': repo_info['issues'],
- 'donate': repo_info['donate'],
- 'buy': None
- }
- output[name] = details
- yield (name, details)
-
- except (DownloaderException, ClientException, ProviderException) as e:
- self.failed_sources[repo_url] = e
-
- self.cache['get_packages'] = output
-
- def get_renamed_packages(self):
- """For API-compatibility with RepositoryProvider"""
-
- return {}
-
- def get_unavailable_packages(self):
- """
- Method for compatibility with RepositoryProvider class. These providers
- are based on API calls, and thus do not support different platform
- downloads, making it impossible for there to be unavailable packages.
-
- :return: An empty list
- """
- return []
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/providers/provider_exception.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/providers/provider_exception.py
deleted file mode 100644
index e98295f..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/providers/provider_exception.py
+++ /dev/null
@@ -1,5 +0,0 @@
-class ProviderException(Exception):
- """If a provider could not return information"""
-
- def __str__(self):
- return self.args[0]
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/providers/release_selector.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/providers/release_selector.py
deleted file mode 100644
index 5305468..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/providers/release_selector.py
+++ /dev/null
@@ -1,125 +0,0 @@
-import re
-import sublime
-
-from ..versions import version_sort, version_exclude_prerelease
-
-
-class ReleaseSelector():
- """
- A base class for finding the best version of a package for the current machine
- """
-
- def select_release(self, package_info):
- """
- Returns a modified package info dict for package from package schema version 2.0
-
- :param package_info:
- A package info dict with a "releases" key
-
- :return:
- The package info dict with the "releases" key deleted, and a
- "download" key added that contains a dict with "version", "url" and
- "date" keys.
- None if no compatible relases are available.
- """
-
- releases = version_sort(package_info['releases'])
- if not self.settings.get('install_prereleases'):
- releases = version_exclude_prerelease(releases)
-
- for release in releases:
- platforms = release.get('platforms', '*')
- if not isinstance(platforms, list):
- platforms = [platforms]
-
- best_platform = self.get_best_platform(platforms)
- if not best_platform:
- continue
-
- if not self.is_compatible_version(release.get('sublime_text', '<3000')):
- continue
-
- package_info['download'] = release
- package_info['last_modified'] = release.get('date')
- del package_info['releases']
-
- return package_info
-
- return None
-
- def select_platform(self, package_info):
- """
- Returns a modified package info dict for package from package schema version <= 1.2
-
- :param package_info:
- A package info dict with a "platforms" key
-
- :return:
- The package info dict with the "platforms" key deleted, and a
- "download" key added that contains a dict with "version" and "url"
- keys.
- None if no compatible platforms.
- """
- platforms = list(package_info['platforms'].keys())
- best_platform = self.get_best_platform(platforms)
- if not best_platform:
- return None
-
- package_info['download'] = package_info['platforms'][best_platform][0]
- package_info['download']['date'] = package_info.get('last_modified')
- del package_info['platforms']
-
- return package_info
-
- def get_best_platform(self, platforms):
- """
- Returns the most specific platform that matches the current machine
-
- :param platforms:
- An array of platform names for a package. E.g. ['*', 'windows', 'linux-x64']
-
- :return: A string reprenting the most specific matching platform
- """
-
- ids = [sublime.platform() + '-' + sublime.arch(), sublime.platform(),
- '*']
-
- for id in ids:
- if id in platforms:
- return id
-
- return None
-
- def is_compatible_version(self, version_range):
- min_version = float("-inf")
- max_version = float("inf")
-
- if version_range == '*':
- return True
-
- gt_match = re.match('>(\d+)$', version_range)
- ge_match = re.match('>=(\d+)$', version_range)
- lt_match = re.match('<(\d+)$', version_range)
- le_match = re.match('<=(\d+)$', version_range)
- range_match = re.match('(\d+) - (\d+)$', version_range)
-
- if gt_match:
- min_version = int(gt_match.group(1)) + 1
- elif ge_match:
- min_version = int(ge_match.group(1))
- elif lt_match:
- max_version = int(lt_match.group(1)) - 1
- elif le_match:
- max_version = int(le_match.group(1))
- elif range_match:
- min_version = int(range_match.group(1))
- max_version = int(range_match.group(2))
- else:
- return None
-
- if min_version > int(sublime.version()):
- return False
- if max_version < int(sublime.version()):
- return False
-
- return True
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/providers/repository_provider.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/providers/repository_provider.py
deleted file mode 100644
index b94a9dd..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/providers/repository_provider.py
+++ /dev/null
@@ -1,454 +0,0 @@
-import json
-import re
-import os
-from itertools import chain
-
-try:
- # Python 3
- from urllib.parse import urlparse
-except (ImportError):
- # Python 2
- from urlparse import urlparse
-
-from ..console_write import console_write
-from .release_selector import ReleaseSelector
-from .provider_exception import ProviderException
-from ..downloaders.downloader_exception import DownloaderException
-from ..clients.client_exception import ClientException
-from ..clients.github_client import GitHubClient
-from ..clients.bitbucket_client import BitBucketClient
-from ..download_manager import downloader
-
-
-class RepositoryProvider(ReleaseSelector):
- """
- Generic repository downloader that fetches package info
-
- With the current channel/repository architecture where the channel file
- caches info from all includes repositories, these package providers just
- serve the purpose of downloading packages not in the default channel.
-
- The structure of the JSON a repository should contain is located in
- example-packages.json.
-
- :param repo:
- The URL of the package repository
-
- :param settings:
- A dict containing at least the following fields:
- `cache_length`,
- `debug`,
- `timeout`,
- `user_agent`
- Optional fields:
- `http_proxy`,
- `https_proxy`,
- `proxy_username`,
- `proxy_password`,
- `query_string_params`
- `install_prereleases`
- """
-
- def __init__(self, repo, settings):
- self.cache = {}
- self.repo_info = None
- self.schema_version = 0.0
- self.repo = repo
- self.settings = settings
- self.unavailable_packages = []
- self.failed_sources = {}
- self.broken_packages = {}
-
- @classmethod
- def match_url(cls, repo):
- """Indicates if this provider can handle the provided repo"""
-
- return True
-
- def prefetch(self):
- """
- Go out and perform HTTP operations, caching the result
-
- :raises:
- DownloaderException: when there is an issue download package info
- ClientException: when there is an issue parsing package info
- """
-
- [name for name, info in self.get_packages()]
-
- def get_failed_sources(self):
- """
- List of any URLs that could not be accessed while accessing this repository
-
- :return:
- A generator of ("https://example.com", Exception()) tuples
- """
-
- return self.failed_sources.items()
-
- def get_broken_packages(self):
- """
- List of package names for packages that are missing information
-
- :return:
- A generator of ("Package Name", Exception()) tuples
- """
-
- return self.broken_packages.items()
-
- def fetch(self):
- """
- Retrieves and loads the JSON for other methods to use
-
- :raises:
- ProviderException: when an error occurs trying to open a file
- DownloaderException: when an error occurs trying to open a URL
- """
-
- if self.repo_info != None:
- return
-
- self.repo_info = self.fetch_location(self.repo)
-
- if 'includes' not in self.repo_info:
- return
-
- # Allow repositories to include other repositories
- if re.match('https?://', self.repo, re.I):
- url_pieces = urlparse(self.repo)
- domain = url_pieces.scheme + '://' + url_pieces.netloc
- path = '/' if url_pieces.path == '' else url_pieces.path
- if path[-1] != '/':
- path = os.path.dirname(path)
- relative_base = domain + path
- else:
- relative_base = os.path.dirname(self.repo) + '/'
-
- includes = self.repo_info.get('includes', [])
- del self.repo_info['includes']
- for include in includes:
- if re.match('^\./|\.\./', include):
- include = os.path.normpath(relative_base + include)
- include_info = self.fetch_location(include)
- included_packages = include_info.get('packages', [])
- self.repo_info['packages'].extend(included_packages)
-
- def fetch_location(self, location):
- """
- Fetches the contents of a URL of file path
-
- :param location:
- The URL or file path
-
- :raises:
- ProviderException: when an error occurs trying to open a file
- DownloaderException: when an error occurs trying to open a URL
-
- :return:
- A dict of the parsed JSON
- """
-
- if re.match('https?://', self.repo, re.I):
- with downloader(location, self.settings) as manager:
- json_string = manager.fetch(location, 'Error downloading repository.')
-
- # Anything that is not a URL is expected to be a filesystem path
- else:
- if not os.path.exists(location):
- raise ProviderException(u'Error, file %s does not exist' % location)
-
- if self.settings.get('debug'):
- console_write(u'Loading %s as a repository' % location, True)
-
- # We open as binary so we get bytes like the DownloadManager
- with open(location, 'rb') as f:
- json_string = f.read()
-
- try:
- return json.loads(json_string.decode('utf-8'))
- except (ValueError):
- raise ProviderException(u'Error parsing JSON from repository %s.' % location)
-
- def get_packages(self, invalid_sources=None):
- """
- Provides access to the packages in this repository
-
- :param invalid_sources:
- A list of URLs that are permissible to fetch data from
-
- :raises:
- ProviderException: when an error occurs trying to open a file
- DownloaderException: when there is an issue download package info
- ClientException: when there is an issue parsing package info
-
- :return:
- A generator of
- (
- 'Package Name',
- {
- 'name': name,
- 'description': description,
- 'author': author,
- 'homepage': homepage,
- 'last_modified': last modified date,
- 'download': {
- 'url': url,
- 'date': date,
- 'version': version
- },
- 'previous_names': [old_name, ...],
- 'labels': [label, ...],
- 'sources': [url, ...],
- 'readme': url,
- 'issues': url,
- 'donate': url,
- 'buy': url
- }
- )
- tuples
- """
-
- if 'get_packages' in self.cache:
- for key, value in self.cache['get_packages'].items():
- yield (key, value)
- return
-
- if invalid_sources != None and self.repo in invalid_sources:
- raise StopIteration()
-
- try:
- self.fetch()
- except (DownloaderException, ProviderException) as e:
- self.failed_sources[self.repo] = e
- self.cache['get_packages'] = {}
- return
-
- def fail(message):
- exception = ProviderException(message)
- self.failed_sources[self.repo] = exception
- self.cache['get_packages'] = {}
- return
- schema_error = u'Repository %s does not appear to be a valid repository file because ' % self.repo
-
- if 'schema_version' not in self.repo_info:
- error_string = u'%s the "schema_version" JSON key is missing.' % schema_error
- fail(error_string)
- return
-
- try:
- self.schema_version = float(self.repo_info.get('schema_version'))
- except (ValueError):
- error_string = u'%s the "schema_version" is not a valid number.' % schema_error
- fail(error_string)
- return
-
- if self.schema_version not in [1.0, 1.1, 1.2, 2.0]:
- error_string = u'%s the "schema_version" is not recognized. Must be one of: 1.0, 1.1, 1.2 or 2.0.' % schema_error
- fail(error_string)
- return
-
- if 'packages' not in self.repo_info:
- error_string = u'%s the "packages" JSON key is missing.' % schema_error
- fail(error_string)
- return
-
- github_client = GitHubClient(self.settings)
- bitbucket_client = BitBucketClient(self.settings)
-
- # Backfill the "previous_names" keys for old schemas
- previous_names = {}
- if self.schema_version < 2.0:
- renamed = self.get_renamed_packages()
- for old_name in renamed:
- new_name = renamed[old_name]
- if new_name not in previous_names:
- previous_names[new_name] = []
- previous_names[new_name].append(old_name)
-
- output = {}
- for package in self.repo_info['packages']:
- info = {
- 'sources': [self.repo]
- }
-
- for field in ['name', 'description', 'author', 'last_modified', 'previous_names',
- 'labels', 'homepage', 'readme', 'issues', 'donate', 'buy']:
- if package.get(field):
- info[field] = package.get(field)
-
- # Schema version 2.0 allows for grabbing details about a pacakge, or its
- # download from "details" urls. See the GitHubClient and BitBucketClient
- # classes for valid URLs.
- if self.schema_version >= 2.0:
- details = package.get('details')
- releases = package.get('releases')
-
- # Try to grab package-level details from GitHub or BitBucket
- if details:
- if invalid_sources != None and details in invalid_sources:
- continue
-
- info['sources'].append(details)
-
- try:
- github_repo_info = github_client.repo_info(details)
- bitbucket_repo_info = bitbucket_client.repo_info(details)
-
- # When grabbing details, prefer explicit field values over the values
- # from the GitHub or BitBucket API
- if github_repo_info:
- info = dict(chain(github_repo_info.items(), info.items()))
- elif bitbucket_repo_info:
- info = dict(chain(bitbucket_repo_info.items(), info.items()))
- else:
- raise ProviderException(u'Invalid "details" value "%s" for one of the packages in the repository %s.' % (details, self.repo))
-
- except (DownloaderException, ClientException, ProviderException) as e:
- if 'name' in info:
- self.broken_packages[info['name']] = e
- self.failed_sources[details] = e
- continue
-
- # If no releases info was specified, also grab the download info from GH or BB
- if not releases and details:
- releases = [{'details': details}]
-
- if not releases:
- e = ProviderException(u'No "releases" value for one of the packages in the repository %s.' % self.repo)
- if 'name' in info:
- self.broken_packages[info['name']] = e
- else:
- self.failed_sources[self.repo] = e
- continue
-
- # This allows developers to specify a GH or BB location to get releases from,
- # especially tags URLs (https://github.com/user/repo/tags or
- # https://bitbucket.org/user/repo#tags)
- info['releases'] = []
- for release in releases:
- download_details = None
- download_info = {}
-
- # Make sure that explicit fields are copied over
- for field in ['platforms', 'sublime_text', 'version', 'url', 'date']:
- if field in release:
- download_info[field] = release[field]
-
- if 'details' in release:
- download_details = release['details']
-
- try:
- github_download = github_client.download_info(download_details)
- bitbucket_download = bitbucket_client.download_info(download_details)
-
- # Overlay the explicit field values over values fetched from the APIs
- if github_download:
- download_info = dict(chain(github_download.items(), download_info.items()))
- # No matching tags
- elif github_download == False:
- download_info = {}
- elif bitbucket_download:
- download_info = dict(chain(bitbucket_download.items(), download_info.items()))
- # No matching tags
- elif bitbucket_download == False:
- download_info = {}
- else:
- raise ProviderException(u'Invalid "details" value "%s" under the "releases" key for the package "%s" in the repository %s.' % (download_details, info['name'], self.repo))
-
- except (DownloaderException, ClientException, ProviderException) as e:
- if 'name' in info:
- self.broken_packages[info['name']] = e
- self.failed_sources[download_details] = e
- continue
-
- if download_info:
- info['releases'].append(download_info)
-
- info = self.select_release(info)
-
- # Schema version 1.0, 1.1 and 1.2 just require that all values be
- # explicitly specified in the package JSON
- else:
- info['platforms'] = package.get('platforms')
- info = self.select_platform(info)
-
- if not info:
- self.unavailable_packages.append(package['name'])
- continue
-
- if 'download' not in info and 'releases' not in info:
- self.broken_packages[info['name']] = ProviderException(u'No "releases" key for the package "%s" in the repository %s.' % (info['name'], self.repo))
- continue
-
- for field in ['previous_names', 'labels']:
- if field not in info:
- info[field] = []
-
- for field in ['readme', 'issues', 'donate', 'buy']:
- if field not in info:
- info[field] = None
-
- if 'homepage' not in info:
- info['homepage'] = self.repo
-
- if 'download' in info:
- # Rewrites the legacy "zipball" URLs to the new "zip" format
- info['download']['url'] = re.sub(
- '^(https://nodeload.github.com/[^/]+/[^/]+/)zipball(/.*)$',
- '\\1zip\\2', info['download']['url'])
-
- # Rewrites the legacy "nodeload" URLs to the new "codeload" subdomain
- info['download']['url'] = info['download']['url'].replace(
- 'nodeload.github.com', 'codeload.github.com')
-
- # Extract the date from the download
- if 'last_modified' not in info:
- info['last_modified'] = info['download']['date']
-
- elif 'releases' in info and 'last_modified' not in info:
- # Extract a date from the newest download
- date = '1970-01-01 00:00:00'
- for release in info['releases']:
- if 'date' in release and release['date'] > date:
- date = release['date']
- info['last_modified'] = date
-
- if info['name'] in previous_names:
- info['previous_names'].extend(previous_names[info['name']])
-
- output[info['name']] = info
- yield (info['name'], info)
-
- self.cache['get_packages'] = output
-
- def get_renamed_packages(self):
- """:return: A dict of the packages that have been renamed"""
-
- if self.schema_version < 2.0:
- return self.repo_info.get('renamed_packages', {})
-
- output = {}
- for package in self.repo_info['packages']:
- if 'previous_names' not in package:
- continue
-
- previous_names = package['previous_names']
- if not isinstance(previous_names, list):
- previous_names = [previous_names]
-
- for previous_name in previous_names:
- output[previous_name] = package['name']
-
- return output
-
- def get_unavailable_packages(self):
- """
- Provides a list of packages that are unavailable for the current
- platform/architecture that Sublime Text is running on.
-
- This list will be empty unless get_packages() is called first.
-
- :return: A list of package names
- """
-
- return self.unavailable_packages
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/reloader.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/reloader.py
deleted file mode 100644
index 0696022..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/reloader.py
+++ /dev/null
@@ -1,130 +0,0 @@
-import sys
-
-import sublime
-
-
-st_version = 2
-# With the way ST3 works, the sublime module is not "available" at startup
-# which results in an empty version number
-if sublime.version() == '' or int(sublime.version()) > 3000:
- st_version = 3
- from imp import reload
-
-
-# Python allows reloading modules on the fly, which allows us to do live upgrades.
-# The only caveat to this is that you have to reload in the dependency order.
-#
-# Thus is module A depends on B and we don't reload B before A, when A is reloaded
-# it will still have a reference to the old B. Thus we hard-code the dependency
-# order of the various Package Control modules so they get reloaded properly.
-#
-# There are solutions for doing this all programatically, but this is much easier
-# to understand.
-
-reload_mods = []
-for mod in sys.modules:
- if mod[0:15].lower().replace(' ', '_') == 'package_control' and sys.modules[mod] != None:
- reload_mods.append(mod)
-
-mod_prefix = 'package_control'
-if st_version == 3:
- mod_prefix = 'Package Control.' + mod_prefix
-
-mods_load_order = [
- '',
-
- '.sys_path',
- '.cache',
- '.http_cache',
- '.ca_certs',
- '.clear_directory',
- '.cmd',
- '.console_write',
- '.preferences_filename',
- '.show_error',
- '.unicode',
- '.thread_progress',
- '.package_io',
- '.semver',
- '.versions',
-
- '.http',
- '.http.invalid_certificate_exception',
- '.http.debuggable_http_response',
- '.http.debuggable_https_response',
- '.http.debuggable_http_connection',
- '.http.persistent_handler',
- '.http.debuggable_http_handler',
- '.http.validating_https_connection',
- '.http.validating_https_handler',
-
- '.clients',
- '.clients.client_exception',
- '.clients.bitbucket_client',
- '.clients.github_client',
- '.clients.readme_client',
- '.clients.json_api_client',
-
- '.providers',
- '.providers.provider_exception',
- '.providers.bitbucket_repository_provider',
- '.providers.channel_provider',
- '.providers.github_repository_provider',
- '.providers.github_user_provider',
- '.providers.repository_provider',
- '.providers.release_selector',
-
- '.download_manager',
-
- '.downloaders',
- '.downloaders.downloader_exception',
- '.downloaders.rate_limit_exception',
- '.downloaders.binary_not_found_error',
- '.downloaders.non_clean_exit_error',
- '.downloaders.non_http_error',
- '.downloaders.caching_downloader',
- '.downloaders.decoding_downloader',
- '.downloaders.limiting_downloader',
- '.downloaders.cert_provider',
- '.downloaders.urllib_downloader',
- '.downloaders.cli_downloader',
- '.downloaders.curl_downloader',
- '.downloaders.wget_downloader',
- '.downloaders.wininet_downloader',
- '.downloaders.background_downloader',
-
- '.upgraders',
- '.upgraders.vcs_upgrader',
- '.upgraders.git_upgrader',
- '.upgraders.hg_upgrader',
-
- '.package_manager',
- '.package_creator',
- '.package_installer',
- '.package_renamer',
-
- '.commands',
- '.commands.add_channel_command',
- '.commands.add_repository_command',
- '.commands.create_binary_package_command',
- '.commands.create_package_command',
- '.commands.disable_package_command',
- '.commands.discover_packages_command',
- '.commands.enable_package_command',
- '.commands.existing_packages_command',
- '.commands.grab_certs_command',
- '.commands.install_package_command',
- '.commands.list_packages_command',
- '.commands.package_message_command',
- '.commands.remove_package_command',
- '.commands.upgrade_all_packages_command',
- '.commands.upgrade_package_command',
-
- '.package_cleanup',
- '.automatic_upgrader'
-]
-
-for suffix in mods_load_order:
- mod = mod_prefix + suffix
- if mod in reload_mods:
- reload(sys.modules[mod])
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/semver.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/semver.py
deleted file mode 100644
index 917fa77..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/semver.py
+++ /dev/null
@@ -1,833 +0,0 @@
-"""pysemver: Semantic Version comparing for Python.
-
-Provides comparing of semantic versions by using SemVer objects using rich comperations plus the
-possibility to match a selector string against versions. Interesting for version dependencies.
-Versions look like: "1.7.12+b.133"
-Selectors look like: ">1.7.0 || 1.6.9+b.111 - 1.6.9+b.113"
-
-Example usages:
- >>> SemVer(1, 2, 3, build=13)
- SemVer("1.2.3+13")
- >>> SemVer.valid("1.2.3.4")
- False
- >>> SemVer.clean("this is unimportant text 1.2.3-2 and will be stripped")
- "1.2.3-2"
- >>> SemVer("1.7.12+b.133").satisfies(">1.7.0 || 1.6.9+b.111 - 1.6.9+b.113")
- True
- >>> SemSel(">1.7.0 || 1.6.9+b.111 - 1.6.9+b.113").matches(SemVer("1.7.12+b.133"),
- ... SemVer("1.6.9+b.112"), SemVer("1.6.10"))
- [SemVer("1.7.12+b.133"), SemVer("1.6.9+b.112")]
- >>> min(_)
- SemVer("1.6.9+b.112")
- >>> _.patch
- 9
-
-Exported classes:
- * SemVer(collections.namedtuple())
- Parses semantic versions and defines methods for them. Supports rich comparisons.
- * SemSel(tuple)
- Parses semantic version selector strings and defines methods for them.
- * SelParseError(Exception)
- An error among others raised when parsing a semantic version selector failed.
-
-Other classes:
- * SemComparator(object)
- * SemSelAndChunk(list)
- * SemSelOrChunk(list)
-
-Functions/Variables/Constants:
- none
-
-
-Copyright (c) 2013 Zachary King, FichteFoll
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
-associated documentation files (the "Software"), to deal in the Software without restriction,
-including without limitation the rights to use, copy, modify, merge, publish, distribute,
-sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions: The above copyright notice and this
-permission notice shall be included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT
-NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES
-OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-"""
-
-import re
-import sys
-from collections import namedtuple # Python >=2.6
-
-
-__all__ = ('SemVer', 'SemSel', 'SelParseError')
-
-
-if sys.version_info[0] == 3:
- basestring = str
- cmp = lambda a, b: (a > b) - (a < b)
-
-
-# @functools.total_ordering would be nice here but was added in 2.7, __cmp__ is not Py3
-class SemVer(namedtuple("_SemVer", 'major, minor, patch, prerelease, build')):
- """Semantic Version, consists of 3 to 5 components defining the version's adicity.
-
- See http://semver.org/ (2.0.0-rc.1) for the standard mainly used for this implementation, few
- changes have been made.
-
- Information on this particular class and their instances:
- - Immutable and hashable.
- - Subclasses `collections.namedtuple`.
- - Always `True` in boolean context.
- - len() returns an int between 3 and 5; 4 when a pre-release is set and 5 when a build is
- set. Note: Still returns 5 when build is set but not pre-release.
- - Parts of the semantic version can be accessed by integer indexing, key (string) indexing,
- slicing and getting an attribute. Returned slices are tuple. Leading '-' and '+' of
- optional components are not stripped. Supported keys/attributes:
- major, minor, patch, prerelease, build.
-
- Examples:
- s = SemVer("1.2.3-4.5+6")
- s[2] == 3
- s[:3] == (1, 2, 3)
- s['build'] == '-4.5'
- s.major == 1
-
- Short information on semantic version structure:
-
- Semantic versions consist of:
- * a major component (numeric)
- * a minor component (numeric)
- * a patch component (numeric)
- * a pre-release component [optional]
- * a build component [optional]
-
- The pre-release component is indicated by a hyphen '-' and followed by alphanumeric[1] sequences
- separated by dots '.'. Sequences are compared numerically if applicable (both sequences of two
- versions are numeric) or lexicographically. May also include hyphens. The existence of a
- pre-release component lowers the actual version; the shorter pre-release component is considered
- lower. An 'empty' pre-release component is considered to be the least version for this
- major-minor-patch combination (e.g. "1.0.0-").
-
- The build component may follow the optional pre-release component and is indicated by a plus '+'
- followed by sequences, just as the pre-release component. Comparing works similarly. However the
- existence of a build component raises the actual version and may also raise a pre-release. An
- 'empty' build component is considered to be the highest version for this
- major-minor-patch-prerelease combination (e.g. "1.2.3+").
-
-
- [1]: Regexp for a sequence: r'[0-9A-Za-z-]+'.
- """
-
- # Static class variables
- _base_regex = r'''(?x)
- (?P[0-9]+)
- \.(?P[0-9]+)
- \.(?P[0-9]+)
- (?:\-(?P(?:[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?))?
- (?:\+(?P(?:[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?))?'''
- _search_regex = re.compile(_base_regex)
- _match_regex = re.compile('^%s$' % _base_regex) # required because of $ anchor
-
- # "Constructor"
- def __new__(cls, *args, **kwargs):
- """There are two different constructor styles that are allowed:
- - Option 1 allows specification of a semantic version as a string and the option to "clean"
- the string before parsing it.
- - Option 2 allows specification of each component separately as one parameter.
-
- Note that all the parameters specified in the following sections can be passed either as
- positional or as named parameters while considering the usual Python rules for this. As
- such, `SemVer(1, 2, minor=1)` will result in an exception and not in `SemVer("1.1.2")`.
-
- Option 1:
- Constructor examples:
- SemVer("1.0.1")
- SemVer("this version 1.0.1-pre.1 here", True)
- SemVer(ver="0.0.9-pre-alpha+34", clean=False)
-
- Parameters:
- * ver (str)
- The string containing the version.
- * clean = `False` (bool; optional)
- If this is true in boolean context, `SemVer.clean(ver)` is called before
- parsing.
-
- Option 2:
- Constructor examples:
- SemVer(1, 0, 1)
- SemVer(1, '0', prerelease='pre-alpha', patch=1, build=34)
- SemVer(**dict(minor=2, major=1, patch=3))
-
- Parameters:
- * major (int, str, float ...)
- * minor (...)
- * patch (...)
- Major to patch components must be an integer or convertable to an int (e.g. a
- string or another number type).
-
- * prerelease = `None` (str, int, float ...; optional)
- * build = `None` (...; optional)
- Pre-release and build components should be a string (or number) type.
- Will be passed to `str()` if not already a string but the final string must
- match '^[0-9A-Za-z.-]*$'
-
- Raises:
- * TypeError
- Invalid parameter type(s) or combination (e.g. option 1 and 2).
- * ValueError
- Invalid semantic version or option 2 parameters unconvertable.
- """
- ver, clean, comps = None, False, None
- kw, l = kwargs.copy(), len(args) + len(kwargs)
-
- def inv():
- raise TypeError("Invalid parameter combination: args=%s; kwargs=%s" % (args, kwargs))
-
- # Do validation and parse the parameters
- if l == 0 or l > 5:
- raise TypeError("SemVer accepts at least 1 and at most 5 arguments (%d given)" % l)
-
- elif l < 3:
- if len(args) == 2:
- ver, clean = args
- else:
- ver = args[0] if args else kw.pop('ver', None)
- clean = kw.pop('clean', clean)
- if kw:
- inv()
-
- else:
- comps = list(args) + [kw.pop(cls._fields[k], None) for k in range(len(args), 5)]
- if kw or any(comps[i] is None for i in range(3)):
- inv()
-
- typecheck = (int,) * 3 + (basestring,) * 2
- for i, (v, t) in enumerate(zip(comps, typecheck)):
- if v is None:
- continue
- elif not isinstance(v, t):
- try:
- if i < 3:
- v = typecheck[i](v)
- else: # The real `basestring` can not be instatiated (Py2)
- v = str(v)
- except ValueError as e:
- # Modify the exception message. I can't believe this actually works
- e.args = ("Parameter #%d must be of type %s or convertable"
- % (i, t.__name__),)
- raise
- else:
- comps[i] = v
- if t is basestring and not re.match(r"^[0-9A-Za-z.-]*$", v):
- raise ValueError("Build and pre-release strings must match '^[0-9A-Za-z.-]*$'")
-
- # Final adjustments
- if not comps:
- if ver is None or clean is None:
- inv()
- ver = clean and cls.clean(ver) or ver
- comps = cls._parse(ver)
-
- # Create the obj
- return super(SemVer, cls).__new__(cls, *comps)
-
- # Magic methods
- def __str__(self):
- return ('.'.join(map(str, self[:3]))
- + ('-' + self.prerelease if self.prerelease is not None else '')
- + ('+' + self.build if self.build is not None else ''))
-
- def __repr__(self):
- # Use the shortest representation - what would you prefer?
- return 'SemVer("%s")' % str(self)
- # return 'SemVer(%s)' % ', '.join('%s=%r' % (k, getattr(self, k)) for k in self._fields)
-
- def __len__(self):
- return 3 + (self.build is not None and 2 or self.prerelease is not None)
-
- # Magic rich comparing methods
- def __gt__(self, other):
- return self._compare(other) == 1 if isinstance(other, SemVer) else NotImplemented
-
- def __eq__(self, other):
- return self._compare(other) == 0 if isinstance(other, SemVer) else NotImplemented
-
- def __lt__(self, other):
- return not (self > other or self == other)
-
- def __ge__(self, other):
- return not (self < other)
-
- def __le__(self, other):
- return not (self > other)
-
- def __ne__(self, other):
- return not (self == other)
-
- # Utility (class-)methods
- def satisfies(self, sel):
- """Alias for `bool(sel.matches(self))` or `bool(SemSel(sel).matches(self))`.
-
- See `SemSel.__init__()` and `SemSel.matches(*vers)` for possible exceptions.
-
- Returns:
- * bool: `True` if the version matches the passed selector, `False` otherwise.
- """
- if not isinstance(sel, SemSel):
- sel = SemSel(sel) # just "re-raise" exceptions
-
- return bool(sel.matches(self))
-
- @classmethod
- def valid(cls, ver):
- """Check if `ver` is a valid semantic version. Classmethod.
-
- Parameters:
- * ver (str)
- The string that should be stripped.
-
- Raises:
- * TypeError
- Invalid parameter type.
-
- Returns:
- * bool: `True` if it is valid, `False` otherwise.
- """
- if not isinstance(ver, basestring):
- raise TypeError("%r is not a string" % ver)
-
- if cls._match_regex.match(ver):
- return True
- else:
- return False
-
- @classmethod
- def clean(cls, vers):
- """Remove everything before and after a valid version string. Classmethod.
-
- Parameters:
- * vers (str)
- The string that should be stripped.
-
- Raises:
- * TypeError
- Invalid parameter type.
-
- Returns:
- * str: The stripped version string. Only the first version is matched.
- * None: No version found in the string.
- """
- if not isinstance(vers, basestring):
- raise TypeError("%r is not a string" % vers)
- m = cls._search_regex.search(vers)
- if m:
- return vers[m.start():m.end()]
- else:
- return None
-
- # Private (class-)methods
- @classmethod
- def _parse(cls, ver):
- """Private. Do not touch. Classmethod.
- """
- if not isinstance(ver, basestring):
- raise TypeError("%r is not a string" % ver)
-
- match = cls._match_regex.match(ver)
-
- if match is None:
- raise ValueError("'%s' is not a valid SemVer string" % ver)
-
- g = list(match.groups())
- for i in range(3):
- g[i] = int(g[i])
-
- return g # Will be passed as namedtuple(...)(*g)
-
- def _compare(self, other):
- """Private. Do not touch.
- self > other: 1
- self = other: 0
- self < other: -1
- """
- # Shorthand lambdas
- cp_len = lambda t, i=0: cmp(len(t[i]), len(t[not i]))
-
- for i, (x1, x2) in enumerate(zip(self, other)):
- if i > 2:
- if x1 is None and x2 is None:
- continue
-
- # self is greater when other has a prerelease but self doesn't
- # self is less when other has a build but self doesn't
- if x1 is None or x2 is None:
- return int(2 * (i - 3.5)) * (1 - 2 * (x1 is None))
-
- # self is less when other's build is empty
- if i == 4 and (not x1 or not x2) and x1 != x2:
- return 1 - 2 * bool(x1)
-
- # Split by '.' and use numeric comp or lexicographical order
- t2 = [x1.split('.'), x2.split('.')]
- for y1, y2 in zip(*t2):
- if y1.isdigit() and y2.isdigit():
- y1 = int(y1)
- y2 = int(y2)
- if y1 > y2:
- return 1
- elif y1 < y2:
- return -1
-
- # The "longer" sub-version is greater
- d = cp_len(t2)
- if d:
- return d
- else:
- if x1 > x2:
- return 1
- elif x1 < x2:
- return -1
-
- # The versions equal
- return 0
-
-
-class SemComparator(object):
- """Holds a SemVer object and a comparing operator and can match these against a given version.
-
- Constructor: SemComparator('<=', SemVer("1.2.3"))
-
- Methods:
- * matches(ver)
- """
- # Private properties
- _ops = {
- '>=': '__ge__',
- '<=': '__le__',
- '>': '__gt__',
- '<': '__lt__',
- '=': '__eq__',
- '!=': '__ne__'
- }
- _ops_satisfy = ('~', '!')
-
- # Constructor
- def __init__(self, op, ver):
- """Constructor examples:
- SemComparator('<=', SemVer("1.2.3"))
- SemComparator('!=', SemVer("2.3.4"))
-
- Parameters:
- * op (str, False, None)
- One of [>=, <=, >, <, =, !=, !, ~] or evaluates to `False` which defaults to '~'.
- '~' means a "satisfy" operation where pre-releases and builds are ignored.
- '!' is a negative "~".
- * ver (SemVer)
- Holds the version to compare with.
-
- Raises:
- * ValueError
- Invalid `op` parameter.
- * TypeError
- Invalid `ver` parameter.
- """
- super(SemComparator, self).__init__()
-
- if op and op not in self._ops_satisfy and op not in self._ops:
- raise ValueError("Invalid value for `op` parameter.")
- if not isinstance(ver, SemVer):
- raise TypeError("`ver` parameter is not instance of SemVer.")
-
- # Default to '~' for versions with no build or pre-release
- op = op or '~'
- # Fallback to '=' and '!=' if len > 3
- if len(ver) != 3:
- if op == '~':
- op = '='
- if op == '!':
- op = '!='
-
- self.op = op
- self.ver = ver
-
- # Magic methods
- def __str__(self):
- return (self.op or "") + str(self.ver)
-
- # Utility methods
- def matches(self, ver):
- """Match the internal version (constructor) against `ver`.
-
- Parameters:
- * ver (SemVer)
-
- Raises:
- * TypeError
- Could not compare `ver` against the version passed in the constructor with the
- passed operator.
-
- Returns:
- * bool
- `True` if the version matched the specified operator and internal version, `False`
- otherwise.
- """
- if self.op in self._ops_satisfy:
- # Compare only the first three parts (which are tuples) and directly
- return bool((self.ver[:3] == ver[:3]) + (self.op == '!') * -1)
- ret = getattr(ver, self._ops[self.op])(self.ver)
- if ret == NotImplemented:
- raise TypeError("Unable to compare %r with operator '%s'" % (ver, self.op))
- return ret
-
-
-class SemSelAndChunk(list):
- """Extends list and defines a few methods used for matching versions.
-
- New elements should be added by calling `.add_child(op, ver)` which creates a SemComparator
- instance and adds that to itself.
-
- Methods:
- * matches(ver)
- * add_child(op, ver)
- """
- # Magic methods
- def __str__(self):
- return ' '.join(map(str, self))
-
- # Utitlity methods
- def matches(self, ver):
- """Match all of the added children against `ver`.
-
- Parameters:
- * ver (SemVer)
-
- Raises:
- * TypeError
- Invalid `ver` parameter.
-
- Returns:
- * bool:
- `True` if *all* of the SemComparator children match `ver`, `False` otherwise.
- """
- if not isinstance(ver, SemVer):
- raise TypeError("`ver` parameter is not instance of SemVer.")
- return all(cp.matches(ver) for cp in self)
-
- def add_child(self, op, ver):
- """Create a SemComparator instance with the given parameters and appends that to self.
-
- Parameters:
- * op (str)
- * ver (SemVer)
- Both parameters are forwarded to `SemComparator.__init__`, see there for a more detailed
- description.
-
- Raises:
- Exceptions raised by `SemComparator.__init__`.
- """
- self.append(SemComparator(op, SemVer(ver)))
-
-
-class SemSelOrChunk(list):
- """Extends list and defines a few methods used for matching versions.
-
- New elements should be added by calling `.new_child()` which returns a SemSelAndChunk
- instance.
-
- Methods:
- * matches(ver)
- * new_child()
- """
- # Magic methods
- def __str__(self):
- return ' || '.join(map(str, self))
-
- # Utility methods
- def matches(self, ver):
- """Match all of the added children against `ver`.
-
- Parameters:
- * ver (SemVer)
-
- Raises:
- * TypeError
- Invalid `ver` parameter.
-
- Returns:
- * bool
- `True` if *any* of the SemSelAndChunk children matches `ver`.
- `False` otherwise.
- """
- if not isinstance(ver, SemVer):
- raise TypeError("`ver` parameter is not instance of SemVer.")
- return any(ch.matches(ver) for ch in self)
-
- def new_child(self):
- """Creates a new SemSelAndChunk instance, appends it to self and returns it.
-
- Returns:
- * SemSelAndChunk: An empty instance.
- """
- ch = SemSelAndChunk()
- self.append(ch)
- return ch
-
-
-class SelParseError(Exception):
- """An Exception raised when parsing a semantic selector failed.
- """
- pass
-
-
-# Subclass `tuple` because this is a somewhat simple method to make this immutable
-class SemSel(tuple):
- """A Semantic Version Selector, holds a selector and can match it against semantic versions.
-
- Information on this particular class and their instances:
- - Immutable but not hashable because the content within might have changed.
- - Subclasses `tuple` but does not behave like one.
- - Always `True` in boolean context.
- - len() returns the number of containing *and chunks* (see below).
- - Iterable, iterates over containing *and chunks*.
-
- When talking about "versions" it refers to a semantic version (SemVer). For information on how
- versions compare to one another, see SemVer's doc string.
-
- List for **comparators**:
- "1.0.0" matches the version 1.0.0 and all its pre-release and build variants
- "!1.0.0" matches any version that is not 1.0.0 or any of its variants
- "=1.0.0" matches only the version 1.0.0
- "!=1.0.0" matches any version that is not 1.0.0
- ">=1.0.0" matches versions greater than or equal 1.0.0
- "<1.0.0" matches versions smaller than 1.0.0
- "1.0.0 - 1.0.3" matches versions greater than or equal 1.0.0 thru 1.0.3
- "~1.0" matches versions greater than or equal 1.0.0 thru 1.0.9999 (and more)
- "~1", "1.x", "1.*" match versions greater than or equal 1.0.0 thru 1.9999.9999 (and more)
- "~1.1.2" matches versions greater than or equal 1.1.2 thru 1.1.9999 (and more)
- "~1.1.2+any" matches versions greater than or equal 1.1.2+any thru 1.1.9999 (and more)
- "*", "~", "~x" match any version
-
- Multiple comparators can be combined by using ' ' spaces and every comparator must match to make
- the **and chunk** match a version.
- Multiple and chunks can be combined to **or chunks** using ' || ' and match if any of the and
- chunks split by these matches.
-
- A complete example would look like:
- ~1 || 0.0.3 || <0.0.2 >0.0.1+b.1337 || 2.0.x || 2.1.0 - 2.1.0+b.12 !=2.1.0+b.9
-
- Methods:
- * matches(*vers)
- """
- # Private properties
- _fuzzy_regex = re.compile(r'''(?x)^
- (?P[<>]=?|~>?=?)?
- (?:(?P\d+)
- (?:\.(?P\d+)
- (?:\.(?P\d+)
- (?P[-+][a-zA-Z0-9-+.]*)?
- )?
- )?
- )?$''')
- _xrange_regex = re.compile(r'''(?x)^
- (?P[<>]=?|~>?=?)?
- (?:(?P\d+|[xX*])
- (?:\.(?P\d+|[xX*])
- (?:\.(?P\d+|[xX*]))?
- )?
- )
- (?P.*)$''')
- _split_op_regex = re.compile(r'^(?P=|[<>!]=?)?(?P.*)$')
-
- # "Constructor"
- def __new__(cls, sel):
- """Constructor examples:
- SemSel(">1.0.0")
- SemSel("~1.2.9 !=1.2.12")
-
- Parameters:
- * sel (str)
- A version selector string.
-
- Raises:
- * TypeError
- `sel` parameter is not a string.
- * ValueError
- A version in the selector could not be matched as a SemVer.
- * SemParseError
- The version selector's syntax is unparsable; invalid ranges (fuzzy, xrange or
- explicit range) or invalid '||'
- """
- chunk = cls._parse(sel)
- return super(SemSel, cls).__new__(cls, (chunk,))
-
- # Magic methods
- def __str__(self):
- return str(self._chunk)
-
- def __repr__(self):
- return 'SemSel("%s")' % self._chunk
-
- def __len__(self):
- # What would you expect?
- return len(self._chunk)
-
- def __iter__(self):
- return iter(self._chunk)
-
- # Read-only (private) attributes
- @property
- def _chunk(self):
- return self[0]
-
- # Utility methods
- def matches(self, *vers):
- """Match the selector against a selection of versions.
-
- Parameters:
- * *vers (str, SemVer)
- Versions can be passed as strings and SemVer objects will be created with them.
- May also be a mixed list.
-
- Raises:
- * TypeError
- A version is not an instance of str (basestring) or SemVer.
- * ValueError
- A string version could not be parsed as a SemVer.
-
- Returns:
- * list
- A list with all the versions that matched, may be empty. Use `max()` to determine
- the highest matching version, or `min()` for the lowest.
- """
- ret = []
- for v in vers:
- if isinstance(v, str):
- t = self._chunk.matches(SemVer(v))
- elif isinstance(v, SemVer):
- t = self._chunk.matches(v)
- else:
- raise TypeError("Invalid parameter type '%s': %s" % (v, type(v)))
- if t:
- ret.append(v)
-
- return ret
-
- # Private methods
- @classmethod
- def _parse(cls, sel):
- """Private. Do not touch.
-
- 1. split by whitespace into tokens
- a. start new and_chunk on ' || '
- b. parse " - " ranges
- c. replace "xX*" ranges with "~" equivalent
- d. parse "~" ranges
- e. parse unmatched token as comparator
- ~. append to current and_chunk
- 2. return SemSelOrChunk
-
- Raises TypeError, ValueError or SelParseError.
- """
- if not isinstance(sel, basestring):
- raise TypeError("Selector must be a string")
- if not sel:
- raise ValueError("String must not be empty")
-
- # Split selector by spaces and crawl the tokens
- tokens = sel.split()
- i = -1
- or_chunk = SemSelOrChunk()
- and_chunk = or_chunk.new_child()
-
- while i + 1 < len(tokens):
- i += 1
- t = tokens[i]
-
- # Replace x ranges with ~ selector
- m = cls._xrange_regex.match(t)
- m = m and m.groups('')
- if m and any(not x.isdigit() for x in m[1:4]) and not m[0].startswith('>'):
- # (do not match '>1.0' or '>*')
- if m[4]:
- raise SelParseError("XRanges do not allow pre-release or build components")
-
- # Only use digit parts and fail if digit found after non-digit
- mm, xran = [], False
- for x in m[1:4]:
- if x.isdigit():
- if xran:
- raise SelParseError("Invalid fuzzy range or XRange '%s'" % tokens[i])
- mm.append(x)
- else:
- xran = True
- t = m[0] + '.'.join(mm) # x for x in m[1:4] if x.isdigit())
- # Append "~" if not already present
- if not t.startswith('~'):
- t = '~' + t
-
- # switch t:
- if t == '||':
- if i == 0 or tokens[i - 1] == '||' or i + 1 == len(tokens):
- raise SelParseError("OR range must not be empty")
- # Start a new and_chunk
- and_chunk = or_chunk.new_child()
-
- elif t == '-':
- # ' - ' range
- i += 1
- invalid = False
- try:
- # If these result in exceptions, you know you're doing it wrong
- t = tokens[i]
- c = and_chunk[-1]
- except:
- raise SelParseError("Invalid ' - ' range position")
-
- # If there is an op in front of one of the bound versions
- invalid = (c.op not in ('=', '~')
- or cls._split_op_regex.match(t).group(1) not in (None, '='))
- if invalid:
- raise SelParseError("Invalid ' - ' range '%s - %s'"
- % (tokens[i - 2], tokens[i]))
-
- c.op = ">="
- and_chunk.add_child('<=', t)
-
- elif t == '':
- # Multiple spaces
- pass
-
- elif t.startswith('~'):
- m = cls._fuzzy_regex.match(t)
- if not m:
- raise SelParseError("Invalid fuzzy range or XRange '%s'" % tokens[i])
-
- mm, m = m.groups('')[1:4], m.groupdict('') # mm: major to patch
-
- # Minimum requirement
- min_ver = ('.'.join(x or '0' for x in mm) + '-'
- if not m['other']
- else cls._split_op_regex(t[1:]).group('ver'))
- and_chunk.add_child('>=', min_ver)
-
- if m['major']:
- # Increase version before none (or second to last if '~1.2.3')
- e = [0, 0, 0]
- for j, d in enumerate(mm):
- if not d or j == len(mm) - 1:
- e[j - 1] = e[j - 1] + 1
- break
- e[j] = int(d)
-
- and_chunk.add_child('<', '.'.join(str(x) for x in e) + '-')
-
- # else: just plain '~' or '*', or '~>X' which are already handled
-
- else:
- # A normal comparator
- m = cls._split_op_regex.match(t).groupdict() # this regex can't fail
- and_chunk.add_child(**m)
-
- # Finally return the or_chunk
- return or_chunk
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/show_error.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/show_error.py
deleted file mode 100644
index b8169c9..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/show_error.py
+++ /dev/null
@@ -1,12 +0,0 @@
-import sublime
-
-
-def show_error(string):
- """
- Displays an error message with a standard "Package Control" header
-
- :param string:
- The error to display
- """
-
- sublime.error_message(u'Package Control\n\n%s' % string)
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/sys_path.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/sys_path.py
deleted file mode 100644
index 10daa3d..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/sys_path.py
+++ /dev/null
@@ -1,27 +0,0 @@
-import sys
-import os
-
-if os.name == 'nt':
- from ctypes import windll, create_unicode_buffer
-
-import sublime
-
-
-def add_to_path(path):
- # Python 2.x on Windows can't properly import from non-ASCII paths, so
- # this code added the DOC 8.3 version of the lib folder to the path in
- # case the user's username includes non-ASCII characters
- if os.name == 'nt':
- buf = create_unicode_buffer(512)
- if windll.kernel32.GetShortPathNameW(path, buf, len(buf)):
- path = buf.value
-
- if path not in sys.path:
- sys.path.append(path)
-
-
-lib_folder = os.path.join(sublime.packages_path(), 'Package Control', 'lib')
-add_to_path(os.path.join(lib_folder, 'all'))
-
-if os.name == 'nt':
- add_to_path(os.path.join(lib_folder, 'windows'))
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/thread_progress.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/thread_progress.py
deleted file mode 100644
index b40c564..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/thread_progress.py
+++ /dev/null
@@ -1,46 +0,0 @@
-import sublime
-
-
-class ThreadProgress():
- """
- Animates an indicator, [= ], in the status area while a thread runs
-
- :param thread:
- The thread to track for activity
-
- :param message:
- The message to display next to the activity indicator
-
- :param success_message:
- The message to display once the thread is complete
- """
-
- def __init__(self, thread, message, success_message):
- self.thread = thread
- self.message = message
- self.success_message = success_message
- self.addend = 1
- self.size = 8
- sublime.set_timeout(lambda: self.run(0), 100)
-
- def run(self, i):
- if not self.thread.is_alive():
- if hasattr(self.thread, 'result') and not self.thread.result:
- sublime.status_message('')
- return
- sublime.status_message(self.success_message)
- return
-
- before = i % self.size
- after = (self.size - 1) - before
-
- sublime.status_message('%s [%s=%s]' % \
- (self.message, ' ' * before, ' ' * after))
-
- if not after:
- self.addend = -1
- if not before:
- self.addend = 1
- i += self.addend
-
- sublime.set_timeout(lambda: self.run(i), 100)
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/unicode.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/unicode.py
deleted file mode 100644
index f0464a2..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/unicode.py
+++ /dev/null
@@ -1,49 +0,0 @@
-import os
-import locale
-import sys
-
-
-# Sublime Text on OS X does not seem to report the correct encoding
-# so we hard-code that to UTF-8
-_encoding = 'utf-8' if sys.platform == 'darwin' else locale.getpreferredencoding()
-
-_fallback_encodings = ['utf-8', 'cp1252']
-
-
-def unicode_from_os(e):
- """
- This is needed as some exceptions coming from the OS are
- already encoded and so just calling unicode(e) will result
- in an UnicodeDecodeError as the string isn't in ascii form.
-
- :param e:
- The exception to get the value of
-
- :return:
- The unicode version of the exception message
- """
-
- if sys.version_info >= (3,):
- return str(e)
-
- try:
- if isinstance(e, Exception):
- e = e.message
-
- if isinstance(e, unicode):
- return e
-
- if isinstance(e, int):
- e = str(e)
-
- return unicode(e, _encoding)
-
- # If the "correct" encoding did not work, try some defaults, and then just
- # obliterate characters that we can't seen to decode properly
- except UnicodeDecodeError:
- for encoding in _fallback_encodings:
- try:
- return unicode(e, encoding, errors='strict')
- except:
- pass
- return unicode(e, errors='replace')
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/upgraders/__init__.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/upgraders/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/upgraders/git_upgrader.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/upgraders/git_upgrader.py
deleted file mode 100644
index 878b1fd..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/upgraders/git_upgrader.py
+++ /dev/null
@@ -1,106 +0,0 @@
-import os
-
-from ..cache import set_cache, get_cache
-from ..show_error import show_error
-from .vcs_upgrader import VcsUpgrader
-
-
-class GitUpgrader(VcsUpgrader):
- """
- Allows upgrading a local git-repository-based package
- """
-
- cli_name = 'git'
-
- def retrieve_binary(self):
- """
- Returns the path to the git executable
-
- :return: The string path to the executable or False on error
- """
-
- name = 'git'
- if os.name == 'nt':
- name += '.exe'
- binary = self.find_binary(name)
- if binary and os.path.isdir(binary):
- full_path = os.path.join(binary, name)
- if os.path.exists(full_path):
- binary = full_path
- if not binary:
- show_error((u'Unable to find %s. Please set the git_binary setting by accessing the ' +
- u'Preferences > Package Settings > Package Control > Settings \u2013 User menu entry. ' +
- u'The Settings \u2013 Default entry can be used for reference, but changes to that will be ' +
- u'overwritten upon next upgrade.') % name)
- return False
-
- if os.name == 'nt':
- tortoise_plink = self.find_binary('TortoisePlink.exe')
- if tortoise_plink:
- os.environ.setdefault('GIT_SSH', tortoise_plink)
- return binary
-
- def get_working_copy_info(self):
- binary = self.retrieve_binary()
- if not binary:
- return False
-
- # Get the current branch name
- res = self.execute([binary, 'symbolic-ref', '-q', 'HEAD'], self.working_copy)
- branch = res.replace('refs/heads/', '')
-
- # Figure out the remote and the branch name on the remote
- remote = self.execute([binary, 'config', '--get', 'branch.%s.remote' % branch], self.working_copy)
- res = self.execute([binary, 'config', '--get', 'branch.%s.merge' % branch], self.working_copy)
- remote_branch = res.replace('refs/heads/', '')
-
- return {
- 'branch': branch,
- 'remote': remote,
- 'remote_branch': remote_branch
- }
-
- def run(self):
- """
- Updates the repository with remote changes
-
- :return: False or error, or True on success
- """
-
- binary = self.retrieve_binary()
- if not binary:
- return False
-
- info = self.get_working_copy_info()
-
- args = [binary]
- args.extend(self.update_command)
- args.extend([info['remote'], info['remote_branch']])
- self.execute(args, self.working_copy)
- return True
-
- def incoming(self):
- """:return: bool if remote revisions are available"""
-
- cache_key = self.working_copy + '.incoming'
- incoming = get_cache(cache_key)
- if incoming != None:
- return incoming
-
- binary = self.retrieve_binary()
- if not binary:
- return False
-
- info = self.get_working_copy_info()
-
- res = self.execute([binary, 'fetch', info['remote']], self.working_copy)
- if res == False:
- return False
-
- args = [binary, 'log']
- args.append('..%s/%s' % (info['remote'], info['remote_branch']))
- output = self.execute(args, self.working_copy)
- incoming = len(output) > 0
-
- set_cache(cache_key, incoming, self.cache_length)
- return incoming
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/upgraders/hg_upgrader.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/upgraders/hg_upgrader.py
deleted file mode 100644
index 36dfb48..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/upgraders/hg_upgrader.py
+++ /dev/null
@@ -1,74 +0,0 @@
-import os
-
-from ..cache import set_cache, get_cache
-from ..show_error import show_error
-from .vcs_upgrader import VcsUpgrader
-
-
-class HgUpgrader(VcsUpgrader):
- """
- Allows upgrading a local mercurial-repository-based package
- """
-
- cli_name = 'hg'
-
- def retrieve_binary(self):
- """
- Returns the path to the hg executable
-
- :return: The string path to the executable or False on error
- """
-
- name = 'hg'
- if os.name == 'nt':
- name += '.exe'
- binary = self.find_binary(name)
- if binary and os.path.isdir(binary):
- full_path = os.path.join(binary, name)
- if os.path.exists(full_path):
- binary = full_path
- if not binary:
- show_error((u'Unable to find %s. Please set the hg_binary setting by accessing the ' +
- u'Preferences > Package Settings > Package Control > Settings \u2013 User menu entry. ' +
- u'The Settings \u2013 Default entry can be used for reference, but changes to that will be ' +
- u'overwritten upon next upgrade.') % name)
- return False
- return binary
-
- def run(self):
- """
- Updates the repository with remote changes
-
- :return: False or error, or True on success
- """
-
- binary = self.retrieve_binary()
- if not binary:
- return False
- args = [binary]
- args.extend(self.update_command)
- args.append('default')
- self.execute(args, self.working_copy)
- return True
-
- def incoming(self):
- """:return: bool if remote revisions are available"""
-
- cache_key = self.working_copy + '.incoming'
- incoming = get_cache(cache_key)
- if incoming != None:
- return incoming
-
- binary = self.retrieve_binary()
- if not binary:
- return False
-
- args = [binary, 'in', '-q', 'default']
- output = self.execute(args, self.working_copy)
- if output == False:
- return False
-
- incoming = len(output) > 0
-
- set_cache(cache_key, incoming, self.cache_length)
- return incoming
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/upgraders/vcs_upgrader.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/upgraders/vcs_upgrader.py
deleted file mode 100644
index d82abe7..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/upgraders/vcs_upgrader.py
+++ /dev/null
@@ -1,27 +0,0 @@
-from ..cmd import create_cmd, Cli
-
-
-class VcsUpgrader(Cli):
- """
- Base class for updating packages that are a version control repository on local disk
-
- :param vcs_binary:
- The full filesystem path to the executable for the version control
- system. May be set to None to allow the code to try and find it.
-
- :param update_command:
- The command to pass to the version control executable to update the
- repository.
-
- :param working_copy:
- The local path to the working copy/package directory
-
- :param cache_length:
- The lenth of time to cache if incoming changesets are available
- """
-
- def __init__(self, vcs_binary, update_command, working_copy, cache_length, debug):
- self.update_command = update_command
- self.working_copy = working_copy
- self.cache_length = cache_length
- super(VcsUpgrader, self).__init__(vcs_binary, debug)
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/versions.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/versions.py
deleted file mode 100644
index 90a5ef6..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/package_control/versions.py
+++ /dev/null
@@ -1,81 +0,0 @@
-import re
-
-from .semver import SemVer
-from .console_write import console_write
-
-
-def semver_compat(v):
- if isinstance(v, SemVer):
- return str(v)
-
- # Allowing passing in a dict containing info about a package
- if isinstance(v, dict):
- if 'version' not in v:
- return '0'
- v = v['version']
-
- # Trim v off of the front
- v = re.sub('^v', '', v)
-
- # We prepend 0 to all date-based version numbers so that developers
- # may switch to explicit versioning from GitHub/BitBucket
- # versioning based on commit dates.
- #
- # When translating dates into semver, the way to get each date
- # segment into the version is to treat the year and month as
- # minor and patch, and then the rest as a numeric build version
- # with four different parts. The result looks like:
- # 0.2012.11+10.31.23.59
- date_match = re.match('(\d{4})\.(\d{2})\.(\d{2})\.(\d{2})\.(\d{2})\.(\d{2})$', v)
- if date_match:
- v = '0.%s.%s+%s.%s.%s.%s' % date_match.groups()
-
- # This handles version that were valid pre-semver with 4+ dotted
- # groups, such as 1.6.9.0
- four_plus_match = re.match('(\d+\.\d+\.\d+)[T\.](\d+(\.\d+)*)$', v)
- if four_plus_match:
- v = '%s+%s' % (four_plus_match.group(1), four_plus_match.group(2))
-
- # Semver must have major, minor, patch
- elif re.match('^\d+$', v):
- v += '.0.0'
- elif re.match('^\d+\.\d+$', v):
- v += '.0'
- return v
-
-
-def version_comparable(string):
- return SemVer(semver_compat(string))
-
-
-def version_exclude_prerelease(versions):
- output = []
- for version in versions:
- if SemVer(semver_compat(version)).prerelease != None:
- continue
- output.append(version)
- return output
-
-
-def version_filter(versions, allow_prerelease=False):
- output = []
- for version in versions:
- no_v_version = re.sub('^v', '', version)
- if not SemVer.valid(no_v_version):
- continue
- if not allow_prerelease and SemVer(no_v_version).prerelease != None:
- continue
- output.append(version)
- return output
-
-
-def _version_sort_key(item):
- return SemVer(semver_compat(item))
-
-
-def version_sort(sortable, **kwargs):
- try:
- return sorted(sortable, key=_version_sort_key, **kwargs)
- except (ValueError) as e:
- console_write(u"Error sorting versions - %s" % e, True)
- return []
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/readme.creole b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/readme.creole
deleted file mode 100644
index 50b3d69..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Package Control/readme.creole
+++ /dev/null
@@ -1,62 +0,0 @@
-= Sublime Package Control
-
-A Sublime Text 2/3 (http://www.sublimetext.com) package manager for easily
-discovering, installing, upgrading and removing packages. Also includes an
-automatic updater and package creation tool.
-
-Packages can be installed from GitHub, BitBucket or custom package repositories.
-The plugin uses a channel and repository system to allow users to find new
-packages over time without any work. It also supports working with packages that
-were manually installed.
-
-Please see http://wbond.net/sublime_packages/package_control for install
-instructions, screenshots and documentation.
-
-== License
-
-Sublime Package Control is licensed under the MIT license.
-
-All of the source code (except for package_control/semver.py), is under the
-license:
-
- Copyright (c) 2011-2013 Will Bond
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
- in the Software without restriction, including without limitation the rights
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- THE SOFTWARE.
-
-package_control/semver.py is under the license:
-
- Copyright (c) 2013 Zachary King, FichteFoll
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
- in the Software without restriction, including without limitation the rights
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- THE SOFTWARE.
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/RecentActiveFiles/Default (Linux).sublime-keymap b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/RecentActiveFiles/Default (Linux).sublime-keymap
deleted file mode 100644
index d086f83..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/RecentActiveFiles/Default (Linux).sublime-keymap
+++ /dev/null
@@ -1,6 +0,0 @@
-[
- {
- "keys": ["super+k", "super+t"],
- "command": "recent_active_files"
- }
-]
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/RecentActiveFiles/Default (OSX).sublime-keymap b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/RecentActiveFiles/Default (OSX).sublime-keymap
deleted file mode 100644
index d086f83..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/RecentActiveFiles/Default (OSX).sublime-keymap
+++ /dev/null
@@ -1,6 +0,0 @@
-[
- {
- "keys": ["super+k", "super+t"],
- "command": "recent_active_files"
- }
-]
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/RecentActiveFiles/Default (Windows).sublime-keymap b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/RecentActiveFiles/Default (Windows).sublime-keymap
deleted file mode 100644
index d086f83..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/RecentActiveFiles/Default (Windows).sublime-keymap
+++ /dev/null
@@ -1,6 +0,0 @@
-[
- {
- "keys": ["super+k", "super+t"],
- "command": "recent_active_files"
- }
-]
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/RecentActiveFiles/Default.sublime-commands b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/RecentActiveFiles/Default.sublime-commands
deleted file mode 100644
index a1cb933..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/RecentActiveFiles/Default.sublime-commands
+++ /dev/null
@@ -1,6 +0,0 @@
-[
- {
- "caption": "RecentActiveFiles: recent_active_files",
- "command": "recent_active_files"
- }
-]
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/RecentActiveFiles/README.md b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/RecentActiveFiles/README.md
deleted file mode 100644
index f6a1aff..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/RecentActiveFiles/README.md
+++ /dev/null
@@ -1,18 +0,0 @@
-RecentActiveFiles
-========
-
-Sublime Text 2 plugin that shows and opens recent activated files.
-
-![Screenshot](http://i.imgur.com/T6kIQ.png)
-
-The idea was got from here: [GotoRecent](https://github.com/paccator/GotoRecent)
-
-## Installation
-
-```
-$ cd ~/Library/Application\ Support/Sublime\ Text\ 2/Packages
-$ git clone https://github.com/jugyo/SublimeRecentActiveFiles.git RecentActiveFiles
-```
-## Usage
-
-The `recent_active_files` command is binded to `super+k + super+t`.
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/RecentActiveFiles/RecentActiveFiles.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/RecentActiveFiles/RecentActiveFiles.py
deleted file mode 100644
index e8cc71d..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/RecentActiveFiles/RecentActiveFiles.py
+++ /dev/null
@@ -1,40 +0,0 @@
-import sublime_plugin
-import os
-
-class RecentActiveFilesEventListener(sublime_plugin.EventListener):
- def on_activated(self, view):
- if view.file_name():
- view.window().run_command("recent_active_files", { "file_name": view.file_name() })
-
-class RecentActiveFilesCommand(sublime_plugin.WindowCommand):
- def __init__(self, window):
- sublime_plugin.WindowCommand.__init__(self, window)
- self.recent_active_files = []
-
- def unshift(self, file_name):
- if file_name in self.recent_active_files:
- self.recent_active_files.remove(file_name)
- self.recent_active_files.insert(0, file_name)
-
- def path_form_project(self, path):
- for folder in self.window.folders():
- path = path.replace(folder + '/', '', 1)
- return path
-
- def run(self, file_name=None):
- if file_name:
- self.unshift(file_name)
- else:
- if self.window.active_view() is not None:
- active_file = self.window.active_view().file_name()
- files = filter(lambda f: f != active_file, self.recent_active_files)
- else:
- files = self.recent_active_files
-
- items = [[os.path.basename(f), self.path_form_project(f)] for f in files]
-
- def on_done(index):
- if index >= 0:
- self.window.open_file(files[index])
-
- self.window.show_quick_panel(items, on_done)
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/RecentActiveFiles/package-metadata.json b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/RecentActiveFiles/package-metadata.json
deleted file mode 100644
index 7b01737..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/RecentActiveFiles/package-metadata.json
+++ /dev/null
@@ -1 +0,0 @@
-{"url": "https://github.com/jugyo/SublimeRecentActiveFiles", "version": "2013.01.17.08.59.02", "description": "Sublime Text 2 plugin that shows and opens recent activated files."}
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Search Anywhere/Context.sublime-menu b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Search Anywhere/Context.sublime-menu
deleted file mode 100644
index f2a1b5e..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Search Anywhere/Context.sublime-menu
+++ /dev/null
@@ -1,47 +0,0 @@
-[
- {
- "caption": "Search Anywhere",
- "mnemonic": "w",
- "id": "searchanywhere",
- "children":
- [
- {
- "command": "search_anywhere_from_selection",
- "caption": "Search From Selection"
- },
- {
- "command": "search_anywhere_from_input",
- "caption": "Search From Input"
- },
- {
- "caption": "-"
- },
- {
- "caption": "Select Search Engine Then",
- "children":
- [
- {
- "command": "search_anywhere_from_selection_ask",
- "caption": "Search From Selection"
- },
- {
- "command": "search_anywhere_from_input_ask",
- "caption": "Search From Input"
- }
-
- ]
- },
- {
- "caption": "-"
- },
- {
- "command": "search_anywhere_select_default_search_engine",
- "caption": "Set Default Search Engine"
- },
- {
- "command": "search_anywhere_select_search_engine_for_type",
- "caption": "Set Search Engine For File Type"
- }
- ]
- }
-]
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Search Anywhere/Default.sublime-commands b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Search Anywhere/Default.sublime-commands
deleted file mode 100644
index 0ea3a93..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Search Anywhere/Default.sublime-commands
+++ /dev/null
@@ -1,26 +0,0 @@
-[
- {
- "caption": "Search Anywhere: From Selection",
- "command": "search_anywhere_from_selection"
- },
- {
- "caption": "Search Anywhere: From Input",
- "command": "search_anywhere_from_input"
- },
- {
- "caption": "Search Anywhere: Set Default Search Engine",
- "command": "search_anywhere_select_default_search_engine"
- },
- {
- "caption": "Search Anywhere: Set Search Engine For File Type",
- "command": "search_anywhere_select_search_engine_for_type"
- },
- {
- "caption": "Search Anywhere: From Selection (ask Search Engine)",
- "command": "search_anywhere_from_selection_ask"
- },
- {
- "caption": "Search Anywhere: From Input (ask Search Engine)",
- "command": "search_anywhere_from_input_ask"
- }
-]
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Search Anywhere/Main.sublime-menu b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Search Anywhere/Main.sublime-menu
deleted file mode 100644
index 5e06caf..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Search Anywhere/Main.sublime-menu
+++ /dev/null
@@ -1,55 +0,0 @@
-[
- {
- "caption": "Tools",
- "mnemonic": "t",
- "id": "tools",
- "children":
- [
- {
- "caption": "Search Anywhere",
- "mnemonic": "w",
- "id": "searchanywhere",
- "children":
- [
- {
- "command": "search_anywhere_from_selection",
- "caption": "Search From Selection"
- },
- {
- "command": "search_anywhere_from_input",
- "caption": "Search From Input"
- },
- {
- "caption": "-"
- },
- {
- "caption": "Select Search Engine Then",
- "children":
- [
- {
- "command": "search_anywhere_from_selection_ask",
- "caption": "Search From Selection"
- },
- {
- "command": "search_anywhere_from_input_ask",
- "caption": "Search From Input"
- }
-
- ]
- },
- {
- "caption": "-"
- },
- {
- "command": "search_anywhere_select_default_search_engine",
- "caption": "Set Default Search Engine"
- },
- {
- "command": "search_anywhere_select_search_engine_for_type",
- "caption": "Set Search Engine For File Type"
- }
- ]
- }
- ]
- }
-]
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Search Anywhere/README.md b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Search Anywhere/README.md
deleted file mode 100644
index 392943b..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Search Anywhere/README.md
+++ /dev/null
@@ -1,25 +0,0 @@
-# Sublime Text 2 Search Anywhere Plugin
-
-A plugin that allows the user to search the web through multiple search engines. Each file type can have its own search engine.
-
-## Install
-
-The preferred method is to use the [Sublime Package Manager](http://wbond.net/sublime_packages/package_control). Alternatively, the files can be obtained on github:
-
- $ https://github.com/ericmartel/Sublime-Text-2-Search-Anywhere-Plugin
-
-## Complete Documentation
-
-A website is currently under construction to explain the usage of the plugin in details. In the meantime, please visit this [Web Site](http://www.ericmartel.com/sublime-text-2-search-anywhere/).
-
-# License
-
-All of Sublime Text 2 Search Anywhere Plugin is licensed under the MIT license.
-
-Copyright (c) 2012 Eric Martel
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Search Anywhere/messages.json b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Search Anywhere/messages.json
deleted file mode 100644
index d04c6d8..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Search Anywhere/messages.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "install": "messages/install.txt"
-}
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Search Anywhere/messages/install.txt b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Search Anywhere/messages/install.txt
deleted file mode 100644
index 9e8ff3c..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Search Anywhere/messages/install.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-Search Anywhere by Eric Martel (emartel@gmail.com / www.ericmartel.com)
-
-Thank you for installing Search Anywhere. For detailed instructions please visit http://www.ericmartel.com/sublime-text-2-search-anywhere/. All commands are available through menus, context menus and the command palette.
-
-Please direct any feedback to emartel@gmail.com or through github at https://github.com/ericmartel/Sublime-Text-2-Search-Anywhere-Plugin.
-
-Thank you for your support.
-
-Eric Martel
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Search Anywhere/package-metadata.json b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Search Anywhere/package-metadata.json
deleted file mode 100644
index 9063051..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Search Anywhere/package-metadata.json
+++ /dev/null
@@ -1 +0,0 @@
-{"url": "http://www.ericmartel.com/sublime-text-2-search-anywhere/", "version": "2012.03.20.20.35.46", "description": "Utility to quickly search on multiple search engines from the current selection or custom input. Default search engine configurable per file type. Search Engines defined through JSON including Google, Yahoo, Bing, Stack Overflow, PHP.net, sitepoint and caniuse.com "}
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Search Anywhere/searchanywhere.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Search Anywhere/searchanywhere.py
deleted file mode 100644
index 2b33061..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Search Anywhere/searchanywhere.py
+++ /dev/null
@@ -1,160 +0,0 @@
-# Written by Eric Martel (emartel@gmail.com / www.ericmartel.com)
-
-import sublime
-import sublime_plugin
-
-import subprocess
-import webbrowser
-import threading
-import os
-import json
-
-searchanywhere_dir = os.getcwdu()
-
-# Helper functions
-def SearchFor(view, text, searchurl):
- if not searchurl:
- # see if we have an extension match first, then use default
- settings = sublime.load_settings(__name__ + '.sublime-settings')
-
- filename, ext = os.path.splitext(view.file_name())
- typesettings = settings.get('searchanywhere_type_searchengine', [])
-
- foundsetting = False
- for typesetting in typesettings:
- if typesetting['extension'] == ext:
- foundsetting = True
- searchurl = typesetting['searchurl']
-
- if not foundsetting:
- if settings.has('searchanywhere_searchurl'):
- searchurl = settings.get('searchanywhere_searchurl')
- else:
- sublime.error_message(__name__ + ': No Search Engine selected')
- return
- else:
- # search url is provided by the caller
- pass
-
- url = searchurl.replace('{0}', text.replace(' ','%20'))
- webbrowser.open_new_tab(url)
-
-def ShowSearchEnginesList(window, callback):
- searchengines = []
- if os.path.exists(searchanywhere_dir + os.sep + 'searchengines.json'):
- f = open(searchanywhere_dir + os.sep + 'searchengines.json')
- searchengineslist = json.load(f)
- f.close()
-
- for entry in searchengineslist.get('searchengines'):
- formattedentry = []
- formattedentry.append(entry.get('name'))
- formattedentry.append(entry.get('baseurl'))
- searchengines.append(formattedentry)
-
- window.show_quick_panel(searchengines, callback)
-
-def GetSearchEngineEntry(picked):
- f = open(searchanywhere_dir + os.sep + 'searchengines.json')
- searchengineslist = json.load(f)
- entry = searchengineslist.get('searchengines')[picked]
- f.close()
- return entry
-
-class SearchAnywhereFromSelectionAskCommand(sublime_plugin.TextCommand):
- def run(self, edit):
- ShowSearchEnginesList(self.view.window(), self.on_select_done)
-
- def on_select_done(self, picked):
- entry = GetSearchEngineEntry(picked)
-
- for selection in self.view.sel():
- # if the user didn't select anything, search the currently highlighted word
- if selection.empty():
- selection = self.view.word(selection)
-
- text = self.view.substr(selection)
- SearchFor(self.view, text, entry.get('searchurl'))
-
-class SearchAnywhereFromInputAskCommand(sublime_plugin.WindowCommand):
- def run(self):
- ShowSearchEnginesList(self.window, self.on_select_done)
-
- def on_select_done(self, picked):
- self.entry = GetSearchEngineEntry(picked)
-
- self.window.show_input_panel('Search on ' + self.entry.get('name') + ' for', '', self.on_done, self.on_change, self.on_cancel)
-
- def on_done(self, input):
- SearchFor(self.window.active_view(), input, self.entry.get('searchurl'))
-
- def on_change(self, input):
- pass
-
- def on_cancel(self):
- pass
-
-
-class SearchAnywhereFromSelectionCommand(sublime_plugin.TextCommand):
- def run(self, edit):
- for selection in self.view.sel():
- # if the user didn't select anything, search the currently highlighted word
- if selection.empty():
- selection = self.view.word(selection)
-
- text = self.view.substr(selection)
- SearchFor(self.view, text, None)
-
-class SearchAnywhereFromInputCommand(sublime_plugin.WindowCommand):
- def run(self):
- settings = sublime.load_settings(__name__ + '.sublime-settings')
- if settings.has('searchanywhere_searchengine'):
- engine = settings.get('searchanywhere_searchengine')
- self.window.show_input_panel('Search on ' + engine + ' for', '', self.on_done, self.on_change, self.on_cancel)
- else:
- sublime.error_message(__name__ + ': No Search Engine selected')
-
- def on_done(self, input):
- SearchFor(self.window.active_view(), input, None)
-
- def on_change(self, input):
- pass
-
- def on_cancel(self):
- pass
-
-# Sets the default Search Engine to use
-class SearchAnywhereSelectDefaultSearchEngineCommand(sublime_plugin.WindowCommand):
- def run(self):
- ShowSearchEnginesList(self.window, self.on_select_done)
-
- def on_select_done(self, picked):
- entry = GetSearchEngineEntry(picked)
-
- settings = sublime.load_settings(__name__ + '.sublime-settings')
- settings.set('searchanywhere_searchengine', entry.get('name'))
- settings.set('searchanywhere_searchurl', entry.get('searchurl'))
- sublime.save_settings(__name__ + '.sublime-settings')
-
-# Sets the default Search Engine to use for files sharing the view's extension
-class SearchAnywhereSelectSearchEngineForTypeCommand(sublime_plugin.WindowCommand):
- def run(self):
- self.filename, self.ext = os.path.splitext(self.window.active_view().file_name())
- ShowSearchEnginesList(self.window, self.on_select_done)
-
- def on_select_done(self, picked):
- entry = GetSearchEngineEntry(picked)
-
- settings = sublime.load_settings(__name__ + '.sublime-settings')
-
- typesettings = settings.get('searchanywhere_type_searchengine', [])
-
- newsetting = {}
- newsetting['extension'] = self.ext
- newsetting['name'] = entry.get('name')
- newsetting['searchurl'] = entry.get('searchurl')
-
- typesettings.append(newsetting)
-
- settings.set('searchanywhere_type_searchengine', typesettings)
- sublime.save_settings(__name__ + '.sublime-settings')
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Search Anywhere/searchengines.json b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Search Anywhere/searchengines.json
deleted file mode 100644
index 6e77d7f..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Search Anywhere/searchengines.json
+++ /dev/null
@@ -1,55 +0,0 @@
-{
- "schema_version": "1.2",
- "searchengines": [
- {
- "name": "Google",
- "baseurl": "www.google.com",
- "searchurl": "http://www.google.com/search?q={0}"
- },
- {
- "name": "Stack Overflow",
- "baseurl": "www.stackoverflow.com",
- "searchurl": "http://stackoverflow.com/search?tab=relevance&q={0}"
- },
- {
- "name": "PHP",
- "baseurl": "www.php.net",
- "searchurl": "http://ca3.php.net/manual-lookup.php?pattern={0}&scope=quickref"
- },
- {
- "name": "Bing",
- "baseurl": "www.bing.com",
- "searchurl": "http://www.bing.com/search?q={0}"
- },
- {
- "name": "Yahoo",
- "baseurl": "www.yahoo.com",
- "searchurl": "http://search.yahoo.com/search?p={0}"
- },
- {
- "name": "sitepoint",
- "baseurl": "reference.sitepoint.com",
- "searchurl": "http://reference.sitepoint.com/html/{0}"
- },
- {
- "name": "When can I use...",
- "baseurl": "caniuse.com",
- "searchurl": "http://caniuse.com/#search={0}"
- },
- {
- "name": "Mozilla Developer Network",
- "baseurl": "developer.mozilla.org",
- "searchurl": "https://developer.mozilla.org/en-US/search?q={0}"
- },
- {
- "name": "Ruby on Rails",
- "baseurl": "api.rubyonrails.org",
- "searchurl": "http://api.rubyonrails.org/?q={0}"
- },
- {
- "name": "Ruby Doc",
- "baseurl": "www.ruby-doc.org",
- "searchurl": "http://www.ruby-doc.org/search.html?cx=011815814100681837392%3Awnccv6st5qk&q={0}&sa=Search&cof=FORID%3A9"
- }
- ]
-}
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/.gitignore b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/.gitignore
deleted file mode 100644
index a1ba83b..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-*.pyc
-*.cache
-*.sublime-project
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/Commands.sublime-commands b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/Commands.sublime-commands
deleted file mode 100644
index 9d0c087..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/Commands.sublime-commands
+++ /dev/null
@@ -1,88 +0,0 @@
-[
- {
- "caption": "File: New File Relative to Current View",
- "command": "side_bar_new_file"
- },
- {
- "caption": "File: Rename",
- "command": "side_bar_rename"
- },
- {
- "caption": "File: Duplicate",
- "command": "side_bar_duplicate"
- },
- {
- "caption": "File: Reveal",
- "command": "side_bar_reveal"
- },
- {
- "caption": "File: Move",
- "command": "side_bar_move"
- },
- {
- "caption": "File: Delete",
- "command": "side_bar_delete"
- },
- {
- "caption": "Project: Edit",
- "command": "side_bar_project_open_file"
- },
- {
- "caption": "File: Copy Name",
- "command": "side_bar_copy_name"
- },
- {
- "caption": "File: Copy Name Encoded",
- "command": "side_bar_copy_name_encoded"
- },
- {
- "caption": "File: Copy Path",
- "command": "side_bar_copy_path"
- },
- {
- "caption": "File: Copy Path as URI",
- "command": "side_bar_copy_path_encoded"
- },
- {
- "caption": "File: Copy Path From Project",
- "command": "side_bar_copy_path_absolute_from_project"
- },
- {
- "caption": "File: Copy Path From Project Encoded",
- "command": "side_bar_copy_path_absolute_from_project_encoded"
- },
- {
- "caption": "File: Copy as Tag a",
- "command": "side_bar_copy_tag_ahref"
- },
- {
- "caption": "File: Copy as Tag script",
- "command": "side_bar_copy_tag_script"
- },
- {
- "caption": "File: Copy as Tag style",
- "command": "side_bar_copy_tag_style"
- },
- {
- "caption": "File: Copy URL",
- "command": "side_bar_copy_url"
- },
- {
- "caption": "File: Search Files",
- "command": "side_bar_find_files_path_containing"
- },
- {
- "caption": "File: Open In Browser - Testing Server",
- "command": "side_bar_open_in_browser",
- "args":{"paths":[], "type":"testing"}
- },
- {
- "caption": "File: Open In Browser - Production Server",
- "command": "side_bar_open_in_browser",
- "args":{"paths":[], "type":"production"}
- },
- {
- "caption": "Side Bar: Refresh",
- "command": "refresh_folder_list"
- }
-]
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/Default.sublime-keymap b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/Default.sublime-keymap
deleted file mode 100644
index a49123e..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/Default.sublime-keymap
+++ /dev/null
@@ -1,10 +0,0 @@
-[
- { "keys": ["f12"],
- "command": "side_bar_open_in_browser" ,
- "args":{"paths":[], "type":"testing"}
- },
- { "keys": ["alt+f12"],
- "command": "side_bar_open_in_browser",
- "args":{"paths":[], "type":"production"}
- }
-]
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/Main.sublime-menu b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/Main.sublime-menu
deleted file mode 100644
index 81896f2..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/Main.sublime-menu
+++ /dev/null
@@ -1,88 +0,0 @@
-[
- {
- "caption": "Preferences",
- "mnemonic": "n",
- "id": "preferences",
- "children":
- [
- {
- "caption": "Package Settings",
- "mnemonic": "P",
- "id": "package-settings",
- "children":
- [
- {
- "caption": "Side Bar",
- "children":
- [
- {
- "command": "open_file", "args":
- {
- "file": "${packages}/SideBarEnhancements/Side Bar.sublime-settings"
- },
- "caption": "Settings – Default"
- },
- {
- "command": "open_file", "args":
- {
- "file": "${packages}/User/Side Bar.sublime-settings"
- },
- "caption": "Settings – User"
- },
- { "caption": "-" },
- {
- "command": "open_file",
- "args": {
- "file": "${packages}/SideBarEnhancements/Default (OSX).sublime-keymap",
- "platform": "OSX"
- },
- "caption": "Key Bindings – Default"
- },
- {
- "command": "open_file",
- "args": {
- "file": "${packages}/SideBarEnhancements/Default (Linux).sublime-keymap",
- "platform": "Linux"
- },
- "caption": "Key Bindings – Default"
- },
- {
- "command": "open_file",
- "args": {
- "file": "${packages}/SideBarEnhancements/Default (Windows).sublime-keymap",
- "platform": "Windows"
- },
- "caption": "Key Bindings – Default"
- },
- {
- "command": "open_file",
- "args": {
- "file": "${packages}/User/Default (OSX).sublime-keymap",
- "platform": "OSX"
- },
- "caption": "Key Bindings – User"
- },
- {
- "command": "open_file",
- "args": {
- "file": "${packages}/User/Default (Linux).sublime-keymap",
- "platform": "Linux"
- },
- "caption": "Key Bindings – User"
- },
- {
- "command": "open_file",
- "args": {
- "file": "${packages}/User/Default (Windows).sublime-keymap",
- "platform": "Windows"
- },
- "caption": "Key Bindings – User"
- },
- { "caption": "-" }
- ]
- }
- ]
- }
- ]
- }
-]
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/Side Bar.sublime-menu b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/Side Bar.sublime-menu
deleted file mode 100644
index 2670ed9..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/Side Bar.sublime-menu
+++ /dev/null
@@ -1,116 +0,0 @@
-[
- {"caption":"-", "id":"side-bar-start-separator"},
- { "caption": "New File…", "id": "side-bar-new-file", "command": "side_bar_new_file", "args": {"paths": []} },
- { "caption": "New Folder…", "id": "side-bar-new-directory", "command": "side_bar_new_directory", "args": {"paths": []} },
- { "caption": "-", "id": "side-bar-new-separator"},
-
- { "caption": "Edit", "id": "side-bar-edit", "command": "side_bar_edit", "args": {"paths": []} },
- { "caption": "Open / Run", "id": "side-bar-open", "command": "side_bar_open", "args": {"paths": []} },
- { "caption": "Open In Browser", "id": "side-bar-open-in-browser", "command": "side_bar_open_in_browser", "args": {"paths": []} },
- { "caption": "Open In New Window", "id": "side-bar-open-in-new-window", "command": "side_bar_open_in_new_window", "args": {"paths": []} },
- { "caption": "Open With Finder", "id": "side-bar-open-with-finde", "command": "side_bar_open_with_finder", "args": {"paths": []} },
- { "caption": "Open With", "id": "side-bar-files-open-with",
-
- "children":
- [
-
- { "caption": "-", "id": "side-bar-files-open-with-edit-application-separator"},
- { "caption": "Edit Applications…", "id": "side-bar-files-open-with-edit-applications", "command":"side_bar_files_open_with_edit_applications","args": {"paths": []} },
- { "caption": "-", "id": "side-bar-files-open-with-edit-applications-separator"}
-
- ]
- },
- { "caption": "Reveal", "id": "side-bar-reveal", "command": "side_bar_reveal", "args": {"paths": []} },
-
- { "caption": "-", "id": "side-bar-edit-open-separator" },
-
- { "caption": "Find & Replace…", "id": "side-bar-find-selected", "command": "side_bar_find_in_selected", "args": {"paths": []} },
- { "caption": "Find In Project…", "id": "side-bar-find-in-project", "command": "side_bar_find_in_project", "args": {"paths": []} },
- { "caption": "Find Advanced", "id": "side-bar-find-advanced",
- "children":
- [
- { "caption": "In Parent Folder…", "id": "side-bar-find-parent", "command": "side_bar_find_in_parent", "args": {"paths": []} },
- { "caption": "-", "id": "side-bar-find-parent-separator"},
- { "caption": "In Project Folder…", "id": "side-bar-find-project-folder", "command": "side_bar_find_in_project_folder", "args": {"paths": []} },
- { "caption": "In Project Folders…", "id": "side-bar-find-project-folders", "command": "side_bar_find_in_project_folders"},
- { "caption": "-", "id": "side-bar-find-project-separator"},
- { "id": "side-bar-find-in-files-with-extension", "command": "side_bar_find_in_files_with_extension", "args": {"paths": []}},
- { "caption": "In Paths Containing…", "id": "side-bar-find-files-path-containing", "command": "side_bar_find_files_path_containing", "args": {"paths": []} }
-
- ]
- },
- { "caption": "-", "id": "side-bar-find-separator"},
- { "caption": "Cut", "id": "side-bar-clip-cut", "command": "side_bar_cut", "args": {"paths": []} },
- { "caption": "Copy", "id": "side-bar-clip-copy", "command": "side_bar_copy", "args": {"paths": []} },
- { "caption": "Copy Name", "id": "side-bar-clip-copy-name", "command": "side_bar_copy_name", "args": {"paths": []} },
- { "caption": "Copy Path", "id": "side-bar-clip-copy-path", "command": "side_bar_copy_path_absolute_from_project_encoded", "args": {"paths": []} },
- { "caption": "Copy Dir Path", "id": "side-bar-clip-copy-dir-path", "command": "side_bar_copy_dir_path", "args": {"paths": []} },
- { "caption": "Copy as Text", "id": "side-bar-clip-copy-as",
- "children":
- [
- { "caption": "Relative Path From View Encoded", "id": "side-bar-clip-copy-path-relative-from-view-encoded", "command": "side_bar_copy_path_relative_from_view_encoded", "args": {"paths": []} },
- { "caption": "Relative Path From View", "id": "side-bar-clip-copy-path-relative-from-view", "command": "side_bar_copy_path_relative_from_view", "args": {"paths": []} },
- { "caption": "-", "id": "side-bar-clip-copy-path-relative-from-view-separator"},
-
- { "caption": "Relative Path From Project Encoded", "id": "side-bar-clip-copy-path-relative-from-project-encoded", "command": "side_bar_copy_path_relative_from_project_encoded", "args": {"paths": []} },
- { "caption": "Relative Path From Project", "id": "side-bar-clip-copy-path-relative-from-project", "command": "side_bar_copy_path_relative_from_project", "args": {"paths": []} },
- { "caption": "-", "id": "side-bar-clip-copy-path-relative-from-project-separator"},
-
- { "caption": "Absolute Path From Project Encoded", "id": "side-bar-clip-copy-path-absolute-from-project-encoded", "command": "side_bar_copy_path_absolute_from_project_encoded", "args": {"paths": []} },
- { "caption": "Absolute Path From Project", "id": "side-bar-clip-copy-path-absolute-from-project", "command": "side_bar_copy_path_absolute_from_project", "args": {"paths": []} },
- { "caption": "-", "id": "side-bar-clip-copy-path-absolute-from-project-separator"},
-
- { "caption": "Path as URI", "id": "side-bar-clip-copy-path-encoded", "command": "side_bar_copy_path_encoded", "args": {"paths": []} },
- { "caption": "Path", "id": "side-bar-clip-copy-path", "command": "side_bar_copy_path", "args": {"paths": []} },
- { "caption": "-", "id": "side-bar-clip-copy-path-separator"},
-
- { "caption": "Name Encoded", "id": "side-bar-clip-copy-name-encoded", "command": "side_bar_copy_name_encoded", "args": {"paths": []} },
- { "caption": "-", "id": "side-bar-clip-copy-name-encoded-separator"},
-
- { "caption": "URL", "id": "side-bar-clip-copy-url", "command": "side_bar_copy_url", "args": {"paths": []} },
- { "caption": "-", "id": "side-bar-clip-copy-url-separator"},
-
- { "caption": "Tag a", "id": "side-bar-clip-copy-tag-a", "command": "side_bar_copy_tag_ahref", "args": {"paths": []} },
- { "caption": "Tag img", "id": "side-bar-clip-copy-tag-img", "command": "side_bar_copy_tag_img", "args": {"paths": []} },
- { "caption": "Tag script", "id": "side-bar-clip-copy-tag-script", "command": "side_bar_copy_tag_script", "args": {"paths": []} },
- { "caption": "Tag style", "id": "side-bar-clip-copy-tag-style", "command": "side_bar_copy_tag_style", "args": {"paths": []} },
- { "caption": "-", "id": "side-bar-clip-copy-tag-separator"},
- { "caption": "Project Folders", "id": "side-bar-clip-copy-project-directories", "command": "side_bar_copy_project_directories", "args": {"paths": []} },
- { "caption": "-", "id": "side-bar-clip-copy-project-directories-separator"},
- { "caption": "Content as UTF-8", "id": "side-bar-clip-copy-content-utf8", "command": "side_bar_copy_content_utf8", "args": {"paths": []} },
- { "caption": "Content as Data URI", "id": "side-bar-clip-copy-content-base-64", "command": "side_bar_copy_content_base64", "args": {"paths": []} }
- ]
- },
-
- { "caption": "Paste", "id": "side-bar-clip-paste", "command": "side_bar_paste", "args": {"paths": [], "in_parent":"False"} },
- { "caption": "Paste in Parent", "id": "side-bar-clip-paste-in-parent", "command": "side_bar_paste", "args": {"paths": [], "in_parent":"True"} },
- { "caption": "-", "id": "side-bar-clip-separator" },
- { "caption": "Duplicate…", "id": "side-bar-duplicate", "command": "side_bar_duplicate", "args": {"paths": []} },
- { "caption": "-", "id": "side-bar-duplicate-separator" },
-
- { "caption": "Rename…", "id": "side-bar-rename", "command": "side_bar_rename", "args": {"paths": []} },
- { "caption": "Move…", "id": "side-bar-move", "command": "side_bar_move", "args": {"paths": []} },
- { "caption": "-", "id": "side-bar-rename-move-separator" },
-
- { "caption": "Delete", "id": "side-bar-delete", "command": "side_bar_delete", "args": {"paths": []} },
- { "caption": "Empty", "id": "side-bar-emptry", "command": "side_bar_empty", "args": {"paths": []} },
- { "caption": "-", "id": "side-bar-delete-separator" },
-
- { "caption": "Refresh", "id": "side-bar-refresh", "command": "refresh_folder_list" },
- { "caption": "-", "id": "side-bar-refresh-separator" },
- { "caption": "Project", "id": "side-bar-project",
- "children":
- [
- { "caption": "Edit Project", "id": "side-bar-project-open-file", "command": "side_bar_project_open_file", "args": {"paths": []} },
- { "caption": "Edit Projects Preview URLs", "id": "side-bar-project-preview-url", "command": "side_bar_project_open_project_preview_urls_file", "args": {"paths": []} },
- { "caption": "-", "id": "side-bar-project-open-file-separator" },
- { "caption": "Promote as Project Folder", "id": "side-bar-project-item-add", "command": "side_bar_project_item_add", "args": {"paths": []} },
- { "caption": "Exclude From Project", "id": "side-bar-project-item-exclude", "command": "side_bar_project_item_exclude", "args": {"paths": []} },
- { "caption": "-", "id": "side-bar-project-item-separator" },
- { "caption": "Remove Folder from Project", "id": "side-bar-project-item-remove-folder", "command": "side_bar_project_item_remove_folder", "args": { "paths": []} },
- { "command": "prompt_add_folder", "caption": "Add Folder to Project…", "mnemonic": "d" }
-
- ]
- },
- { "caption": "-", "id": "side-bar-end-separator" }
-]
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/Side Bar.sublime-settings b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/Side Bar.sublime-settings
deleted file mode 100644
index a5f7958..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/Side Bar.sublime-settings
+++ /dev/null
@@ -1,32 +0,0 @@
-{
- "statusbar_modified_time" : false,
- "statusbar_modified_time_format" : "%A %b %d %H:%M:%S %Y",
-
- "statusbar_file_size" : false,
-
- "close_affected_buffers_when_deleting_even_if_dirty" : false,
-
- "hide_open_with_entries_when_there_are_no_applicable" : false,
-
- "confirm_before_deleting" : true,
-
- "new_files_relative_to_project_root": false,
-
- "disabled_menuitem_edit": false,
- "disabled_menuitem_open_run": false,
- "disabled_menuitem_open_in_browser": false,
- "disabled_menuitem_open_in_new_window": false,
- "disabled_menuitem_find_in_project": false,
- "disabled_menuitem_copy_name": false,
- "disabled_menuitem_copy_path": false,
- "disabled_menuitem_copy_dir_path": true,
- "disabled_menuitem_paste_in_parent": false,
- "disabled_menuitem_empty": true,
-
- //if installed in a default location maybe this works.
- "default_browser": "chrome", //one of this list: firefox, chrome, chromium, opera, safari
-
- "portable_browser": "" // for example: C:/Program Files (x86)/Nightly/firefox.exe
-
-
-}
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/SideBar Results.hidden-tmLanguage b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/SideBar Results.hidden-tmLanguage
deleted file mode 100644
index 982444a..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/SideBar Results.hidden-tmLanguage
+++ /dev/null
@@ -1,50 +0,0 @@
-
-
-
-
- name
- SideBar Results
-
- patterns
-
-
- match
- (Type to search\:).*
- captures
-
- 1
-
- name
- entity.name.function
-
-
-
-
- match
- ([0-9]+) match.*
- captures
-
- 1
-
- name
- entity.name.function
-
-
-
-
- match
- ^(.*(\:|/).*)$
- captures
-
- 1
-
- name
- entity.name.filename.find-in-files
-
-
-
-
- scopeName
- text.find-in-files
-
-
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/SideBar.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/SideBar.py
deleted file mode 100644
index d3b783b..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/SideBar.py
+++ /dev/null
@@ -1,1489 +0,0 @@
-# coding=utf8
-import sublime, sublime_plugin
-import os
-
-import threading, time
-
-from sidebar.SideBarItem import SideBarItem
-from sidebar.SideBarSelection import SideBarSelection
-from sidebar.SideBarProject import SideBarProject
-
-from send2trash import send2trash
-
-# needed for getting local app data path on windows
-if sublime.platform() == 'windows':
- import _winreg
-
-def expand_vars(path):
- for k, v in os.environ.iteritems():
- # dirty hack, this should be autofixed in python3
- try:
- k = unicode(k.encode('utf8'))
- v = unicode(v.encode('utf8'))
- path = path.replace('%'+k+'%', v).replace('%'+k.lower()+'%', v)
- except:
- pass
- return path
-#NOTES
-# A "directory" for this plugin is a "directory"
-# A "directory" for a user is a "folder"
-
-s = sublime.load_settings('Side Bar.sublime-settings')
-
-def check_version():
- version = '11.13.2012.1305.0';
- if s.get('version') != version:
- SideBarItem(sublime.packages_path()+'/SideBarEnhancements/messages/'+version+'.txt', False).edit();
- s.set('version', version);
- sublime.save_settings('Side Bar.sublime-settings')
-
-sublime.set_timeout(lambda:check_version(), 3000);
-
-class SideBarNewFile2Command(sublime_plugin.WindowCommand):
- def run(self, paths = [], name = ""):
- import functools
- self.window.run_command('hide_panel');
- self.window.show_input_panel("File Name:", name, functools.partial(SideBarNewFileCommand(sublime_plugin.WindowCommand).on_done, paths, True), None, None)
-
-class SideBarNewFileCommand(sublime_plugin.WindowCommand):
- def run(self, paths = [], name = ""):
- import functools
- self.window.run_command('hide_panel');
- self.window.show_input_panel("File Name:", name, functools.partial(self.on_done, paths, False), None, None)
-
- def on_done(self, paths, relative_to_project, name):
- if relative_to_project and s.get('new_files_relative_to_project_root'):
- paths = SideBarProject().getDirectories()
- if paths:
- paths = [SideBarItem(paths[0], False)]
- if not paths:
- paths = SideBarSelection(paths).getSelectedDirectoriesOrDirnames()
- else:
- paths = SideBarSelection(paths).getSelectedDirectoriesOrDirnames()
- if not paths:
- paths = SideBarProject().getDirectories()
- if paths:
- paths = [SideBarItem(paths[0], False)]
- if not paths:
- sublime.active_window().new_file()
- else:
- for item in paths:
- item = SideBarItem(item.join(name), False)
- if item.exists():
- sublime.error_message("Unable to create file, file or folder exists.")
- self.run(paths, name)
- return
- else:
- try:
- item.create()
- item.edit()
- except:
- sublime.error_message("Unable to create file:\n\n"+item.path())
- self.run(paths, name)
- return
- SideBarProject().refresh();
-
-class SideBarNewDirectoryCommand(sublime_plugin.WindowCommand):
- def run(self, paths = [], name = ""):
- import functools
- self.window.run_command('hide_panel');
- self.window.show_input_panel("Folder Name:", name, functools.partial(self.on_done, paths), None, None)
-
- def on_done(self, paths, name):
- for item in SideBarSelection(paths).getSelectedDirectoriesOrDirnames():
- item = SideBarItem(item.join(name), True)
- if item.exists():
- sublime.error_message("Unable to create folder, folder or file exists.")
- self.run(paths, name)
- return
- else:
- item.create()
- if not item.exists():
- sublime.error_message("Unable to create folder:\n\n"+item.path())
- self.run(paths, name)
- return
- SideBarProject().refresh();
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarEditCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- for item in SideBarSelection(paths).getSelectedFiles():
- item.edit()
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).hasFiles()
-
- def is_visible(self, paths =[]):
- return not s.get('disabled_menuitem_edit')
-
-class SideBarOpenCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- for item in SideBarSelection(paths).getSelectedFiles():
- item.open()
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).hasFiles()
-
- def is_visible(self, paths =[]):
- return not s.get('disabled_menuitem_open_run')
-
-class SideBarFilesOpenWithEditApplicationsCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- item = SideBarItem(os.path.join(sublime.packages_path(), 'User', 'SideBarEnhancements', 'Open With', 'Side Bar.sublime-menu'), False)
- if not item.exists():
- item.create()
- item.write("""[
- {"id": "side-bar-files-open-with",
- "children":
- [
-
- //application 1
- {
- "caption": "Photoshop",
- "id": "side-bar-files-open-with-photoshop",
-
- "command": "side_bar_files_open_with",
- "args": {
- "paths": [],
- "application": "Adobe Photoshop CS5.app", // OSX
- "extensions":"psd|png|jpg|jpeg" //any file with these extensions
- }
- },
-
- //separator
- {"caption":"-"},
-
- //application 2
- {
- "caption": "SeaMonkey",
- "id": "side-bar-files-open-with-seamonkey",
-
- "command": "side_bar_files_open_with",
- "args": {
- "paths": [],
- "application": "C:\\\\Archivos de programa\\\\SeaMonkey\\\\seamonkey.exe", // WINNT
- "extensions":"" //open all even folders
- }
- },
- //application n
- {
- "caption": "Chrome",
- "id": "side-bar-files-open-with-chrome",
-
- "command": "side_bar_files_open_with",
- "args": {
- "paths": [],
- "application": "C:\\\\Documents and Settings\\\\tito\\\\Configuración local\\\\Datos de programa\\\\Google\\\\Chrome\\\\Application\\\\chrome.exe",
- "extensions":".*" //any file with extension
- }
- },
-
- {"caption":"-"}
- ]
- }
-]""");
- item.edit()
-
- def is_enabled(self, paths = []):
- return True
-
-class SideBarFilesOpenWithCommand(sublime_plugin.WindowCommand):
- def run(self, paths = [], application = "", extensions = ""):
- import sys
- application_dir, application_name = os.path.split(application)
- application_dir = application_dir.encode(sys.getfilesystemencoding())
- application_name = application_name.encode(sys.getfilesystemencoding())
- application = application.encode(sys.getfilesystemencoding())
-
- if extensions == '*':
- extensions = '.*'
- if extensions == '':
- items = SideBarSelection(paths).getSelectedItems()
- else:
- items = SideBarSelection(paths).getSelectedFilesWithExtension(extensions)
-
- import subprocess
- for item in items:
- if sublime.platform() == 'osx':
- subprocess.Popen(['open', '-a', application, item.nameSystem()], cwd=item.dirnameSystem())
- elif sublime.platform() == 'windows':
- subprocess.Popen([application_name, item.pathSystem()], cwd=expand_vars(application_dir), shell=True)
- else:
- subprocess.Popen([application_name, item.nameSystem()], cwd=item.dirnameSystem())
-
- def is_enabled(self, paths = [], application = "", extensions = ""):
- if extensions == '*':
- extensions = '.*'
- if extensions == '':
- return SideBarSelection(paths).len() > 0
- else:
- return SideBarSelection(paths).hasFilesWithExtension(extensions)
-
- def is_visible(self, paths = [], application = "", extensions = ""):
- if extensions == '*':
- extensions = '.*'
- if extensions == '':
- return SideBarSelection(paths).len() > 0
- else:
- has = SideBarSelection(paths).hasFilesWithExtension(extensions)
- return has or (not has and not s.get("hide_open_with_entries_when_there_are_no_applicable"))
-
-class SideBarFindInSelectedCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- items = []
- for item in SideBarSelection(paths).getSelectedItemsWithoutChildItems():
- items.append(item.path())
- self.window.run_command('hide_panel');
- if int(sublime.version()) >= 2134:
- self.window.run_command("show_panel", {"panel": "find_in_files", "where":",".join(items) })
- else:
- self.window.run_command("show_panel", {"panel": "find_in_files", "location":",".join(items) })
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarFindInParentCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- items = []
- for item in SideBarSelection(paths).getSelectedItems():
- items.append(item.dirname())
- items = list(set(items))
- self.window.run_command('hide_panel');
- if int(sublime.version()) >= 2134:
- self.window.run_command("show_panel", {"panel": "find_in_files", "where":",".join(items) })
- else:
- self.window.run_command("show_panel", {"panel": "find_in_files", "location":",".join(items) })
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarFindInProjectFoldersCommand(sublime_plugin.WindowCommand):
- def run(self):
- self.window.run_command('hide_panel');
- if int(sublime.version()) >= 2137:
- self.window.run_command("show_panel", {"panel": "find_in_files", "where":""})
- elif int(sublime.version()) >= 2136:
- self.window.run_command("show_panel", {"panel": "find_in_files", "where":""})
- elif int(sublime.version()) >= 2134:
- self.window.run_command("show_panel", {"panel": "find_in_files", "where":""})
- else:
- self.window.run_command("show_panel", {"panel": "find_in_files", "location":""})
-
-class SideBarFindInProjectCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- self.window.run_command('hide_panel');
- if int(sublime.version()) >= 2137:
- self.window.run_command("show_panel", {"panel": "find_in_files", "where":""})
- elif int(sublime.version()) >= 2136:
- self.window.run_command("show_panel", {"panel": "find_in_files", "where":""})
- elif int(sublime.version()) >= 2134:
- self.window.run_command("show_panel", {"panel": "find_in_files", "where":""})
- else:
- self.window.run_command("show_panel", {"panel": "find_in_files", "location":""})
-
- def is_visible(self, paths = []):
- return not s.get('disabled_menuitem_find_in_project')
-
-class SideBarFindInProjectFolderCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- items = []
- for item in SideBarSelection(paths).getSelectedItemsWithoutChildItems():
- items.append(SideBarProject().getDirectoryFromPath(item.path()))
- items = list(set(items))
- if items:
- self.window.run_command('hide_panel');
- self.window.run_command("show_panel", {"panel": "find_in_files", "where":",".join(items)})
-
-class SideBarFindInFilesWithExtensionCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- items = []
- for item in SideBarSelection(paths).getSelectedItems():
- items.append('*'+item.extension())
- items = list(set(items))
- self.window.run_command('hide_panel');
- if int(sublime.version()) >= 2134:
- self.window.run_command("show_panel", {"panel": "find_in_files", "where":",".join(items) })
- else:
- self.window.run_command("show_panel", {"panel": "find_in_files", "location":",".join(items) })
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).hasFiles()
-
- def description(self, paths = []):
- items = []
- for item in SideBarSelection(paths).getSelectedFiles():
- items.append('*'+item.extension())
- items = list(set(items))
- if len(items) > 1:
- return 'In Files With Extensions '+(",".join(items))+u'…'
- elif len(items) > 0:
- return 'In Files With Extension '+(",".join(items))+u'…'
- else:
- return u'In Files With Extension…'
-
-
-sidebar_instant_search = 0
-
-class SideBarFindFilesPathContainingCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- global sidebar_instant_search
- if paths == [] and SideBarProject().getDirectories():
- paths = SideBarProject().getDirectories()
- else:
- paths = [item.path() for item in SideBarSelection(paths).getSelectedDirectoriesOrDirnames()]
- if paths == []:
- return
- view = self.window.new_file()
- view.settings().set('word_wrap', False)
- view.set_name('Instant File Search')
- view.set_syntax_file('Packages/SideBarEnhancements/SideBar Results.hidden-tmLanguage')
- view.set_scratch(True)
- edit = view.begin_edit()
- view.settings().set('sidebar_instant_search_paths', paths)
- view.replace(edit, sublime.Region(0, view.size()), "Type to search: ")
- view.end_edit(edit)
- view.sel().clear()
- view.sel().add(sublime.Region(16))
- sidebar_instant_search += 1
-
- def is_enabled(self, paths=[]):
- return True
-
-class SideBarFindResultsViewListener(sublime_plugin.EventListener):
-
- def on_modified(self, view):
- global sidebar_instant_search
- if sidebar_instant_search > 0 and view.settings().has('sidebar_instant_search_paths'):
- row, col = view.rowcol(view.sel()[0].begin())
- if row != 0 or not view.sel()[0].empty():
- return
- paths = view.settings().get('sidebar_instant_search_paths')
- searchTerm = view.substr(view.line(0)).replace("Type to search:", "").strip()
- start_time = time.time()
- view.settings().set('sidebar_search_paths_start_time', start_time)
- if searchTerm:
- sublime.set_timeout(lambda:SideBarFindFilesPathContainingSearchThread(paths, searchTerm, view, start_time).start(), 300)
-
- def on_close(self, view):
- if view.settings().has('sidebar_instant_search_paths'):
- global sidebar_instant_search
- sidebar_instant_search -= 1
-
-class SideBarFindFilesPathContainingSearchThread(threading.Thread):
- def __init__(self, paths, searchTerm, view, start_time):
- if view.settings().get('sidebar_search_paths_start_time') != start_time:
- self.should_run = False
- else:
- self.should_run = True
- self.view = view
- self.searchTerm = searchTerm
- self.paths = paths
- self.start_time = start_time
- threading.Thread.__init__(self)
-
- def run(self):
- if not self.should_run:
- return
- # print 'run forrest run'
- self.total = 0
- self.highlight_from = 0
- self.match_result = u''
- self.match_result += 'Type to search: '+self.searchTerm+'\n'
- for item in SideBarSelection(self.paths).getSelectedDirectoriesOrDirnames():
- self.files = []
- self.num_files = 0
- self.find(item.path())
- self.match_result += '\n'
- length = len(self.files)
- if length > 1:
- self.match_result += str(length)+' matches'
- elif length > 0:
- self.match_result += '1 match'
- else:
- self.match_result += 'No match'
- self.match_result += ' in '+str(self.num_files)+' files for term "'+self.searchTerm+'" under \n"'+item.path()+'"\n\n'
- if self.highlight_from == 0:
- self.highlight_from = len(self.match_result)
- self.match_result += ('\n'.join(self.files))
- self.total = self.total + length
- self.match_result += '\n'
- sublime.set_timeout(lambda:self.on_done(), 0)
-
- def on_done(self):
- if self.start_time == self.view.settings().get('sidebar_search_paths_start_time'):
- view = self.view;
- edit = view.begin_edit()
- sel = sublime.Region(view.sel()[0].begin(), view.sel()[0].end())
- view.replace(edit, sublime.Region(0, view.size()), self.match_result);
- view.end_edit(edit)
- view.erase_regions("sidebar_search_instant_highlight")
- if self.total < 30000 and len(self.searchTerm) > 1:
- regions = [item for item in view.find_all(self.searchTerm, sublime.LITERAL|sublime.IGNORECASE) if item.begin() >= self.highlight_from]
- view.add_regions("sidebar_search_instant_highlight", regions, 'string', sublime.DRAW_EMPTY|sublime.DRAW_OUTLINED|sublime.DRAW_EMPTY_AS_OVERWRITE)
- view.sel().clear()
- view.sel().add(sel)
-
- def find(self, path):
- if os.path.isfile(path) or os.path.islink(path):
- self.num_files = self.num_files+1
- if self.match(path):
- self.files.append(path)
- elif os.path.isdir(path):
- for content in os.listdir(path):
- file = os.path.join(path, content)
- if os.path.isfile(file) or os.path.islink(file):
- self.num_files = self.num_files+1
- if self.match(file):
- self.files.append(file)
- else:
- self.find(file)
-
- def match(self, path):
- return False if path.lower().find(self.searchTerm.lower()) == -1 else True
-
-class SideBarCutCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- s = sublime.load_settings("SideBarEnhancements/Clipboard.sublime-settings")
- items = []
- for item in SideBarSelection(paths).getSelectedItemsWithoutChildItems():
- items.append(item.path())
-
- if len(items) > 0:
- s.set('cut', "\n".join(items))
- s.set('copy', '')
- if len(items) > 1 :
- sublime.status_message("Items cut")
- else :
- sublime.status_message("Item cut")
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0 and SideBarSelection(paths).hasProjectDirectories() == False
-
-
-class SideBarCopyCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- s = sublime.load_settings("SideBarEnhancements/Clipboard.sublime-settings")
- items = []
- for item in SideBarSelection(paths).getSelectedItemsWithoutChildItems():
- items.append(item.path())
-
- if len(items) > 0:
- s.set('cut', '')
- s.set('copy', "\n".join(items))
- if len(items) > 1 :
- sublime.status_message("Items copied")
- else :
- sublime.status_message("Item copied")
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarPasteCommand(sublime_plugin.WindowCommand):
- def run(self, paths = [], in_parent = 'False', test = 'True', replace = 'False'):
- s = sublime.load_settings("SideBarEnhancements/Clipboard.sublime-settings")
-
- cut = s.get('cut', '')
- copy = s.get('copy', '')
-
- already_exists_paths = []
-
- if SideBarSelection(paths).len() > 0:
- if in_parent == 'False':
- location = SideBarSelection(paths).getSelectedItems()[0].path()
- else:
- location = SideBarSelection(paths).getSelectedDirectoriesOrDirnames()[0].dirname()
-
- if os.path.isdir(location) == False:
- location = SideBarItem(os.path.dirname(location), True)
- else:
- location = SideBarItem(location, True)
-
- if cut != '':
- cut = cut.split("\n")
- for path in cut:
- path = SideBarItem(path, os.path.isdir(path))
- new = os.path.join(location.path(), path.name())
- if test == 'True' and os.path.exists(new):
- already_exists_paths.append(new)
- elif test == 'False':
- if os.path.exists(new) and replace == 'False':
- pass
- else:
- try:
- if not path.move(new, replace == 'True'):
- sublime.error_message("Unable to cut and paste, destination exists.")
- return
- except:
- sublime.error_message("Unable to move:\n\n"+path.path()+"\n\nto\n\n"+new)
- return
-
- if copy != '':
- copy = copy.split("\n")
- for path in copy:
- path = SideBarItem(path, os.path.isdir(path))
- new = os.path.join(location.path(), path.name())
- if test == 'True' and os.path.exists(new):
- already_exists_paths.append(new)
- elif test == 'False':
- if os.path.exists(new) and replace == 'False':
- pass
- else:
- try:
- if not path.copy(new, replace == 'True'):
- sublime.error_message("Unable to copy and paste, destination exists.")
- return
- except:
- sublime.error_message("Unable to copy:\n\n"+path.path()+"\n\nto\n\n"+new)
- return
-
- if test == 'True' and len(already_exists_paths):
- self.confirm(paths, in_parent, already_exists_paths)
- elif test == 'True' and not len(already_exists_paths):
- self.run(paths, in_parent, 'False', 'False')
- elif test == 'False':
- cut = s.set('cut', '')
- SideBarProject().refresh();
-
- def confirm(self, paths, in_parent, data):
- import functools
- window = sublime.active_window()
- # window.show_input_panel("BUG!", '', '', None, None)
- # window.run_command('hide_panel');
-
- yes = []
- yes.append('Yes, Replace the following items:');
- for item in data:
- yes.append(SideBarItem(item, os.path.isdir(item)).pathWithoutProject())
-
- no = []
- no.append('No');
- no.append('Continue without replacing');
-
- window.show_quick_panel([yes, no], functools.partial(self.on_done, paths, in_parent))
-
- def on_done(self, paths, in_parent, result):
- if result != -1:
- if result == 0:
- self.run(paths, in_parent, 'False', 'True')
- else:
- self.run(paths, in_parent, 'False', 'False')
-
- def is_enabled(self, paths = [], in_parent = False):
- s = sublime.load_settings("SideBarEnhancements/Clipboard.sublime-settings")
- return s.get('cut', '') + s.get('copy', '') != '' and len(SideBarSelection(paths).getSelectedDirectoriesOrDirnames()) == 1
-
- def is_visible(self, paths = [], in_parent = False):
- if in_parent == 'True':
- return not s.get('disabled_menuitem_paste_in_parent')
- else:
- return True
-
-class SideBarCopyNameCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- items = []
- for item in SideBarSelection(paths).getSelectedItems():
- items.append(item.name())
-
- if len(items) > 0:
- sublime.set_clipboard("\n".join(items));
- if len(items) > 1 :
- sublime.status_message("Items copied")
- else :
- sublime.status_message("Item copied")
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
- def is_visible(self, paths =[]):
- return not s.get('disabled_menuitem_copy_name')
-
-class SideBarCopyNameEncodedCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- items = []
- for item in SideBarSelection(paths).getSelectedItems():
- items.append(item.nameEncoded())
-
- if len(items) > 0:
- sublime.set_clipboard("\n".join(items));
- if len(items) > 1 :
- sublime.status_message("Items copied")
- else :
- sublime.status_message("Item copied")
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-
-class SideBarCopyPathCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- items = []
- for item in SideBarSelection(paths).getSelectedItems():
- items.append(item.path())
-
- if len(items) > 0:
- sublime.set_clipboard("\n".join(items));
- if len(items) > 1 :
- sublime.status_message("Items copied")
- else :
- sublime.status_message("Item copied")
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarCopyDirPathCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- items = []
- for item in SideBarSelection(paths).getSelectedDirectoriesOrDirnames():
- items.append(item.path())
-
- if len(items) > 0:
- sublime.set_clipboard("\n".join(items));
- if len(items) > 1 :
- sublime.status_message("Items copied")
- else :
- sublime.status_message("Item copied")
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
- def is_visible(self, paths =[]):
- return not s.get('disabled_menuitem_copy_dir_path')
-
-class SideBarCopyPathEncodedCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- items = []
- for item in SideBarSelection(paths).getSelectedItems():
- items.append(item.uri())
-
- if len(items) > 0:
- sublime.set_clipboard("\n".join(items));
- if len(items) > 1 :
- sublime.status_message("Items copied")
- else :
- sublime.status_message("Item copied")
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarCopyPathRelativeFromProjectCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- items = []
- for item in SideBarSelection(paths).getSelectedItems():
- items.append(item.pathRelativeFromProject())
-
- if len(items) > 0:
- sublime.set_clipboard("\n".join(items));
- if len(items) > 1 :
- sublime.status_message("Items copied")
- else :
- sublime.status_message("Item copied")
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0 and SideBarSelection(paths).hasItemsUnderProject()
-
-
-
-class SideBarCopyPathRelativeFromProjectEncodedCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- items = []
- for item in SideBarSelection(paths).getSelectedItems():
- items.append(item.pathRelativeFromProjectEncoded())
-
- if len(items) > 0:
- sublime.set_clipboard("\n".join(items));
- if len(items) > 1 :
- sublime.status_message("Items copied")
- else :
- sublime.status_message("Item copied")
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0 and SideBarSelection(paths).hasItemsUnderProject()
-
-class SideBarCopyPathRelativeFromViewCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- items = []
- for item in SideBarSelection(paths).getSelectedItems():
- items.append(item.pathRelativeFromView())
-
- if len(items) > 0:
- sublime.set_clipboard("\n".join(items));
- if len(items) > 1 :
- sublime.status_message("Items copied")
- else :
- sublime.status_message("Item copied")
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarCopyPathRelativeFromViewEncodedCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- items = []
- for item in SideBarSelection(paths).getSelectedItems():
- items.append(item.pathRelativeFromViewEncoded())
-
- if len(items) > 0:
- sublime.set_clipboard("\n".join(items));
- if len(items) > 1 :
- sublime.status_message("Items copied")
- else :
- sublime.status_message("Item copied")
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarCopyPathAbsoluteFromProjectCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- items = []
- for item in SideBarSelection(paths).getSelectedItems():
- items.append(item.pathAbsoluteFromProject())
-
- if len(items) > 0:
- sublime.set_clipboard("\n".join(items));
- if len(items) > 1 :
- sublime.status_message("Items copied")
- else :
- sublime.status_message("Item copied")
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0 and SideBarSelection(paths).hasItemsUnderProject()
-
-class SideBarCopyPathAbsoluteFromProjectEncodedCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- items = []
- for item in SideBarSelection(paths).getSelectedItems():
- items.append(item.pathAbsoluteFromProjectEncoded())
-
- if len(items) > 0:
- sublime.set_clipboard("\n".join(items));
- if len(items) > 1 :
- sublime.status_message("Items copied")
- else :
- sublime.status_message("Item copied")
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0 and SideBarSelection(paths).hasItemsUnderProject()
-
- def is_visible(self, paths =[]):
- return not s.get('disabled_menuitem_copy_path')
-
-class SideBarCopyTagAhrefCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- items = []
- for item in SideBarSelection(paths).getSelectedItems():
- items.append(''+item.namePretty()+' ')
-
- if len(items) > 0:
- sublime.set_clipboard("\n".join(items));
- if len(items) > 1 :
- sublime.status_message("Items copied")
- else :
- sublime.status_message("Item copied")
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0 and SideBarSelection(paths).hasItemsUnderProject()
-
-class SideBarCopyTagImgCommand(sublime_plugin.WindowCommand):
-
- def run(self, paths = []):
- items = []
- for item in SideBarSelection(paths).getSelectedImages():
- try:
- image_type, width, height = self.getImageInfo(item.contentBinary())
- items.append(' ')
- except:
- items.append(' ')
- if len(items) > 0:
- sublime.set_clipboard("\n".join(items));
- if len(items) > 1 :
- sublime.status_message("Items copied")
- else :
- sublime.status_message("Item copied")
-
- #Project:http://code.google.com/p/bfg-pages/
- #License:http://www.opensource.org/licenses/bsd-license.php
- def getImageInfo(self, data):
- import StringIO
- import struct
- data = str(data)
- size = len(data)
- height = -1
- width = -1
- content_type = ''
-
- # handle GIFs
- if (size >= 10) and data[:6] in ('GIF87a', 'GIF89a'):
- # Check to see if content_type is correct
- content_type = 'image/gif'
- w, h = struct.unpack("= 24) and data.startswith('\211PNG\r\n\032\n')
- and (data[12:16] == 'IHDR')):
- content_type = 'image/png'
- w, h = struct.unpack(">LL", data[16:24])
- width = int(w)
- height = int(h)
-
- # Maybe this is for an older PNG version.
- elif (size >= 16) and data.startswith('\211PNG\r\n\032\n'):
- # Check to see if we have the right content type
- content_type = 'image/png'
- w, h = struct.unpack(">LL", data[8:16])
- width = int(w)
- height = int(h)
-
- # handle JPEGs
- elif (size >= 2) and data.startswith('\377\330'):
- content_type = 'image/jpeg'
- jpeg = StringIO.StringIO(data)
- jpeg.read(2)
- b = jpeg.read(1)
- try:
- while (b and ord(b) != 0xDA):
- while (ord(b) != 0xFF): b = jpeg.read(1)
- while (ord(b) == 0xFF): b = jpeg.read(1)
- if (ord(b) >= 0xC0 and ord(b) <= 0xC3):
- jpeg.read(3)
- h, w = struct.unpack(">HH", jpeg.read(4))
- break
- else:
- jpeg.read(int(struct.unpack(">H", jpeg.read(2))[0])-2)
- b = jpeg.read(1)
- width = int(w)
- height = int(h)
- except struct.error:
- pass
- except ValueError:
- pass
- return content_type, width, height
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).hasImages() and SideBarSelection(paths).hasItemsUnderProject()
-
-class SideBarCopyTagStyleCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- items = []
- for item in SideBarSelection(paths).getSelectedFilesWithExtension('css'):
- items.append(' ')
-
- if len(items) > 0:
- sublime.set_clipboard("\n".join(items));
- if len(items) > 1 :
- sublime.status_message("Items copied")
- else :
- sublime.status_message("Item copied")
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).hasFilesWithExtension('css') and SideBarSelection(paths).hasItemsUnderProject()
-
-class SideBarCopyTagScriptCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- items = []
- for item in SideBarSelection(paths).getSelectedFilesWithExtension('js'):
- items.append('')
-
- if len(items) > 0:
- sublime.set_clipboard("\n".join(items));
- if len(items) > 1 :
- sublime.status_message("Items copied")
- else :
- sublime.status_message("Item copied")
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).hasFilesWithExtension('js') and SideBarSelection(paths).hasItemsUnderProject()
-
-class SideBarCopyProjectDirectoriesCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- items = []
- for directory in SideBarProject().getDirectories():
- items.append(directory)
-
- if len(items) > 0:
- sublime.set_clipboard("\n".join(items));
- if len(items) > 1 :
- sublime.status_message("Items copied")
- else :
- sublime.status_message("Item copied")
-
- def is_enabled(self, paths = []):
- return True
-
-class SideBarCopyContentUtf8Command(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- items = []
- for item in SideBarSelection(paths).getSelectedFiles():
- items.append(item.contentUTF8())
-
- if len(items) > 0:
- sublime.set_clipboard("\n".join(items));
- if len(items) > 1 :
- sublime.status_message("Items content copied")
- else :
- sublime.status_message("Item content copied")
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).hasFiles()
-
-class SideBarCopyContentBase64Command(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- items = []
- for item in SideBarSelection(paths).getSelectedFiles():
- items.append(item.contentBase64())
-
- if len(items) > 0:
- sublime.set_clipboard("\n".join(items));
- if len(items) > 1 :
- sublime.status_message("Items content copied")
- else :
- sublime.status_message("Item content copied")
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).hasFiles()
-
-class SideBarCopyUrlCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- items = []
- project = SideBarProject()
- url = project.getPreference('url_production')
- if url:
- if url[-1:] != '/':
- url = url+'/'
- for item in SideBarSelection(paths).getSelectedItems():
- if item.isUnderCurrentProject():
- items.append(url + item.pathRelativeFromProjectEncoded())
-
- if len(items) > 0:
- sublime.set_clipboard("\n".join(items));
- if len(items) > 1 :
- sublime.status_message("Items URL copied")
- else :
- sublime.status_message("Item URL copied")
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).hasItemsUnderProject()
-
-class SideBarDuplicateCommand(sublime_plugin.WindowCommand):
- def run(self, paths = [], new = False):
- import functools
- self.window.run_command('hide_panel');
- self.window.show_input_panel("Duplicate As:", new or SideBarSelection(paths).getSelectedItems()[0].path(), functools.partial(self.on_done, SideBarSelection(paths).getSelectedItems()[0].path()), None, None)
-
- def on_done(self, old, new):
- item = SideBarItem(old, os.path.isdir(old))
- try:
- if not item.copy(new):
- sublime.error_message("Unable to duplicate, destination exists.")
- self.run([old], new)
- return
- except:
- sublime.error_message("Unable to copy:\n\n"+old+"\n\nto\n\n"+new)
- self.run([old], new)
- return
- item = SideBarItem(new, os.path.isdir(new))
- if item.isFile():
- item.edit();
- SideBarProject().refresh();
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() == 1 and SideBarSelection(paths).hasProjectDirectories() == False
-
-class SideBarRenameCommand(sublime_plugin.WindowCommand):
- def run(self, paths = [], newLeaf = False):
- import functools
- branch, leaf = os.path.split(SideBarSelection(paths).getSelectedItems()[0].path())
- self.window.run_command('hide_panel');
- self.window.show_input_panel("New Name:", newLeaf or leaf, functools.partial(self.on_done, SideBarSelection(paths).getSelectedItems()[0].path(), branch), None, None)
-
- def on_done(self, old, branch, leaf):
- self.window.run_command('hide_panel');
- leaf = leaf.strip();
- new = os.path.join(branch, leaf)
- item = SideBarItem(old, os.path.isdir(old))
- try:
- if not item.move(new):
- sublime.error_message("Unable to rename, destination exists.")
- self.run([old], leaf)
- return
- except:
- sublime.error_message("Unable to rename:\n\n"+old+"\n\nto\n\n"+new)
- self.run([old], leaf)
- raise
- return
- SideBarProject().refresh();
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() == 1 and SideBarSelection(paths).hasProjectDirectories() == False
-
-class SideBarMoveCommand(sublime_plugin.WindowCommand):
- def run(self, paths = [], new = False):
- import functools
- self.window.run_command('hide_panel');
- self.window.show_input_panel("New Location:", new or SideBarSelection(paths).getSelectedItems()[0].path(), functools.partial(self.on_done, SideBarSelection(paths).getSelectedItems()[0].path()), None, None)
-
- def on_done(self, old, new):
- item = SideBarItem(old, os.path.isdir(old))
- try:
- if not item.move(new):
- sublime.error_message("Unable to move, destination exists.")
- self.run([old], new)
- return
- except:
- sublime.error_message("Unable to move:\n\n"+old+"\n\nto\n\n"+new)
- self.run([old], new)
- return
- SideBarProject().refresh();
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() == 1 and SideBarSelection(paths).hasProjectDirectories() == False
-
-class SideBarDeleteCommand(sublime_plugin.WindowCommand):
- def run(self, paths = [], confirmed = 'False'):
-
- if confirmed == 'False' and s.get('confirm_before_deleting', True):
- if sublime.platform() == 'osx':
- if sublime.ok_cancel_dialog('delete the selected items?'):
- self.run(paths, 'True')
- else:
- self.confirm([item.path() for item in SideBarSelection(paths).getSelectedItems()], [item.pathWithoutProject() for item in SideBarSelection(paths).getSelectedItems()])
- else:
- try:
- for item in SideBarSelection(paths).getSelectedItemsWithoutChildItems():
- if s.get('close_affected_buffers_when_deleting_even_if_dirty', False):
- item.close_associated_buffers()
- send2trash(item.path())
- SideBarProject().refresh();
- except:
- import functools
- self.window.show_input_panel("BUG!", '', '', None, None)
- self.window.run_command('hide_panel');
- self.window.show_input_panel("Permanently Delete:", SideBarSelection(paths).getSelectedItems()[0].path(), functools.partial(self.on_done, SideBarSelection(paths).getSelectedItems()[0].path()), None, None)
-
- def confirm(self, paths, display_paths):
- import functools
- window = sublime.active_window()
- window.show_input_panel("BUG!", '', '', None, None)
- window.run_command('hide_panel');
-
- yes = []
- yes.append('Yes, delete the selected items.');
- for item in display_paths:
- yes.append(item);
-
- no = []
- no.append('No');
- no.append('Cancel the operation.');
- if sublime.platform() == 'osx':
- sublime.set_timeout(lambda:window.show_quick_panel([yes, no], functools.partial(self.on_confirm, paths)), 200);
- else:
- window.show_quick_panel([yes, no], functools.partial(self.on_confirm, paths))
-
- def on_confirm(self, paths, result):
- if result != -1:
- if result == 0:
- self.run(paths, 'True')
-
- def on_done(self, old, new):
- if s.get('close_affected_buffers_when_deleting_even_if_dirty', False):
- item = SideBarItem(new, os.path.isdir(new))
- item.close_associated_buffers()
- self.remove(new)
- SideBarProject().refresh();
-
- def remove(self, path):
- if os.path.isfile(path) or os.path.islink(path):
- self.remove_safe_file(path)
- else:
- for content in os.listdir(path):
- file = os.path.join(path, content)
- if os.path.isfile(file) or os.path.islink(file):
- self.remove_safe_file(file)
- else:
- self.remove(file)
- self.remove_safe_dir(path)
-
- def remove_safe_file(self, path):
- if not SideBarSelection().isNone(path):
- try:
- os.remove(path)
- except:
- print "Unable to remove file:\n\n"+path
- else:
- print 'path is none'
- print path
-
- def remove_safe_dir(self, path):
- if not SideBarSelection().isNone(path):
- try:
- os.rmdir(path)
- except:
- print "Unable to remove folder:\n\n"+path
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0 and SideBarSelection(paths).hasProjectDirectories() == False
-
-
-class SideBarEmptyCommand(sublime_plugin.WindowCommand):
- def run(self, paths = [], confirmed = 'False'):
-
- if confirmed == 'False' and s.get('confirm_before_deleting', True):
- if sublime.platform() == 'osx':
- if sublime.ok_cancel_dialog('empty the content of the folder?'):
- self.run(paths, 'True')
- else:
- self.confirm([item.path() for item in SideBarSelection(paths).getSelectedDirectoriesOrDirnames()], [item.pathWithoutProject() for item in SideBarSelection(paths).getSelectedDirectoriesOrDirnames()])
- else:
- try:
- for item in SideBarSelection(paths).getSelectedDirectoriesOrDirnames():
- for content in os.listdir(item.path()):
- file = os.path.join(item.path(), content)
- if not SideBarSelection().isNone(file):
- send2trash(file)
- if s.get('close_affected_buffers_when_deleting_even_if_dirty', False):
- item.close_associated_buffers()
- except:
- pass
- SideBarProject().refresh();
-
- def confirm(self, paths, display_paths):
- import functools
- window = sublime.active_window()
- window.show_input_panel("BUG!", '', '', None, None)
- window.run_command('hide_panel');
-
- yes = []
- yes.append('Yes, empty the selected items.');
- for item in display_paths:
- yes.append(item);
-
- no = []
- no.append('No');
- no.append('Cancel the operation.');
- if sublime.platform() == 'osx':
- sublime.set_timeout(lambda:window.show_quick_panel([yes, no], functools.partial(self.on_confirm, paths)), 200);
- else:
- window.show_quick_panel([yes, no], functools.partial(self.on_confirm, paths))
-
- def on_confirm(self, paths, result):
- if result != -1:
- if result == 0:
- self.run(paths, 'True')
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
- def is_visible(self, paths =[]):
- return not s.get('disabled_menuitem_empty')
-
-class SideBarRevealCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- for item in SideBarSelection(paths).getSelectedItems():
- item.reveal()
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarProjectOpenFileCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- project = SideBarProject()
- if project.hasOpenedProject():
- SideBarItem(project.getProjectFile(), False).edit();
-
-class SideBarProjectOpenProjectPreviewUrlsFileCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- SideBarItem(sublime.packages_path()+'/../Settings/SideBarEnhancements.json', False).edit();
-
-class SideBarProjectItemAddCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- project = SideBarProject()
- if project.hasOpenedProject():
- for item in SideBarSelection(paths).getSelectedDirectories():
- project.rootAdd(item.path())
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).hasDirectories()
-
-class SideBarProjectItemExcludeCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- project = SideBarProject()
- if project.hasOpenedProject():
- for item in SideBarSelection(paths).getSelectedItems():
- if item.isDirectory():
- project.excludeDirectory(item.path())
- else:
- project.excludeFile(item.path())
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
-class SideBarOpenInBrowserCommand(sublime_plugin.WindowCommand):
- def run(self, paths = [], type = False):
-
- browser = s.get("default_browser", "")
-
- if type == False or type == 'testing':
- type = 'url_testing'
- elif type == 'production':
- type = 'url_production'
- else:
- type = 'url_testing'
-
- for item in SideBarSelection(paths).getSelectedItems():
- if item.projectURL(type):
- self.try_open(item.projectURL(type), browser)
- else:
- self.try_open(item.uri(), browser)
-
- # def run(self, paths = [], type = False):
- # import webbrowser
- # try:
- # browser = webbrowser.get(s.get("default_browser"))
- # except:
- # browser = webbrowser
-
- # if type == False or type == 'testing':
- # type = 'url_testing'
- # elif type == 'production':
- # type = 'url_production'
- # else:
- # type = 'url_testing'
-
- # for item in SideBarSelection(paths).getSelectedItems():
- # if item.projectURL(type):
- # browser.open_new_tab(item.projectURL(type) + item.pathRelativeFromProjectEncoded())
- # else:
- # browser.open_new_tab(item.uri())
-
- def try_open(self, url, browser):
- import subprocess
-
- browser = browser.lower().strip();
- items = []
-
- if browser == 'chrome':
- if sublime.platform() == 'osx':
- items.extend(['open'])
- commands = ['-a', '/Applications/Google Chrome.app', url]
- elif sublime.platform() == 'windows':
- # read local app data path from registry
- aKey = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER, r"Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders")
- reg_value, reg_type = _winreg.QueryValueEx (aKey, "Local AppData")
-
- if s.get('portable_browser') != '':
- items.extend([s.get('portable_browser')])
- items.extend([
- '%HOMEPATH%\\AppData\\Local\\Google\\Chrome\\Application\\chrome.exe'
-
- ,reg_value+'\\Chrome\\Application\\chrome.exe'
- ,reg_value+'\\Google\\Chrome\\Application\\chrome.exe'
- ,'%HOMEPATH%\\Google\\Chrome\\Application\\chrome.exe'
- ,'%PROGRAMFILES%\\Google\\Chrome\\Application\\chrome.exe'
- ,'%PROGRAMFILES(X86)%\\Google\\Chrome\\Application\\chrome.exe'
- ,'%USERPROFILE%\\Local\ Settings\\Application\ Data\\Google\\Chrome\\chrome.exe'
- ,'%HOMEPATH%\\Chromium\\Application\\chrome.exe'
- ,'%PROGRAMFILES%\\Chromium\\Application\\chrome.exe'
- ,'%PROGRAMFILES(X86)%\\Chromium\\Application\\chrome.exe'
- ,'%HOMEPATH%\\Local\ Settings\\Application\ Data\\Google\\Chrome\\Application\\chrome.exe'
- ,'%HOMEPATH%\\Local Settings\\Application Data\\Google\\Chrome\\Application\\chrome.exe'
- ,'chrome.exe'
- ])
-
-
- commands = ['-new-tab', url]
- else:
-
- if s.get('portable_browser') != '':
- items.extend([s.get('portable_browser')])
- items.extend([
- '/usr/bin/google-chrome'
- ,'chrome'
- ,'google-chrome'
- ])
- commands = ['-new-tab', url]
-
- elif browser == 'chromium':
- if sublime.platform() == 'osx':
- items.extend(['open'])
- commands = ['-a', '/Applications/Chromium.app', url]
- elif sublime.platform() == 'windows':
- # read local app data path from registry
- aKey = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER, r"Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders")
- reg_value, reg_type = _winreg.QueryValueEx (aKey, "Local AppData")
- if s.get('portable_browser') != '':
- items.extend([s.get('portable_browser')])
- items.extend([
- '%HOMEPATH%\\AppData\\Local\\Google\\Chrome SxS\\Application\\chrome.exe'
-
- , reg_value+'\\Chromium\\Application\\chromium.exe'
- ,'%USERPROFILE%\\Local Settings\\Application Data\\Google\\Chrome\\chromium.exe'
- ,'%USERPROFILE%\\Local\ Settings\\Application\ Data\\Google\\Chrome\\chromium.exe'
- ,'%HOMEPATH%\\Chromium\\Application\\chromium.exe'
- ,'%PROGRAMFILES%\\Chromium\\Application\\chromium.exe'
- ,'%PROGRAMFILES(X86)%\\Chromium\\Application\\chromium.exe'
- ,'%HOMEPATH%\\Local Settings\\Application\ Data\\Google\\Chrome\\Application\\chromium.exe'
- ,'%HOMEPATH%\\Local Settings\\Application Data\\Google\\Chrome\\Application\\chromium.exe'
- ,'chromium.exe'
-
- , reg_value+'\\Chromium\\Application\\chrome.exe'
- ,'%USERPROFILE%\\Local Settings\\Application Data\\Google\\Chrome\\chrome.exe'
- ,'%USERPROFILE%\\Local\ Settings\\Application\ Data\\Google\\Chrome\\chrome.exe'
- ,'%HOMEPATH%\\Chromium\\Application\\chrome.exe'
- ,'%PROGRAMFILES%\\Chromium\\Application\\chrome.exe'
- ,'%PROGRAMFILES(X86)%\\Chromium\\Application\\chrome.exe'
- ,'%HOMEPATH%\\Local\ Settings\\Application\ Data\\Google\\Chrome\\Application\\chrome.exe'
- ,'%HOMEPATH%\\Local Settings\\Application Data\\Google\\Chrome\\Application\\chrome.exe'
- ,'chrome.exe'
-
- ])
- commands = ['-new-tab', url]
- else:
- if s.get('portable_browser') != '':
- items.extend([s.get('portable_browser')])
- items.extend([
- '/usr/bin/chromium'
- ,'chromium'
- ,'/usr/bin/chromium-browser'
- ,'chromium-browser'
- ])
- commands = ['-new-tab', url]
- elif browser == 'firefox':
- if sublime.platform() == 'osx':
- items.extend(['open'])
- commands = ['-a', '/Applications/Firefox.app', url]
- else:
- if s.get('portable_browser') != '':
- items.extend([s.get('portable_browser')])
- items.extend([
- '/usr/bin/firefox'
-
- ,'%PROGRAMFILES%\\Nightly\\firefox.exe'
- ,'%PROGRAMFILES(X86)%\\Nightly\\firefox.exe'
-
- ,'%PROGRAMFILES%\\Mozilla Firefox\\firefox.exe'
- ,'%PROGRAMFILES(X86)%\\Mozilla Firefox\\firefox.exe'
-
- ,'firefox'
- ,'firefox.exe'
- ])
- commands = ['-new-tab', url]
- elif browser == 'opera':
- if sublime.platform() == 'osx':
- items.extend(['open'])
- commands = ['-a', '/Applications/Opera.app', url]
- else:
- if s.get('portable_browser') != '':
- items.extend([s.get('portable_browser')])
- items.extend([
- '/usr/bin/opera'
- ,'/usr/bin/opera-next'
- ,'/usr/bin/operamobile'
-
- ,'%PROGRAMFILES%\\Opera\\opera.exe'
- ,'%PROGRAMFILES(X86)%\\Opera\\opera.exe'
-
- ,'%PROGRAMFILES%\\Opera Next\\opera.exe'
- ,'%PROGRAMFILES(X86)%\\Opera Next\\opera.exe'
-
- ,'%PROGRAMFILES%\\Opera Mobile Emulator\\OperaMobileEmu.exe'
- ,'%PROGRAMFILES(X86)%\\Opera Mobile Emulator\\OperaMobileEmu.exe'
-
- ,'opera'
- ,'opera.exe'
- ])
- commands = ['-newtab', url]
- elif browser == 'safari':
- if sublime.platform() == 'osx':
- items.extend(['open'])
- commands = ['-a', 'Safari', url]
- else:
- if s.get('portable_browser') != '':
- items.extend([s.get('portable_browser')])
- items.extend([
- '/usr/bin/safari'
-
- ,'%PROGRAMFILES%\\Safari\\Safari.exe'
- ,'%PROGRAMFILES(X86)%\\Safari\\Safari.exe'
-
- ,'Safari'
- ,'Safari.exe'
- ])
- commands = ['-new-tab', '-url', url]
- else:
- if s.get('portable_browser') != '':
- items.extend([s.get('portable_browser')])
- commands = ['-new-tab', url]
- #sublime.error_message('Browser "'+browser+'" not found!\nUse any of the following: firefox, chrome, chromium, opera, safari')
- #return
-
- for item in items:
- try:
- command2 = list(commands)
- command2.insert(0, expand_vars(item))
- subprocess.Popen(command2)
- return
- except:
- try:
- command2 = list(commands)
- command2.insert(0, item)
- subprocess.Popen(command2)
- return
- except:
- pass
-
- sublime.error_message('Browser "'+browser+'" not found!\nIs installed? Which location...?')
-
- def is_enabled(self, paths = []):
- return SideBarSelection(paths).len() > 0
-
- def is_visible(self, paths =[]):
- return not s.get('disabled_menuitem_open_in_browser')
-
-class SideBarOpenInNewWindowCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- import subprocess
- for item in SideBarSelection(paths).getSelectedDirectoriesOrDirnames():
- if sublime.platform() == 'osx':
- try:
- subprocess.Popen(['subl', '.'], cwd=item.pathSystem())
- except:
- try:
- subprocess.Popen(['sublime', '.'], cwd=item.pathSystem())
- except:
- subprocess.Popen(['/Applications/Sublime Text 2.app/Contents/SharedSupport/bin/subl', '.'], cwd=item.pathSystem())
- elif sublime.platform() == 'windows':
- try:
- subprocess.Popen(['subl', '.'], cwd=item.pathSystem(), shell=True)
- except:
- try:
- subprocess.Popen(['sublime', '.'], cwd=item.pathSystem(), shell=True)
- except:
- subprocess.Popen(['sublime_text.exe', '.'], cwd=item.pathSystem(), shell=True)
- else:
- try:
- subprocess.Popen(['subl', '.'], cwd=item.pathSystem())
- except:
- subprocess.Popen(['sublime', '.'], cwd=item.pathSystem())
-
- def is_visible(self, paths =[]):
- return not s.get('disabled_menuitem_open_in_new_window')
-
-class SideBarOpenWithFinderCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- import subprocess
- for item in SideBarSelection(paths).getSelectedDirectoriesOrDirnames():
- subprocess.Popen(['open', item.nameSystem()], cwd=item.dirnameSystem())
-
- def is_visible(self, paths =[]):
- return sublime.platform() == 'osx'
-
-class SideBarProjectItemRemoveFolderCommand(sublime_plugin.WindowCommand):
- def run(self, paths = []):
- self.window.run_command('remove_folder', {"dirs":paths})
-
- def is_enabled(self, paths =[]):
- return SideBarSelection(paths).len() == 1 and SideBarSelection(paths).hasProjectDirectories() == True
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/StatusBarFileSize.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/StatusBarFileSize.py
deleted file mode 100644
index 0c0caa7..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/StatusBarFileSize.py
+++ /dev/null
@@ -1,24 +0,0 @@
-import sublime, sublime_plugin
-from hurry.filesize import size
-from os.path import getsize
-
-s = sublime.load_settings('Side Bar.sublime-settings')
-
-class StatusBarFileSize(sublime_plugin.EventListener):
-
- def on_load(self, v):
- if s.get('statusbar_file_size') and v.file_name():
- try:
- self.show(v, size(getsize(v.file_name())))
- except:
- pass
-
- def on_post_save(self, v):
- if s.get('statusbar_file_size') and v.file_name():
- try:
- self.show(v, size(getsize(v.file_name())))
- except:
- pass
-
- def show(self, v, size):
- v.set_status('statusbar_file_size', size);
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/StatusBarModifiedTime.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/StatusBarModifiedTime.py
deleted file mode 100644
index 6336365..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/StatusBarModifiedTime.py
+++ /dev/null
@@ -1,25 +0,0 @@
-import sublime, sublime_plugin, time
-from os.path import getmtime
-
-s = sublime.load_settings('Side Bar.sublime-settings')
-
-class StatusBarModifiedTime(sublime_plugin.EventListener):
-
- def on_load(self, v):
- if s.get('statusbar_modified_time') and v.file_name():
- try:
- self.show(v, getmtime(v.file_name()))
- except:
- pass
-
- def on_post_save(self, v):
- if s.get('statusbar_modified_time') and v.file_name():
- try:
- self.show(v, getmtime(v.file_name()))
- except:
- pass
-
- def show(self, v, mtime):
- v.set_status('statusbar_modified_time', time.strftime(s.get('statusbar_modified_time_format'), time.localtime(mtime)));
-
-
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/disable_default/Side Bar Mount Point.sublime-menu.txt b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/disable_default/Side Bar Mount Point.sublime-menu.txt
deleted file mode 100644
index 3411b67..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/disable_default/Side Bar Mount Point.sublime-menu.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-[
- { "caption": "-", "id": "folder_commands" },
- { "caption": "Remove Folder from Project", "command": "remove_folder", "args": { "dirs": []} }
-]
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/disable_default/Side Bar.sublime-menu.txt b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/disable_default/Side Bar.sublime-menu.txt
deleted file mode 100644
index 3d308b9..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/disable_default/Side Bar.sublime-menu.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-[
- { "caption": "New File", "command": "new_file_at", "args": {"dirs": []} },
- { "caption": "Rename…", "command": "rename_path", "args": {"paths": []} },
- { "caption": "Delete File", "command": "delete_file", "args": {"files": []} },
- { "caption": "Open Containing Folder…", "command": "open_containing_folder", "args": {"files": []} },
- { "caption": "-", "id": "folder_commands" },
- { "caption": "New Folder…", "command": "new_folder", "args": {"dirs": []} },
- { "caption": "Delete Folder", "command": "delete_folder", "args": {"dirs": []} },
- { "caption": "Find in Folder…", "command": "find_in_folder", "args": {"dirs": []} },
- { "caption": "-", "id": "end" }
-]
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/hurry/PKG-INFO b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/hurry/PKG-INFO
deleted file mode 100644
index fe3aadb..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/hurry/PKG-INFO
+++ /dev/null
@@ -1,71 +0,0 @@
-Metadata-Version: 1.0
-Name: hurry.filesize
-Version: 0.9
-Summary: A simple Python library for human readable file sizes (or anything sized in bytes).
-Home-page: UNKNOWN
-Author: Martijn Faassen, Startifact
-Author-email: faassen@startifact.com
-License: ZPL 2.1
-Description: hurry.filesize
- ==============
-
- hurry.filesize a simple Python library that can take a number of bytes and
- returns a human-readable string with the size in it, in kilobytes (K),
- megabytes (M), etc.
-
- The default system it uses is "traditional", where multipliers of 1024
- increase the unit size::
-
- >>> from hurry.filesize import size
- >>> size(1024)
- '1K'
-
- An alternative, slightly more verbose system::
-
- >>> from hurry.filesize import alternative
- >>> size(1, system=alternative)
- '1 byte'
- >>> size(10, system=alternative)
- '10 bytes'
- >>> size(1024, system=alternative)
- '1 KB'
-
- A verbose system::
-
- >>> from hurry.filesize import verbose
- >>> size(10, system=verbose)
- '10 bytes'
- >>> size(1024, system=verbose)
- '1 kilobyte'
- >>> size(2000, system=verbose)
- '1 kilobyte'
- >>> size(3000, system=verbose)
- '2 kilobytes'
- >>> size(1024 * 1024, system=verbose)
- '1 megabyte'
- >>> size(1024 * 1024 * 3, system=verbose)
- '3 megabytes'
-
- You can also use the SI system, where multipliers of 1000 increase the unit
- size::
-
- >>> from hurry.filesize import si
- >>> size(1000, system=si)
- '1K'
-
-
- Changes
- =======
-
- 0.9 (2009-03-11)
- ----------------
-
- * Initial public release.
-
- Download
- ========
-
-Keywords: file size bytes
-Platform: UNKNOWN
-Classifier: Programming Language :: Python
-Classifier: Topic :: Software Development :: Libraries :: Python Modules
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/hurry/README.txt b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/hurry/README.txt
deleted file mode 100644
index f5aa749..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/hurry/README.txt
+++ /dev/null
@@ -1,47 +0,0 @@
-hurry.filesize
-==============
-
-hurry.filesize a simple Python library that can take a number of bytes and
-returns a human-readable string with the size in it, in kilobytes (K),
-megabytes (M), etc.
-
-The default system it uses is "traditional", where multipliers of 1024
-increase the unit size::
-
- >>> from hurry.filesize import size
- >>> size(1024)
- '1K'
-
-An alternative, slightly more verbose system::
-
- >>> from hurry.filesize import alternative
- >>> size(1, system=alternative)
- '1 byte'
- >>> size(10, system=alternative)
- '10 bytes'
- >>> size(1024, system=alternative)
- '1 KB'
-
-A verbose system::
-
- >>> from hurry.filesize import verbose
- >>> size(10, system=verbose)
- '10 bytes'
- >>> size(1024, system=verbose)
- '1 kilobyte'
- >>> size(2000, system=verbose)
- '1 kilobyte'
- >>> size(3000, system=verbose)
- '2 kilobytes'
- >>> size(1024 * 1024, system=verbose)
- '1 megabyte'
- >>> size(1024 * 1024 * 3, system=verbose)
- '3 megabytes'
-
-You can also use the SI system, where multipliers of 1000 increase the unit
-size::
-
- >>> from hurry.filesize import si
- >>> size(1000, system=si)
- '1K'
-
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/hurry/__init__.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/hurry/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/hurry/filesize.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/hurry/filesize.py
deleted file mode 100644
index 32065fe..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/hurry/filesize.py
+++ /dev/null
@@ -1,110 +0,0 @@
-
-traditional = [
- (1024 ** 5, 'P'),
- (1024 ** 4, 'T'),
- (1024 ** 3, 'G'),
- (1024 ** 2, 'M'),
- (1024 ** 1, 'K'),
- (1024 ** 0, 'B'),
- ]
-
-alternative = [
- (1024 ** 5, ' PB'),
- (1024 ** 4, ' TB'),
- (1024 ** 3, ' GB'),
- (1024 ** 2, ' MB'),
- (1024 ** 1, ' KB'),
- (1024 ** 0, (' byte', ' bytes')),
- ]
-
-verbose = [
- (1024 ** 5, (' petabyte', ' petabytes')),
- (1024 ** 4, (' terabyte', ' terabytes')),
- (1024 ** 3, (' gigabyte', ' gigabytes')),
- (1024 ** 2, (' megabyte', ' megabytes')),
- (1024 ** 1, (' kilobyte', ' kilobytes')),
- (1024 ** 0, (' byte', ' bytes')),
- ]
-
-iec = [
- (1024 ** 5, 'Pi'),
- (1024 ** 4, 'Ti'),
- (1024 ** 3, 'Gi'),
- (1024 ** 2, 'Mi'),
- (1024 ** 1, 'Ki'),
- (1024 ** 0, ''),
- ]
-
-si = [
- (1000 ** 5, 'P'),
- (1000 ** 4, 'T'),
- (1000 ** 3, 'G'),
- (1000 ** 2, 'M'),
- (1000 ** 1, 'K'),
- (1000 ** 0, 'B'),
- ]
-
-
-
-def size(bytes, system=traditional):
- """Human-readable file size.
-
- Using the traditional system, where a factor of 1024 is used::
-
- >>> size(10)
- '10B'
- >>> size(100)
- '100B'
- >>> size(1000)
- '1000B'
- >>> size(2000)
- '1K'
- >>> size(10000)
- '9K'
- >>> size(20000)
- '19K'
- >>> size(100000)
- '97K'
- >>> size(200000)
- '195K'
- >>> size(1000000)
- '976K'
- >>> size(2000000)
- '1M'
-
- Using the SI system, with a factor 1000::
-
- >>> size(10, system=si)
- '10B'
- >>> size(100, system=si)
- '100B'
- >>> size(1000, system=si)
- '1K'
- >>> size(2000, system=si)
- '2K'
- >>> size(10000, system=si)
- '10K'
- >>> size(20000, system=si)
- '20K'
- >>> size(100000, system=si)
- '100K'
- >>> size(200000, system=si)
- '200K'
- >>> size(1000000, system=si)
- '1M'
- >>> size(2000000, system=si)
- '2M'
-
- """
- for factor, suffix in system:
- if bytes >= factor:
- break
- amount = int(bytes/factor)
- if isinstance(suffix, tuple):
- singular, multiple = suffix
- if amount == 1:
- suffix = singular
- else:
- suffix = multiple
- return str(amount) + suffix
-
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/license.txt b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/license.txt
deleted file mode 100644
index ed95cfe..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/license.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-"None are so hopelessly enslaved as those who falsely believe they are free."
- Johann Wolfgang von Goethe
-
-Copyright (C) 2012 Tito Bouzout
-
-This license apply to all the files inside this program unless noted
-different for some files or portions of code inside these files.
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation. http://www.gnu.org/licenses/gpl.html
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see http://www.gnu.org/licenses/gpl.html
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/messages/11.13.2012.1305.0.txt b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/messages/11.13.2012.1305.0.txt
deleted file mode 100644
index 36d23ff..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/messages/11.13.2012.1305.0.txt
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-SideBarEnhancements Changelog:
-
- ## Shorcuts collisioning with Sublime2's built-in shortcuts have been removed.
-
- If you miss these
-
- - Go to "Preferences" -> "Browse Packages" -> "User"
- - Open or create file "Default.sublime-keymap"
-
- - Add this content:
-
- , { "keys": ["ctrl+t"], "command": "side_bar_new_file2" },
- { "keys": ["f2"], "command": "side_bar_rename" },
- { "keys": ["ctrl+alt+f"], "command": "side_bar_find_files_path_containing" }
-
-
- ## If you have problems configuring F12 key
-
- - https://github.com/titoBouzout/SideBarEnhancements#f12-key
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/package-metadata.json b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/package-metadata.json
deleted file mode 100644
index 7677438..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/package-metadata.json
+++ /dev/null
@@ -1 +0,0 @@
-{"url": "https://github.com/titoBouzout/SideBarEnhancements", "version": "2013.08.28.13.28.32", "description": "Enhancements to Sublime Text sidebar. Files and folders."}
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/readme.md b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/readme.md
deleted file mode 100644
index 85e1e0b..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/readme.md
+++ /dev/null
@@ -1,4 +0,0 @@
-# This branch "master" is deprecated.
-
-For the faster and better, Sublime Text 3, please see: https://github.com/titoBouzout/SideBarEnhancements/tree/st3
-
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/send2trash/__init__.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/send2trash/__init__.py
deleted file mode 100644
index ea77870..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/send2trash/__init__.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# Copyright 2010 Hardcoded Software (http://www.hardcoded.net)
-
-# This software is licensed under the "BSD" License as described in the "LICENSE" file,
-# which should be included with this package. The terms are also available at
-# http://www.hardcoded.net/licenses/bsd_license
-
-import sys
-
-if sys.platform == 'darwin':
- from .plat_osx import send2trash
-elif sys.platform == 'win32':
- from .plat_win import send2trash
-else:
- from .plat_other import send2trash
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/send2trash/plat_osx.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/send2trash/plat_osx.py
deleted file mode 100644
index ba58b6f..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/send2trash/plat_osx.py
+++ /dev/null
@@ -1,44 +0,0 @@
-# Copyright 2010 Hardcoded Software (http://www.hardcoded.net)
-
-# This software is licensed under the "BSD" License as described in the "LICENSE" file,
-# which should be included with this package. The terms are also available at
-# http://www.hardcoded.net/licenses/bsd_license
-
-from ctypes import cdll, byref, Structure, c_char, c_char_p
-from ctypes.util import find_library
-
-Foundation = cdll.LoadLibrary(find_library('Foundation'))
-CoreServices = cdll.LoadLibrary(find_library('CoreServices'))
-
-GetMacOSStatusCommentString = Foundation.GetMacOSStatusCommentString
-GetMacOSStatusCommentString.restype = c_char_p
-FSPathMakeRefWithOptions = CoreServices.FSPathMakeRefWithOptions
-FSMoveObjectToTrashSync = CoreServices.FSMoveObjectToTrashSync
-
-kFSPathMakeRefDefaultOptions = 0
-kFSPathMakeRefDoNotFollowLeafSymlink = 0x01
-
-kFSFileOperationDefaultOptions = 0
-kFSFileOperationOverwrite = 0x01
-kFSFileOperationSkipSourcePermissionErrors = 0x02
-kFSFileOperationDoNotMoveAcrossVolumes = 0x04
-kFSFileOperationSkipPreflight = 0x08
-
-class FSRef(Structure):
- _fields_ = [('hidden', c_char * 80)]
-
-def check_op_result(op_result):
- if op_result:
- msg = GetMacOSStatusCommentString(op_result).decode('utf-8')
- raise OSError(msg)
-
-def send2trash(path):
- if not isinstance(path, bytes):
- path = path.encode('utf-8')
- fp = FSRef()
- opts = kFSPathMakeRefDoNotFollowLeafSymlink
- op_result = FSPathMakeRefWithOptions(path, opts, byref(fp), None)
- check_op_result(op_result)
- opts = kFSFileOperationDefaultOptions
- op_result = FSMoveObjectToTrashSync(byref(fp), None, opts)
- check_op_result(op_result)
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/send2trash/plat_other.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/send2trash/plat_other.py
deleted file mode 100644
index 6c9b438..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/send2trash/plat_other.py
+++ /dev/null
@@ -1,154 +0,0 @@
-# Copyright 2010 Hardcoded Software (http://www.hardcoded.net)
-
-# This software is licensed under the "BSD" License as described in the "LICENSE" file,
-# which should be included with this package. The terms are also available at
-# http://www.hardcoded.net/licenses/bsd_license
-
-# This is a reimplementation of plat_other.py with reference to the
-# freedesktop.org trash specification:
-# [1] http://www.freedesktop.org/wiki/Specifications/trash-spec
-# [2] http://www.ramendik.ru/docs/trashspec.html
-# See also:
-# [3] http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html
-#
-# For external volumes this implementation will raise an exception if it can't
-# find or create the user's trash directory.
-
-#import sys
-import os
-import os.path as op
-from datetime import datetime
-import stat
-from urllib import quote
-
-FILES_DIR = 'files'
-INFO_DIR = 'info'
-INFO_SUFFIX = '.trashinfo'
-
-# Default of ~/.local/share [3]
-XDG_DATA_HOME = op.expanduser(os.environ.get('XDG_DATA_HOME', '~/.local/share'))
-HOMETRASH = op.join(XDG_DATA_HOME, 'Trash')
-
-uid = os.getuid()
-TOPDIR_TRASH = '.Trash'
-TOPDIR_FALLBACK = '.Trash-' + str(uid)
-
-def is_parent(parent, path):
- path = op.realpath(path) # In case it's a symlink
- parent = op.realpath(parent)
- return path.startswith(parent)
-
-def format_date(date):
- return date.strftime("%Y-%m-%dT%H:%M:%S")
-
-def info_for(src, topdir):
- # ...it MUST not include a ".."" directory, and for files not "under" that
- # directory, absolute pathnames must be used. [2]
- if topdir is None or not is_parent(topdir, src):
- src = op.abspath(src)
- else:
- src = op.relpath(src, topdir)
-
- info = "[Trash Info]\n"
- info += "Path=" + quote(src) + "\n"
- info += "DeletionDate=" + format_date(datetime.now()) + "\n"
- return info
-
-def check_create(dir):
- # use 0700 for paths [3]
- if not op.exists(dir):
- os.makedirs(dir, 0o700)
-
-def trash_move(src, dst, topdir=None):
- filename = op.basename(src)
- filespath = op.join(dst, FILES_DIR)
- infopath = op.join(dst, INFO_DIR)
- base_name, ext = op.splitext(filename)
-
- counter = 0
- destname = filename
- while op.exists(op.join(filespath, destname)) or op.exists(op.join(infopath, destname + INFO_SUFFIX)):
- counter += 1
- destname = '%s %s%s' % (base_name, counter, ext)
-
- check_create(filespath)
- check_create(infopath)
-
- os.rename(src, op.join(filespath, destname))
- f = open(op.join(infopath, destname + INFO_SUFFIX), 'w')
- f.write(info_for(src, topdir))
- f.close()
-
-def find_mount_point(path):
- # Even if something's wrong, "/" is a mount point, so the loop will exit.
- # Use realpath in case it's a symlink
- path = op.realpath(path) # Required to avoid infinite loop
- while not op.ismount(path):
- path = op.split(path)[0]
- return path
-
-def find_ext_volume_global_trash(volume_root):
- # from [2] Trash directories (1) check for a .Trash dir with the right
- # permissions set.
- trash_dir = op.join(volume_root, TOPDIR_TRASH)
- if not op.exists(trash_dir):
- return None
-
- mode = os.lstat(trash_dir).st_mode
- # vol/.Trash must be a directory, cannot be a symlink, and must have the
- # sticky bit set.
- if not op.isdir(trash_dir) or op.islink(trash_dir) or not (mode & stat.S_ISVTX):
- return None
-
- trash_dir = op.join(trash_dir, str(uid))
- try:
- check_create(trash_dir)
- except OSError:
- return None
- return trash_dir
-
-def find_ext_volume_fallback_trash(volume_root):
- # from [2] Trash directories (1) create a .Trash-$uid dir.
- trash_dir = op.join(volume_root, TOPDIR_FALLBACK)
- # Try to make the directory, if we can't the OSError exception will escape
- # be thrown out of send2trash.
- check_create(trash_dir)
- return trash_dir
-
-def find_ext_volume_trash(volume_root):
- trash_dir = find_ext_volume_global_trash(volume_root)
- if trash_dir is None:
- trash_dir = find_ext_volume_fallback_trash(volume_root)
- return trash_dir
-
-# Pull this out so it's easy to stub (to avoid stubbing lstat itself)
-def get_dev(path):
- return os.lstat(path).st_dev
-
-def send2trash(path):
- #if not isinstance(path, str):
- # path = str(path, sys.getfilesystemencoding())
- #if not op.exists(path):
- # raise OSError("File not found: %s" % path)
- # ...should check whether the user has the necessary permissions to delete
- # it, before starting the trashing operation itself. [2]
- #if not os.access(path, os.W_OK):
- # raise OSError("Permission denied: %s" % path)
- # if the file to be trashed is on the same device as HOMETRASH we
- # want to move it there.
- path_dev = get_dev(path)
-
- # If XDG_DATA_HOME or HOMETRASH do not yet exist we need to stat the
- # home directory, and these paths will be created further on if needed.
- trash_dev = get_dev(op.expanduser('~'))
-
- if path_dev == trash_dev:
- topdir = XDG_DATA_HOME
- dest_trash = HOMETRASH
- else:
- topdir = find_mount_point(path)
- trash_dev = get_dev(topdir)
- if trash_dev != path_dev:
- raise OSError("Couldn't find mount point for %s" % path)
- dest_trash = find_ext_volume_trash(topdir)
- trash_move(path, dest_trash, topdir)
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/send2trash/plat_win.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/send2trash/plat_win.py
deleted file mode 100644
index 8f56817..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/send2trash/plat_win.py
+++ /dev/null
@@ -1,56 +0,0 @@
-# Copyright 2010 Hardcoded Software (http://www.hardcoded.net)
-
-# This software is licensed under the "BSD" License as described in the "LICENSE" file,
-# which should be included with this package. The terms are also available at
-# http://www.hardcoded.net/licenses/bsd_license
-
-from ctypes import windll, Structure, byref, c_uint
-from ctypes.wintypes import HWND, UINT, LPCWSTR, BOOL
-#import os.path as op
-
-shell32 = windll.shell32
-SHFileOperationW = shell32.SHFileOperationW
-
-class SHFILEOPSTRUCTW(Structure):
- _fields_ = [
- ("hwnd", HWND),
- ("wFunc", UINT),
- ("pFrom", LPCWSTR),
- ("pTo", LPCWSTR),
- ("fFlags", c_uint),
- ("fAnyOperationsAborted", BOOL),
- ("hNameMappings", c_uint),
- ("lpszProgressTitle", LPCWSTR),
- ]
-
-FO_MOVE = 1
-FO_COPY = 2
-FO_DELETE = 3
-FO_RENAME = 4
-
-FOF_MULTIDESTFILES = 1
-FOF_SILENT = 4
-FOF_NOCONFIRMATION = 16
-FOF_ALLOWUNDO = 64
-FOF_NOERRORUI = 1024
-
-def send2trash(path):
- #
- #if not isinstance(path, str):
- # path = str(path, 'mbcs')
- #if not op.isabs(path):
- # path = op.abspath(path)
- fileop = SHFILEOPSTRUCTW()
- fileop.hwnd = 0
- fileop.wFunc = FO_DELETE
- fileop.pFrom = LPCWSTR(path + '\0')
- fileop.pTo = None
- fileop.fFlags = FOF_ALLOWUNDO | FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_SILENT
- fileop.fAnyOperationsAborted = 0
- fileop.hNameMappings = 0
- fileop.lpszProgressTitle = None
- result = SHFileOperationW(byref(fileop))
- if result:
- msg = "Couldn't perform operation. Error code: %d" % result
- raise OSError(msg)
-
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/sidebar/SideBarItem.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/sidebar/SideBarItem.py
deleted file mode 100644
index 8b08881..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/sidebar/SideBarItem.py
+++ /dev/null
@@ -1,480 +0,0 @@
-# coding=utf8
-import sublime
-import os
-import re
-import shutil
-
-from SideBarProject import SideBarProject
-
-try:
- import desktop
-except:
- pass
-
-class Object():
- pass
-
-def expand_vars(path):
- for k, v in os.environ.iteritems():
- try:
- # dirty hack, this should be autofixed in python3
- k = unicode(k.encode('utf8'))
- v = unicode(v.encode('utf8'))
- path = path.replace(u'%'+k+'%', v).replace(u'%'+k.lower()+'%', v)
- except:
- pass
- return path
-
-class SideBarItem:
-
- def __init__(self, path, is_directory):
- self._path = path
- self._is_directory = is_directory
-
- def path(self, path = ''):
- if path == '':
- return self._path
- else:
- self._path = path
- self._is_directory = os.path.isdir(path)
- return path
-
- def pathSystem(self):
- import sys
- return self.path().encode(sys.getfilesystemencoding())
-
- def pathWithoutProject(self):
- path = self.path()
- for directory in SideBarProject().getDirectories():
- path = path.replace(directory, '', 1)
- return path.replace('\\', '/')
-
- def pathProject(self):
- path = self.path()
- for directory in SideBarProject().getDirectories():
- path2 = path.replace(directory, '', 1)
- if path2 != path:
- return directory
- return False
-
- def projectURL(self, type):
- filename = os.path.normpath(os.path.join(sublime.packages_path(), '..', 'Settings', 'SideBarEnhancements.json'))
- if os.path.lexists(filename):
- #try:
- import json
- data = file(filename, 'r').read()
- data = data.replace('\t', ' ').replace('\\', '/').replace('\\', '/').replace('//', '/').replace('//', '/').replace('http:/', 'http://').replace('https:/', 'https://')
- data = json.loads(data, strict=False)
-
- for path in data.keys():
- path2 = expand_vars(path)
- print '-------------------------------------------------------'
- print 'searching:'
- path2 = path2.replace('\\', '/').replace('\\', '/').replace('//', '/').replace('//', '/')
- print path2
- print 'in:'
- path3 = self.path().replace('\\', '/').replace('\\', '/').replace('//', '/').replace('//', '/')
- print path3
- print '-------------------------------------------------------'
- path4 = re.sub(re.compile("^"+re.escape(path2), re.IGNORECASE), '', path3);
- print path4
- if path4 != path3:
- url = data[path][type]
- if url:
- if url[-1:] != '/':
- url = url+'/'
- import urllib
- return url+(re.sub("^/", '', urllib.quote(path4.encode('utf-8'))));
-
- #except:
- # return False
- else:
- return False
-
- def isUnderCurrentProject(self):
- path = self.path()
- path2 = self.path()
- for directory in SideBarProject().getDirectories():
- path2 = path2.replace(directory, '', 1)
- return path != path2
-
- def pathRelativeFromProject(self):
- return re.sub('^/+', '', self.pathWithoutProject())
-
- def pathRelativeFromProjectEncoded(self):
- import urllib
- return urllib.quote(self.pathRelativeFromProject().encode('utf-8'))
-
- def pathRelativeFromView(self):
- return os.path.relpath(self.path(), os.path.dirname(sublime.active_window().active_view().file_name())).replace('\\', '/')
-
- def pathRelativeFromViewEncoded(self):
- import urllib
- return urllib.quote(os.path.relpath(self.path(), os.path.dirname(sublime.active_window().active_view().file_name())).replace('\\', '/').encode('utf-8'))
-
- def pathAbsoluteFromProject(self):
- return self.pathWithoutProject()
-
- def pathAbsoluteFromProjectEncoded(self):
- import urllib
- return urllib.quote(self.pathAbsoluteFromProject().encode('utf-8'))
-
- def uri(self):
- import urllib
- return 'file:'+urllib.pathname2url(self.path().encode('utf-8'));
-
- def join(self, name):
- return os.path.join(self.path(), name)
-
- def dirname(self):
- branch, leaf = os.path.split(self.path())
- return branch;
-
- def forCwdSystemPath(self):
- if self.isDirectory():
- return self.pathSystem()
- else:
- return self.dirnameSystem()
-
- def forCwdSystemName(self):
- if self.isDirectory():
- return '.'
- else:
- path = self.pathSystem()
- branch = self.dirnameSystem()
- leaf = path.replace(branch, '', 1).replace('\\', '').replace('/', '')
- return leaf
-
- def forCwdSystemPathRelativeFrom(self, relativeFrom):
- relative = SideBarItem(relativeFrom, os.path.isdir(relativeFrom))
- path = self.pathSystem().replace(relative.pathSystem(), '', 1).replace('\\', '/')
- if path == '':
- return '.'
- else:
- return re.sub('^/+', '', path)
-
- def forCwdSystemPathRelativeFromRecursive(self, relativeFrom):
- relative = SideBarItem(relativeFrom, os.path.isdir(relativeFrom))
- path = self.pathSystem().replace(relative.pathSystem(), '', 1).replace('\\', '/')
- if path == '':
- return '.'
- else:
- if self.isDirectory():
- return re.sub('^/+', '', path)+'/'
- else:
- return re.sub('^/+', '', path)
-
- def dirnameSystem(self):
- import sys
- return self.dirname().encode(sys.getfilesystemencoding())
-
- def dirnameCreate(self):
- try:
- os.makedirs(self.dirname())
- except:
- pass
-
- def name(self):
- branch, leaf = os.path.split(self.path())
- return leaf;
-
- def nameSystem(self):
- import sys
- return self.name().encode(sys.getfilesystemencoding())
-
- def nameEncoded(self):
- import urllib
- return urllib.quote(self.name().encode('utf-8'));
-
- def namePretty(self):
- return self.name().replace(self.extension(), '').replace('-', ' ').replace('_', ' ').strip();
-
- def open(self):
- if sublime.platform() == 'osx':
- import subprocess
- subprocess.Popen(['open', self.nameSystem()], cwd=self.dirnameSystem())
- elif sublime.platform() == 'windows':
- import subprocess
- subprocess.Popen([self.nameSystem()], cwd=self.dirnameSystem(), shell=True)
- else:
- desktop.open(self.path())
-
- def edit(self):
- return sublime.active_window().open_file(self.path())
-
- def isDirectory(self):
- return self._is_directory
-
- def isFile(self):
- return self.isDirectory() == False
-
- def contentUTF8(self):
- import codecs
- return codecs.open(self.path(), 'r', 'utf-8').read()
-
- def contentBinary(self):
- return file(self.path(), "rb").read()
-
- def contentBase64(self):
- return 'data:'+self.mime()+';base64,'+(file(self.path(), "rb").read().encode("base64").replace('\n', ''))
-
- def reveal(self):
- sublime.active_window().run_command("open_dir", {"dir": self.dirname(), "file": self.name()} )
-
- def write(self, content):
- file(self.path(), 'w+').write(content)
-
- def mime(self):
- import mimetypes
- return mimetypes.guess_type(self.path())[0] or 'application/octet-stream'
-
- def extension(self):
- return os.path.splitext('name'+self.name())[1].lower()
-
- def exists(self):
- return os.path.isdir(self.path()) or os.path.isfile(self.path())
-
- def create(self):
- if self.isDirectory():
- self.dirnameCreate()
- os.makedirs(self.path())
- else:
- self.dirnameCreate()
- self.write('')
-
- def copy(self, location, replace = False):
- location = SideBarItem(location, os.path.isdir(location));
- if location.exists() and replace == False:
- return False
- elif location.exists() and location.isFile():
- os.remove(location.path())
-
- location.dirnameCreate();
- if self.isDirectory():
- if location.exists():
- self.copy_recursive(self.path(), location.path())
- else:
- shutil.copytree(self.path(), location.path())
- else:
- shutil.copy2(self.path(), location.path())
- return True
-
- def copy_recursive(self, _from, _to):
-
- if os.path.isfile(_from) or os.path.islink(_from):
- try:
- os.makedirs(os.path.dirname(_to));
- except:
- pass
- if os.path.exists(_to):
- os.remove(_to)
- shutil.copy2(_from, _to)
- else:
- try:
- os.makedirs(_to);
- except:
- pass
- for content in os.listdir(_from):
- __from = os.path.join(_from, content)
- __to = os.path.join(_to, content)
- self.copy_recursive(__from, __to)
-
- def move(self, location, replace = False):
- location = SideBarItem(location, os.path.isdir(location));
- if location.exists() and replace == False:
- if self.path().lower() == location.path().lower():
- pass
- else:
- return False
- elif location.exists() and location.isFile():
- os.remove(location.path())
-
- if self.path().lower() == location.path().lower():
- location.dirnameCreate();
- os.rename(self.path(), location.path()+'.sublime-temp')
- os.rename(location.path()+'.sublime-temp', location.path())
- self._move_moveViews(self.path(), location.path())
- else:
- location.dirnameCreate();
- if location.exists():
- self.move_recursive(self.path(), location.path())
- else:
- os.rename(self.path(), location.path())
- self._move_moveViews(self.path(), location.path())
- return True
-
- def move_recursive(self, _from, _to):
- if os.path.isfile(_from) or os.path.islink(_from):
- try:
- os.makedirs(os.path.dirname(_to));
- except:
- pass
- if os.path.exists(_to):
- os.remove(_to)
- os.rename(_from, _to)
- else:
- try:
- os.makedirs(_to);
- except:
- pass
- for content in os.listdir(_from):
- __from = os.path.join(_from, content)
- __to = os.path.join(_to, content)
- self.move_recursive(__from, __to)
- os.rmdir(_from)
-
- def _move_moveViews(self, old, location):
- for window in sublime.windows():
- active_view = window.active_view()
- views = []
- for view in window.views():
- if view.file_name():
- views.append(view)
- views.reverse();
- for view in views:
- if old == view.file_name():
- active_view = self._move_moveView(window, view, location, active_view)
- elif view.file_name().find(old+'\\') == 0:
- active_view = self._move_moveView(window, view, view.file_name().replace(old+'\\', location+'\\', 1), active_view)
- elif view.file_name().find(old+'/') == 0:
- active_view = self._move_moveView(window, view, view.file_name().replace(old+'/', location+'/', 1), active_view)
-
- def _move_moveView(self, window, view, location, active_view):
- if active_view == view:
- is_active_view = True
- else:
- is_active_view = False
-
- options = Object()
-
- options.scroll = view.viewport_position()
-
- options.selections = [[item.a, item.b] for item in view.sel()]
-
- options.marks = [[item.a, item.b] for item in view.get_regions("mark")]
-
- options.bookmarks = [[item.a, item.b] for item in view.get_regions("bookmarks")]
-
- if int(sublime.version()) >= 2167:
- options.folds = [[item.a, item.b] for item in view.folded_regions()]
- else:
- options.folds = [[item.a, item.b] for item in view.unfold(sublime.Region(0, view.size()))]
-
- options.syntax = view.settings().get('syntax')
-
- try:
- _window = window or view.window() or sublime.active_window()
- options.position = _window.get_view_index(view)
- except:
- options.position = False
-
- window.focus_view(view)
- if view.is_dirty():
- options.content = view.substr(sublime.Region(0, view.size()))
- view.window().run_command('revert')
- else:
- options.content = False
-
- _view = view
- view = window.open_file(location)
- window.focus_view(_view)
- window.run_command('close')
-
- sublime.set_timeout(lambda: self._move_restoreView(view, options, window), 200)
-
- if is_active_view:
- window.focus_view(view)
- return view
- else:
- window.focus_view(active_view)
- return active_view
-
- def _move_restoreView(self, view, options, window):
- if view.is_loading():
- sublime.set_timeout(lambda: self._move_restoreView(view, options, window), 100)
- else:
- if options.content != False:
- edit = view.begin_edit()
- view.replace(edit, sublime.Region(0, view.size()), options.content);
- view.sel().clear()
- view.sel().add(sublime.Region(0))
- view.end_edit(edit)
-
- if options.position != False:
- try:
- _window = window or view.window() or sublime.active_window()
- group, index = options.position
- _window.set_view_index(view, group, index)
- except:
- pass
-
- if options.syntax:
- view.settings().set('syntax', options.syntax);
-
- for r in options.folds:
- view.fold(sublime.Region(r[0], r[1]))
-
- view.sel().clear()
- for r in options.selections:
- view.sel().add(sublime.Region(r[0], r[1]))
-
- rs = []
- for r in options.marks:
- rs.append(sublime.Region(r[0], r[1]))
- if len(rs):
- view.add_regions("mark", rs, "mark", "dot", sublime.HIDDEN | sublime.PERSISTENT)
-
- rs = []
- for r in options.bookmarks:
- rs.append(sublime.Region(r[0], r[1]))
- if len(rs):
- view.add_regions("bookmarks", rs, "bookmarks", "bookmark", sublime.HIDDEN | sublime.PERSISTENT)
-
- view.set_viewport_position(options.scroll, False)
-
- def close_associated_buffers(self):
- path = self.path()
- closed_items = []
- for window in sublime.windows():
- active_view = window.active_view()
- views = []
- for view in window.views():
- if view.file_name():
- views.append(view)
- views.reverse();
- for view in views:
- if path == view.file_name():
- if view.window():
- closed_items.append([view.file_name(), view.window(), view.window().get_view_index(view)])
- if len(window.views()) == 1:
- window.new_file()
- window.focus_view(view)
- window.run_command('revert')
- window.run_command('close')
- elif view.file_name().find(path+'\\') == 0:
- if view.window():
- closed_items.append([view.file_name(), view.window(), view.window().get_view_index(view)])
- if len(window.views()) == 1:
- window.new_file()
- window.focus_view(view)
- window.run_command('revert')
- window.run_command('close')
- elif view.file_name().find(path+'/') == 0:
- if view.window():
- closed_items.append([view.file_name(), view.window(), view.window().get_view_index(view)])
- if len(window.views()) == 1:
- window.new_file()
- window.focus_view(view)
- window.run_command('revert')
- window.run_command('close')
-
- # try to repaint
- try:
- window.focus_view(active_view)
- window.focus_view(window.active_view())
- except:
- try:
- window.focus_view(window.active_view())
- except:
- pass
- return closed_items
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/sidebar/SideBarProject.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/sidebar/SideBarProject.py
deleted file mode 100644
index 7ceae07..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/sidebar/SideBarProject.py
+++ /dev/null
@@ -1,119 +0,0 @@
-import sublime
-import re
-import os
-
-class SideBarProject:
-
- def getDirectories(self):
- return sublime.active_window().folders()
-
- def hasOpenedProject(self):
- return self.getProjectFile() != None
-
- def getDirectoryFromPath(self, path):
- for directory in self.getDirectories():
- maybe_path = path.replace(directory, '', 1)
- if maybe_path != path:
- return directory
-
- def getProjectFile(self):
- if not self.getDirectories():
- return None
- import json
- data = file(os.path.normpath(os.path.join(sublime.packages_path(), '..', 'Settings', 'Session.sublime_session')), 'r').read()
- data = data.replace('\t', ' ')
- data = json.loads(data, strict=False)
- projects = data['workspaces']['recent_workspaces']
-
- if os.path.lexists(os.path.join(sublime.packages_path(), '..', 'Settings', 'Auto Save Session.sublime_session')):
- data = file(os.path.normpath(os.path.join(sublime.packages_path(), '..', 'Settings', 'Auto Save Session.sublime_session')), 'r').read()
- data = data.replace('\t', ' ')
- data = json.loads(data, strict=False)
- if 'workspaces' in data and 'recent_workspaces' in data['workspaces'] and data['workspaces']['recent_workspaces']:
- projects += data['workspaces']['recent_workspaces']
- projects = list(set(projects))
- for project_file in projects:
- project_file = re.sub(r'^/([^/])/', '\\1:/', project_file);
- project_json = json.loads(file(project_file, 'r').read(), strict=False)
- if 'folders' in project_json:
- folders = project_json['folders']
- found_all = True
- for directory in self.getDirectories():
- found = False
- for folder in folders:
- folder_path = re.sub(r'^/([^/])/', '\\1:/', folder['path']);
- if folder_path == directory.replace('\\', '/'):
- found = True
- break;
- if found == False:
- found_all = False
- break;
- if found_all:
- return project_file
- return None
-
- def getProjectJson(self):
- if not self.hasOpenedProject():
- return None
- import json
- return json.loads(file(self.getProjectFile(), 'r').read(), strict=False)
-
- def excludeDirectory(self, path):
- import json
- project_file = self.getProjectFile();
- project = self.getProjectJson()
-
- path = re.sub(r'^([^/])\:/', '/\\1/', path.replace('\\', '/'))
-
- for folder in project['folders']:
- if path.find(folder['path']) == 0:
- try:
- folder['folder_exclude_patterns'].append(re.sub(r'/+$', '', path.replace(folder['path']+'/', '', 1)))
- except:
- folder['folder_exclude_patterns'] = [re.sub(r'/+$', '', path.replace(folder['path']+'/', '', 1))]
- file(project_file, 'w+').write(json.dumps(project, indent=1))
- return
-
- def excludeFile(self, path):
- import json
- project_file = self.getProjectFile();
- project = self.getProjectJson()
-
- path = re.sub(r'^([^/])\:/', '/\\1/', path.replace('\\', '/'))
-
- for folder in project['folders']:
- if path.find(folder['path']) == 0:
- try:
- folder['file_exclude_patterns'].append(path.replace(folder['path']+'/', '', 1))
- except:
- folder['file_exclude_patterns'] = [path.replace(folder['path']+'/', '', 1)]
- file(project_file, 'w+').write(json.dumps(project, indent=1))
- return
-
- def rootAdd(self, path):
- import json
- project_file = self.getProjectFile();
- project = self.getProjectJson()
-
- path = re.sub(r'^([^/])\:/', '/\\1/', path.replace('\\', '/'))
- project['folders'].append({'path':path});
-
- file(project_file, 'w+').write(json.dumps(project, indent=1))
-
- def refresh(self):
- try:
- sublime.set_timeout(lambda:sublime.active_window().run_command('refresh_folder_list'), 200);
- sublime.set_timeout(lambda:sublime.active_window().run_command('refresh_folder_list'), 600);
- sublime.set_timeout(lambda:sublime.active_window().run_command('refresh_folder_list'), 1300);
- sublime.set_timeout(lambda:sublime.active_window().run_command('refresh_folder_list'), 2300);
- except:
- pass
-
- def getPreference(self, name):
- if not self.hasOpenedProject():
- return None
- project = self.getProjectJson()
- try:
- return project[name]
- except:
- return None
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/sidebar/SideBarSelection.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/sidebar/SideBarSelection.py
deleted file mode 100644
index 00748e7..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/sidebar/SideBarSelection.py
+++ /dev/null
@@ -1,186 +0,0 @@
-# coding=utf8
-import sublime
-import os
-import re
-
-from SideBarProject import SideBarProject
-from SideBarItem import SideBarItem
-
-class SideBarSelection:
-
- def __init__(self, paths = []):
-
- if len(paths) < 1:
- try:
- path = sublime.active_window().active_view().file_name()
- if self.isNone(path):
- paths = []
- else:
- paths = [path]
- except:
- paths = []
- self._paths = paths
- self._paths.sort()
- self._obtained_selection_information_basic = False
- self._obtained_selection_information_extended = False
-
- def len(self):
- return len(self._paths)
-
- def hasDirectories(self):
- self._obtainSelectionInformationBasic()
- return self._has_directories
-
- def hasFiles(self):
- self._obtainSelectionInformationBasic()
- return self._has_files
-
- def hasOnlyDirectories(self):
- self._obtainSelectionInformationBasic()
- return self._only_directories
-
- def hasOnlyFiles(self):
- self._obtainSelectionInformationBasic()
- return self._only_files
-
- def hasProjectDirectories(self):
- if self.hasDirectories():
- project_directories = SideBarProject().getDirectories()
- for item in self.getSelectedDirectories():
- if item.path() in project_directories:
- return True
- return False
- else:
- return False
-
- def hasItemsUnderProject(self):
- for item in self.getSelectedItems():
- if item.isUnderCurrentProject():
- return True
- return False
-
- def hasImages(self):
- return self.hasFilesWithExtension('gif|jpg|jpeg|png')
-
- def hasFilesWithExtension(self, extensions):
- extensions = re.compile('('+extensions+')$', re.I);
- for item in self.getSelectedFiles():
- if extensions.search(item.path()):
- return True;
- return False
-
- def getSelectedItems(self):
- self._obtainSelectionInformationExtended()
- return self._files + self._directories;
-
- def getSelectedItemsWithoutChildItems(self):
- self._obtainSelectionInformationExtended()
- items = []
- for item in self._items_without_containing_child_items:
- items.append(SideBarItem(item, os.path.isdir(item)))
- return items
-
- def getSelectedDirectories(self):
- self._obtainSelectionInformationExtended()
- return self._directories;
-
- def getSelectedFiles(self):
- self._obtainSelectionInformationExtended()
- return self._files;
-
- def getSelectedDirectoriesOrDirnames(self):
- self._obtainSelectionInformationExtended()
- return self._directories_or_dirnames;
-
- def getSelectedImages(self):
- return self.getSelectedFilesWithExtension('gif|jpg|jpeg|png')
-
- def getSelectedFilesWithExtension(self, extensions):
- items = []
- extensions = re.compile('('+extensions+')$', re.I);
- for item in self.getSelectedFiles():
- if extensions.search(item.path()):
- items.append(item)
- return items
-
- def _obtainSelectionInformationBasic(self):
- if not self._obtained_selection_information_basic:
- self._obtained_selection_information_basic = True
-
- self._has_directories = False
- self._has_files = False
- self._only_directories = False
- self._only_files = False
-
- for path in self._paths:
- if self._has_directories == False and os.path.isdir(path):
- self._has_directories = True
- if self._has_files == False and os.path.isdir(path) == False:
- self._has_files = True
- if self._has_files and self._has_directories:
- break
-
- if self._has_files and self._has_directories:
- self._only_directories = False
- self._only_files = False
- elif self._has_files:
- self._only_files = True
- elif self._has_directories:
- self._only_directories = True
-
- def _obtainSelectionInformationExtended(self):
- if not self._obtained_selection_information_extended:
- self._obtained_selection_information_extended = True
-
- self._directories = []
- self._files = []
- self._directories_or_dirnames = []
- self._items_without_containing_child_items = []
-
- _directories = []
- _files = []
- _directories_or_dirnames = []
- _items_without_containing_child_items = []
-
- for path in self._paths:
- if os.path.isdir(path):
- item = SideBarItem(path, True)
- if item.path() not in _directories:
- _directories.append(item.path())
- self._directories.append(item)
- if item.path() not in _directories_or_dirnames:
- _directories_or_dirnames.append(item.path())
- self._directories_or_dirnames.append(item)
- _items_without_containing_child_items = self._itemsWithoutContainingChildItems(_items_without_containing_child_items, item.path())
- else:
- item = SideBarItem(path, False)
- if item.path() not in _files:
- _files.append(item.path())
- self._files.append(item)
- _items_without_containing_child_items = self._itemsWithoutContainingChildItems(_items_without_containing_child_items, item.path())
- item = SideBarItem(os.path.dirname(path), True)
- if item.path() not in _directories_or_dirnames:
- _directories_or_dirnames.append(item.path())
- self._directories_or_dirnames.append(item)
-
- self._items_without_containing_child_items = _items_without_containing_child_items
-
- def _itemsWithoutContainingChildItems(self, items, item):
- new_list = []
- add = True
- for i in items:
- if i.find(item+'\\') == 0 or i.find(item+'/') == 0:
- continue
- else:
- new_list.append(i)
- if (item+'\\').find(i+'\\') == 0 or (item+'/').find(i+'/') == 0:
- add = False
- if add:
- new_list.append(item)
- return new_list
-
- def isNone(self, path):
- if path == None or path == '' or path == '.' or path == '..' or path == './' or path == '/' or path == '//' or path == '\\' or path == '\\\\' or path == '\\\\\\\\':
- return True
- else:
- return False
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/sidebar/__init__.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/sidebar/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/sidebar/desktop/__init__.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/sidebar/desktop/__init__.py
deleted file mode 100644
index d8bfcc8..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/sidebar/desktop/__init__.py
+++ /dev/null
@@ -1,281 +0,0 @@
-#!/usr/bin/env python
-
-"""
-Simple desktop integration for Python. This module provides desktop environment
-detection and resource opening support for a selection of common and
-standardised desktop environments.
-
-Copyright (C) 2005, 2006, 2007, 2008, 2009 Paul Boddie
-
-This program is free software; you can redistribute it and/or modify it under
-the terms of the GNU Lesser General Public License as published by the Free
-Software Foundation; either version 3 of the License, or (at your option) any
-later version.
-
-This program is distributed in the hope that it will be useful, but WITHOUT
-ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
-details.
-
-You should have received a copy of the GNU Lesser General Public License along
-with this program. If not, see .
-
---------
-
-Desktop Detection
------------------
-
-To detect a specific desktop environment, use the get_desktop function.
-To detect whether the desktop environment is standardised (according to the
-proposed DESKTOP_LAUNCH standard), use the is_standard function.
-
-Opening URLs
-------------
-
-To open a URL in the current desktop environment, relying on the automatic
-detection of that environment, use the desktop.open function as follows:
-
-desktop.open("http://www.python.org")
-
-To override the detected desktop, specify the desktop parameter to the open
-function as follows:
-
-desktop.open("http://www.python.org", "KDE") # Insists on KDE
-desktop.open("http://www.python.org", "GNOME") # Insists on GNOME
-
-Without overriding using the desktop parameter, the open function will attempt
-to use the "standard" desktop opening mechanism which is controlled by the
-DESKTOP_LAUNCH environment variable as described below.
-
-The DESKTOP_LAUNCH Environment Variable
----------------------------------------
-
-The DESKTOP_LAUNCH environment variable must be shell-quoted where appropriate,
-as shown in some of the following examples:
-
-DESKTOP_LAUNCH="kdialog --msgbox" Should present any opened URLs in
- their entirety in a KDE message box.
- (Command "kdialog" plus parameter.)
-DESKTOP_LAUNCH="my\ opener" Should run the "my opener" program to
- open URLs.
- (Command "my opener", no parameters.)
-DESKTOP_LAUNCH="my\ opener --url" Should run the "my opener" program to
- open URLs.
- (Command "my opener" plus parameter.)
-
-Details of the DESKTOP_LAUNCH environment variable convention can be found here:
-http://lists.freedesktop.org/archives/xdg/2004-August/004489.html
-
-Other Modules
--------------
-
-The desktop.dialog module provides support for opening dialogue boxes.
-The desktop.windows module permits the inspection of desktop windows.
-"""
-
-__version__ = "0.4"
-
-import os
-import sys
-
-# Provide suitable process creation functions.
-
-try:
- import subprocess
- def _run(cmd, shell, wait):
- opener = subprocess.Popen(cmd, shell=shell)
- if wait: opener.wait()
- return opener.pid
-
- def _readfrom(cmd, shell):
- opener = subprocess.Popen(cmd, shell=shell, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
- opener.stdin.close()
- return opener.stdout.read()
-
- def _status(cmd, shell):
- opener = subprocess.Popen(cmd, shell=shell)
- opener.wait()
- return opener.returncode == 0
-
-except ImportError:
- import popen2
- def _run(cmd, shell, wait):
- opener = popen2.Popen3(cmd)
- if wait: opener.wait()
- return opener.pid
-
- def _readfrom(cmd, shell):
- opener = popen2.Popen3(cmd)
- opener.tochild.close()
- opener.childerr.close()
- return opener.fromchild.read()
-
- def _status(cmd, shell):
- opener = popen2.Popen3(cmd)
- opener.wait()
- return opener.poll() == 0
-
-import commands
-
-# Private functions.
-
-def _get_x11_vars():
-
- "Return suitable environment definitions for X11."
-
- if not os.environ.get("DISPLAY", "").strip():
- return "DISPLAY=:0.0 "
- else:
- return ""
-
-def _is_xfce():
-
- "Return whether XFCE is in use."
-
- # XFCE detection involves testing the output of a program.
-
- try:
- return _readfrom(_get_x11_vars() + "xprop -root _DT_SAVE_MODE", shell=1).strip().endswith(' = "xfce4"')
- except OSError:
- return 0
-
-def _is_x11():
-
- "Return whether the X Window System is in use."
-
- return os.environ.has_key("DISPLAY")
-
-# Introspection functions.
-
-def get_desktop():
-
- """
- Detect the current desktop environment, returning the name of the
- environment. If no environment could be detected, None is returned.
- """
-
- if os.environ.has_key("KDE_FULL_SESSION") or \
- os.environ.has_key("KDE_MULTIHEAD"):
- return "KDE"
- elif os.environ.has_key("GNOME_DESKTOP_SESSION_ID") or \
- os.environ.has_key("GNOME_KEYRING_SOCKET"):
- return "GNOME"
- elif sys.platform == "darwin":
- return "Mac OS X"
- elif hasattr(os, "startfile"):
- return "Windows"
- elif _is_xfce():
- return "XFCE"
-
- # KDE, GNOME and XFCE run on X11, so we have to test for X11 last.
-
- if _is_x11():
- return "X11"
- else:
- return None
-
-def use_desktop(desktop):
-
- """
- Decide which desktop should be used, based on the detected desktop and a
- supplied 'desktop' argument (which may be None). Return an identifier
- indicating the desktop type as being either "standard" or one of the results
- from the 'get_desktop' function.
- """
-
- # Attempt to detect a desktop environment.
-
- detected = get_desktop()
-
- # Start with desktops whose existence can be easily tested.
-
- if (desktop is None or desktop == "standard") and is_standard():
- return "standard"
- elif (desktop is None or desktop == "Windows") and detected == "Windows":
- return "Windows"
-
- # Test for desktops where the overriding is not verified.
-
- elif (desktop or detected) == "KDE":
- return "KDE"
- elif (desktop or detected) == "GNOME":
- return "GNOME"
- elif (desktop or detected) == "XFCE":
- return "XFCE"
- elif (desktop or detected) == "Mac OS X":
- return "Mac OS X"
- elif (desktop or detected) == "X11":
- return "X11"
- else:
- return None
-
-def is_standard():
-
- """
- Return whether the current desktop supports standardised application
- launching.
- """
-
- return os.environ.has_key("DESKTOP_LAUNCH")
-
-# Activity functions.
-
-def open(url, desktop=None, wait=0):
-
- """
- Open the 'url' in the current desktop's preferred file browser. If the
- optional 'desktop' parameter is specified then attempt to use that
- particular desktop environment's mechanisms to open the 'url' instead of
- guessing or detecting which environment is being used.
-
- Suggested values for 'desktop' are "standard", "KDE", "GNOME", "XFCE",
- "Mac OS X", "Windows" where "standard" employs a DESKTOP_LAUNCH environment
- variable to open the specified 'url'. DESKTOP_LAUNCH should be a command,
- possibly followed by arguments, and must have any special characters
- shell-escaped.
-
- The process identifier of the "opener" (ie. viewer, editor, browser or
- program) associated with the 'url' is returned by this function. If the
- process identifier cannot be determined, None is returned.
-
- An optional 'wait' parameter is also available for advanced usage and, if
- 'wait' is set to a true value, this function will wait for the launching
- mechanism to complete before returning (as opposed to immediately returning
- as is the default behaviour).
- """
-
- # Decide on the desktop environment in use.
-
- desktop_in_use = use_desktop(desktop)
-
- if desktop_in_use == "standard":
- arg = "".join([os.environ["DESKTOP_LAUNCH"], commands.mkarg(url)])
- return _run(arg, 1, wait)
-
- elif desktop_in_use == "Windows":
- # NOTE: This returns None in current implementations.
- return os.startfile(url)
-
- elif desktop_in_use == "KDE":
- cmd = ["kfmclient", "exec", url]
-
- elif desktop_in_use == "GNOME":
- cmd = ["gnome-open", url]
-
- elif desktop_in_use == "XFCE":
- cmd = ["exo-open", url]
-
- elif desktop_in_use == "Mac OS X":
- cmd = ["open", url]
-
- elif desktop_in_use == "X11" and os.environ.has_key("BROWSER"):
- cmd = [os.environ["BROWSER"], url]
-
- # Finish with an error where no suitable desktop was identified.
-
- else:
- raise OSError, "Desktop '%s' not supported (neither DESKTOP_LAUNCH nor os.startfile could be used)" % desktop_in_use
-
- return _run(cmd, 0, wait)
-
-# vim: tabstop=4 expandtab shiftwidth=4
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/sidebar/desktop/dialog.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/sidebar/desktop/dialog.py
deleted file mode 100644
index 9525004..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/sidebar/desktop/dialog.py
+++ /dev/null
@@ -1,549 +0,0 @@
-#!/usr/bin/env python
-
-"""
-Simple desktop dialogue box support for Python.
-
-Copyright (C) 2007, 2009 Paul Boddie
-
-This program is free software; you can redistribute it and/or modify it under
-the terms of the GNU Lesser General Public License as published by the Free
-Software Foundation; either version 3 of the License, or (at your option) any
-later version.
-
-This program is distributed in the hope that it will be useful, but WITHOUT
-ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
-details.
-
-You should have received a copy of the GNU Lesser General Public License along
-with this program. If not, see .
-
---------
-
-Opening Dialogue Boxes (Dialogs)
---------------------------------
-
-To open a dialogue box (dialog) in the current desktop environment, relying on
-the automatic detection of that environment, use the appropriate dialogue box
-class:
-
-question = desktop.dialog.Question("Are you sure?")
-result = question.open()
-
-To override the detected desktop, specify the desktop parameter to the open
-function as follows:
-
-question.open("KDE") # Insists on KDE
-question.open("GNOME") # Insists on GNOME
-
-The dialogue box options are documented in each class's docstring.
-
-Available dialogue box classes are listed in the desktop.dialog.available
-attribute.
-
-Supported desktop environments are listed in the desktop.dialog.supported
-attribute.
-"""
-
-from desktop import use_desktop, _run, _readfrom, _status
-
-class _wrapper:
- def __init__(self, handler):
- self.handler = handler
-
-class _readvalue(_wrapper):
- def __call__(self, cmd, shell):
- return self.handler(cmd, shell).strip()
-
-class _readinput(_wrapper):
- def __call__(self, cmd, shell):
- return self.handler(cmd, shell)[:-1]
-
-class _readvalues_kdialog(_wrapper):
- def __call__(self, cmd, shell):
- result = self.handler(cmd, shell).strip().strip('"')
- if result:
- return result.split('" "')
- else:
- return []
-
-class _readvalues_zenity(_wrapper):
- def __call__(self, cmd, shell):
- result = self.handler(cmd, shell).strip()
- if result:
- return result.split("|")
- else:
- return []
-
-class _readvalues_Xdialog(_wrapper):
- def __call__(self, cmd, shell):
- result = self.handler(cmd, shell).strip()
- if result:
- return result.split("/")
- else:
- return []
-
-# Dialogue parameter classes.
-
-class String:
-
- "A generic parameter."
-
- def __init__(self, name):
- self.name = name
-
- def convert(self, value, program):
- return [value or ""]
-
-class Strings(String):
-
- "Multiple string parameters."
-
- def convert(self, value, program):
- return value or []
-
-class StringPairs(String):
-
- "Multiple string parameters duplicated to make identifiers."
-
- def convert(self, value, program):
- l = []
- for v in value:
- l.append(v)
- l.append(v)
- return l
-
-class StringKeyword:
-
- "A keyword parameter."
-
- def __init__(self, keyword, name):
- self.keyword = keyword
- self.name = name
-
- def convert(self, value, program):
- return [self.keyword + "=" + (value or "")]
-
-class StringKeywords:
-
- "Multiple keyword parameters."
-
- def __init__(self, keyword, name):
- self.keyword = keyword
- self.name = name
-
- def convert(self, value, program):
- l = []
- for v in value or []:
- l.append(self.keyword + "=" + v)
- return l
-
-class Integer(String):
-
- "An integer parameter."
-
- defaults = {
- "width" : 40,
- "height" : 15,
- "list_height" : 10
- }
- scale = 8
-
- def __init__(self, name, pixels=0):
- String.__init__(self, name)
- if pixels:
- self.factor = self.scale
- else:
- self.factor = 1
-
- def convert(self, value, program):
- if value is None:
- value = self.defaults[self.name]
- return [str(int(value) * self.factor)]
-
-class IntegerKeyword(Integer):
-
- "An integer keyword parameter."
-
- def __init__(self, keyword, name, pixels=0):
- Integer.__init__(self, name, pixels)
- self.keyword = keyword
-
- def convert(self, value, program):
- if value is None:
- value = self.defaults[self.name]
- return [self.keyword + "=" + str(int(value) * self.factor)]
-
-class Boolean(String):
-
- "A boolean parameter."
-
- values = {
- "kdialog" : ["off", "on"],
- "zenity" : ["FALSE", "TRUE"],
- "Xdialog" : ["off", "on"]
- }
-
- def convert(self, value, program):
- values = self.values[program]
- if value:
- return [values[1]]
- else:
- return [values[0]]
-
-class MenuItemList(String):
-
- "A menu item list parameter."
-
- def convert(self, value, program):
- l = []
- for v in value:
- l.append(v.value)
- l.append(v.text)
- return l
-
-class ListItemList(String):
-
- "A radiolist/checklist item list parameter."
-
- def __init__(self, name, status_first=0):
- String.__init__(self, name)
- self.status_first = status_first
-
- def convert(self, value, program):
- l = []
- for v in value:
- boolean = Boolean(None)
- status = boolean.convert(v.status, program)
- if self.status_first:
- l += status
- l.append(v.value)
- l.append(v.text)
- if not self.status_first:
- l += status
- return l
-
-# Dialogue argument values.
-
-class MenuItem:
-
- "A menu item which can also be used with radiolists and checklists."
-
- def __init__(self, value, text, status=0):
- self.value = value
- self.text = text
- self.status = status
-
-# Dialogue classes.
-
-class Dialogue:
-
- commands = {
- "KDE" : "kdialog",
- "GNOME" : "zenity",
- "XFCE" : "zenity", # NOTE: Based on observations with Xubuntu.
- "X11" : "Xdialog"
- }
-
- def open(self, desktop=None):
-
- """
- Open a dialogue box (dialog) using a program appropriate to the desktop
- environment in use.
-
- If the optional 'desktop' parameter is specified then attempt to use
- that particular desktop environment's mechanisms to open the dialog
- instead of guessing or detecting which environment is being used.
-
- Suggested values for 'desktop' are "standard", "KDE", "GNOME",
- "Mac OS X", "Windows".
-
- The result of the dialogue interaction may be a string indicating user
- input (for Input, Password, Menu, Pulldown), a list of strings
- indicating selections of one or more items (for RadioList, CheckList),
- or a value indicating true or false (for Question, Warning, Message,
- Error).
-
- Where a string value may be expected but no choice is made, an empty
- string may be returned. Similarly, where a list of values is expected
- but no choice is made, an empty list may be returned.
- """
-
- # Decide on the desktop environment in use.
-
- desktop_in_use = use_desktop(desktop)
-
- # Get the program.
-
- try:
- program = self.commands[desktop_in_use]
- except KeyError:
- raise OSError, "Desktop '%s' not supported (no known dialogue box command could be suggested)" % desktop_in_use
-
- # The handler is one of the functions communicating with the subprocess.
- # Some handlers return boolean values, others strings.
-
- handler, options = self.info[program]
-
- cmd = [program]
- for option in options:
- if isinstance(option, str):
- cmd.append(option)
- else:
- value = getattr(self, option.name, None)
- cmd += option.convert(value, program)
-
- return handler(cmd, 0)
-
-class Simple(Dialogue):
- def __init__(self, text, width=None, height=None):
- self.text = text
- self.width = width
- self.height = height
-
-class Question(Simple):
-
- """
- A dialogue asking a question and showing response buttons.
- Options: text, width (in characters), height (in characters)
- Response: a boolean value indicating an affirmative response (true) or a
- negative response
- """
-
- name = "question"
- info = {
- "kdialog" : (_status, ["--yesno", String("text")]),
- "zenity" : (_status, ["--question", StringKeyword("--text", "text")]),
- "Xdialog" : (_status, ["--stdout", "--yesno", String("text"), Integer("height"), Integer("width")]),
- }
-
-class Warning(Simple):
-
- """
- A dialogue asking a question and showing response buttons.
- Options: text, width (in characters), height (in characters)
- Response: a boolean value indicating an affirmative response (true) or a
- negative response
- """
-
- name = "warning"
- info = {
- "kdialog" : (_status, ["--warningyesno", String("text")]),
- "zenity" : (_status, ["--warning", StringKeyword("--text", "text")]),
- "Xdialog" : (_status, ["--stdout", "--yesno", String("text"), Integer("height"), Integer("width")]),
- }
-
-class Message(Simple):
-
- """
- A message dialogue.
- Options: text, width (in characters), height (in characters)
- Response: a boolean value indicating an affirmative response (true) or a
- negative response
- """
-
- name = "message"
- info = {
- "kdialog" : (_status, ["--msgbox", String("text")]),
- "zenity" : (_status, ["--info", StringKeyword("--text", "text")]),
- "Xdialog" : (_status, ["--stdout", "--msgbox", String("text"), Integer("height"), Integer("width")]),
- }
-
-class Error(Simple):
-
- """
- An error dialogue.
- Options: text, width (in characters), height (in characters)
- Response: a boolean value indicating an affirmative response (true) or a
- negative response
- """
-
- name = "error"
- info = {
- "kdialog" : (_status, ["--error", String("text")]),
- "zenity" : (_status, ["--error", StringKeyword("--text", "text")]),
- "Xdialog" : (_status, ["--stdout", "--msgbox", String("text"), Integer("height"), Integer("width")]),
- }
-
-class Menu(Simple):
-
- """
- A menu of options, one of which being selectable.
- Options: text, width (in characters), height (in characters),
- list_height (in items), items (MenuItem objects)
- Response: a value corresponding to the chosen item
- """
-
- name = "menu"
- info = {
- "kdialog" : (_readvalue(_readfrom), ["--menu", String("text"), MenuItemList("items")]),
- "zenity" : (_readvalue(_readfrom), ["--list", StringKeyword("--text", "text"), StringKeywords("--column", "titles"),
- MenuItemList("items")]
- ),
- "Xdialog" : (_readvalue(_readfrom), ["--stdout", "--menubox",
- String("text"), Integer("height"), Integer("width"), Integer("list_height"), MenuItemList("items")]
- ),
- }
- item = MenuItem
- number_of_titles = 2
-
- def __init__(self, text, titles, items=None, width=None, height=None, list_height=None):
-
- """
- Initialise a menu with the given heading 'text', column 'titles', and
- optional 'items' (which may be added later), 'width' (in characters),
- 'height' (in characters) and 'list_height' (in items).
- """
-
- Simple.__init__(self, text, width, height)
- self.titles = ([""] * self.number_of_titles + titles)[-self.number_of_titles:]
- self.items = items or []
- self.list_height = list_height
-
- def add(self, *args, **kw):
-
- """
- Add an item, passing the given arguments to the appropriate item class.
- """
-
- self.items.append(self.item(*args, **kw))
-
-class RadioList(Menu):
-
- """
- A list of radio buttons, one of which being selectable.
- Options: text, width (in characters), height (in characters),
- list_height (in items), items (MenuItem objects), titles
- Response: a list of values corresponding to chosen items (since some
- programs, eg. zenity, appear to support multiple default
- selections)
- """
-
- name = "radiolist"
- info = {
- "kdialog" : (_readvalues_kdialog(_readfrom), ["--radiolist", String("text"), ListItemList("items")]),
- "zenity" : (_readvalues_zenity(_readfrom),
- ["--list", "--radiolist", StringKeyword("--text", "text"), StringKeywords("--column", "titles"),
- ListItemList("items", 1)]
- ),
- "Xdialog" : (_readvalues_Xdialog(_readfrom), ["--stdout", "--radiolist",
- String("text"), Integer("height"), Integer("width"), Integer("list_height"), ListItemList("items")]
- ),
- }
- number_of_titles = 3
-
-class CheckList(Menu):
-
- """
- A list of checkboxes, many being selectable.
- Options: text, width (in characters), height (in characters),
- list_height (in items), items (MenuItem objects), titles
- Response: a list of values corresponding to chosen items
- """
-
- name = "checklist"
- info = {
- "kdialog" : (_readvalues_kdialog(_readfrom), ["--checklist", String("text"), ListItemList("items")]),
- "zenity" : (_readvalues_zenity(_readfrom),
- ["--list", "--checklist", StringKeyword("--text", "text"), StringKeywords("--column", "titles"),
- ListItemList("items", 1)]
- ),
- "Xdialog" : (_readvalues_Xdialog(_readfrom), ["--stdout", "--checklist",
- String("text"), Integer("height"), Integer("width"), Integer("list_height"), ListItemList("items")]
- ),
- }
- number_of_titles = 3
-
-class Pulldown(Menu):
-
- """
- A pull-down menu of options, one of which being selectable.
- Options: text, width (in characters), height (in characters),
- items (list of values)
- Response: a value corresponding to the chosen item
- """
-
- name = "pulldown"
- info = {
- "kdialog" : (_readvalue(_readfrom), ["--combobox", String("text"), Strings("items")]),
- "zenity" : (_readvalue(_readfrom),
- ["--list", "--radiolist", StringKeyword("--text", "text"), StringKeywords("--column", "titles"),
- StringPairs("items")]
- ),
- "Xdialog" : (_readvalue(_readfrom),
- ["--stdout", "--combobox", String("text"), Integer("height"), Integer("width"), Strings("items")]),
- }
- item = unicode
- number_of_titles = 2
-
-class Input(Simple):
-
- """
- An input dialogue, consisting of an input field.
- Options: text, input, width (in characters), height (in characters)
- Response: the text entered into the dialogue by the user
- """
-
- name = "input"
- info = {
- "kdialog" : (_readinput(_readfrom),
- ["--inputbox", String("text"), String("data")]),
- "zenity" : (_readinput(_readfrom),
- ["--entry", StringKeyword("--text", "text"), StringKeyword("--entry-text", "data")]),
- "Xdialog" : (_readinput(_readfrom),
- ["--stdout", "--inputbox", String("text"), Integer("height"), Integer("width"), String("data")]),
- }
-
- def __init__(self, text, data="", width=None, height=None):
- Simple.__init__(self, text, width, height)
- self.data = data
-
-class Password(Input):
-
- """
- A password dialogue, consisting of a password entry field.
- Options: text, width (in characters), height (in characters)
- Response: the text entered into the dialogue by the user
- """
-
- name = "password"
- info = {
- "kdialog" : (_readinput(_readfrom),
- ["--password", String("text")]),
- "zenity" : (_readinput(_readfrom),
- ["--entry", StringKeyword("--text", "text"), "--hide-text"]),
- "Xdialog" : (_readinput(_readfrom),
- ["--stdout", "--password", "--inputbox", String("text"), Integer("height"), Integer("width")]),
- }
-
-class TextFile(Simple):
-
- """
- A text file input box.
- Options: filename, text, width (in characters), height (in characters)
- Response: any text returned by the dialogue program (typically an empty
- string)
- """
-
- name = "textfile"
- info = {
- "kdialog" : (_readfrom, ["--textbox", String("filename"), Integer("width", pixels=1), Integer("height", pixels=1)]),
- "zenity" : (_readfrom, ["--text-info", StringKeyword("--filename", "filename"), IntegerKeyword("--width", "width", pixels=1),
- IntegerKeyword("--height", "height", pixels=1)]
- ),
- "Xdialog" : (_readfrom, ["--stdout", "--textbox", String("filename"), Integer("height"), Integer("width")]),
- }
-
- def __init__(self, filename, text="", width=None, height=None):
- Simple.__init__(self, text, width, height)
- self.filename = filename
-
-# Available dialogues.
-
-available = [Question, Warning, Message, Error, Menu, CheckList, RadioList, Input, Password, Pulldown, TextFile]
-
-# Supported desktop environments.
-
-supported = Dialogue.commands.keys()
-
-# vim: tabstop=4 expandtab shiftwidth=4
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/sidebar/desktop/windows.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/sidebar/desktop/windows.py
deleted file mode 100644
index 2b19e85..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/SideBarEnhancements/sidebar/desktop/windows.py
+++ /dev/null
@@ -1,273 +0,0 @@
-#!/usr/bin/env python
-
-"""
-Simple desktop window enumeration for Python.
-
-Copyright (C) 2007, 2008, 2009 Paul Boddie
-
-This program is free software; you can redistribute it and/or modify it under
-the terms of the GNU Lesser General Public License as published by the Free
-Software Foundation; either version 3 of the License, or (at your option) any
-later version.
-
-This program is distributed in the hope that it will be useful, but WITHOUT
-ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
-details.
-
-You should have received a copy of the GNU Lesser General Public License along
-with this program. If not, see .
-
---------
-
-Finding Open Windows on the Desktop
------------------------------------
-
-To obtain a list of windows, use the desktop.windows.list function as follows:
-
-windows = desktop.windows.list()
-
-To obtain the root window, typically the desktop background, use the
-desktop.windows.root function as follows:
-
-root = desktop.windows.root()
-
-Each window object can be inspected through a number of methods. For example:
-
-name = window.name()
-width, height = window.size()
-x, y = window.position()
-child_windows = window.children()
-
-See the desktop.windows.Window class for more information.
-"""
-
-from desktop import _is_x11, _get_x11_vars, _readfrom, use_desktop
-import re
-
-# System functions.
-
-def _xwininfo(identifier, action):
- if identifier is None:
- args = "-root"
- else:
- args = "-id " + identifier
-
- s = _readfrom(_get_x11_vars() + "xwininfo %s -%s" % (args, action), shell=1)
-
- # Return a mapping of keys to values for the "stats" action.
-
- if action == "stats":
- d = {}
- for line in s.split("\n"):
- fields = line.split(":")
- if len(fields) < 2:
- continue
- key, value = fields[0].strip(), ":".join(fields[1:]).strip()
- d[key] = value
-
- return d
-
- # Otherwise, return the raw output.
-
- else:
- return s
-
-def _get_int_properties(d, properties):
- results = []
- for property in properties:
- results.append(int(d[property]))
- return results
-
-# Finder functions.
-
-def find_all(name):
- return 1
-
-def find_named(name):
- return name is not None
-
-def find_by_name(name):
- return lambda n, t=name: n == t
-
-# Window classes.
-# NOTE: X11 is the only supported desktop so far.
-
-class Window:
-
- "A window on the desktop."
-
- _name_pattern = re.compile(r':\s+\(.*?\)\s+[-0-9x+]+\s+[-0-9+]+$')
- _absent_names = "(has no name)", "(the root window) (has no name)"
-
- def __init__(self, identifier):
-
- "Initialise the window with the given 'identifier'."
-
- self.identifier = identifier
-
- # Finder methods (from above).
-
- self.find_all = find_all
- self.find_named = find_named
- self.find_by_name = find_by_name
-
- def __repr__(self):
- return "Window(%r)" % self.identifier
-
- # Methods which deal with the underlying commands.
-
- def _get_handle_and_name(self, text):
- fields = text.strip().split(" ")
- handle = fields[0]
-
- # Get the "" part, stripping off the quotes.
-
- name = " ".join(fields[1:])
- if len(name) > 1 and name[0] == '"' and name[-1] == '"':
- name = name[1:-1]
-
- if name in self._absent_names:
- return handle, None
- else:
- return handle, name
-
- def _get_this_handle_and_name(self, line):
- fields = line.split(":")
- return self._get_handle_and_name(":".join(fields[1:]))
-
- def _get_descendant_handle_and_name(self, line):
- match = self._name_pattern.search(line)
- if match:
- return self._get_handle_and_name(line[:match.start()].strip())
- else:
- raise OSError, "Window information from %r did not contain window details." % line
-
- def _descendants(self, s, fn):
- handles = []
- adding = 0
- for line in s.split("\n"):
- if line.endswith("child:") or line.endswith("children:"):
- if not adding:
- adding = 1
- elif adding and line:
- handle, name = self._get_descendant_handle_and_name(line)
- if fn(name):
- handles.append(handle)
- return [Window(handle) for handle in handles]
-
- # Public methods.
-
- def children(self, all=0):
-
- """
- Return a list of windows which are children of this window. If the
- optional 'all' parameter is set to a true value, all such windows will
- be returned regardless of whether they have any name information.
- """
-
- s = _xwininfo(self.identifier, "children")
- return self._descendants(s, all and self.find_all or self.find_named)
-
- def descendants(self, all=0):
-
- """
- Return a list of windows which are descendants of this window. If the
- optional 'all' parameter is set to a true value, all such windows will
- be returned regardless of whether they have any name information.
- """
-
- s = _xwininfo(self.identifier, "tree")
- return self._descendants(s, all and self.find_all or self.find_named)
-
- def find(self, callable):
-
- """
- Return windows using the given 'callable' (returning a true or a false
- value when invoked with a window name) for descendants of this window.
- """
-
- s = _xwininfo(self.identifier, "tree")
- return self._descendants(s, callable)
-
- def name(self):
-
- "Return the name of the window."
-
- d = _xwininfo(self.identifier, "stats")
-
- # Format is 'xwininfo: Window id: ""
-
- return self._get_this_handle_and_name(d["xwininfo"])[1]
-
- def size(self):
-
- "Return a tuple containing the width and height of this window."
-
- d = _xwininfo(self.identifier, "stats")
- return _get_int_properties(d, ["Width", "Height"])
-
- def position(self):
-
- "Return a tuple containing the upper left co-ordinates of this window."
-
- d = _xwininfo(self.identifier, "stats")
- return _get_int_properties(d, ["Absolute upper-left X", "Absolute upper-left Y"])
-
- def displayed(self):
-
- """
- Return whether the window is displayed in some way (but not necessarily
- visible on the current screen).
- """
-
- d = _xwininfo(self.identifier, "stats")
- return d["Map State"] != "IsUnviewable"
-
- def visible(self):
-
- "Return whether the window is displayed and visible."
-
- d = _xwininfo(self.identifier, "stats")
- return d["Map State"] == "IsViewable"
-
-def list(desktop=None):
-
- """
- Return a list of windows for the current desktop. If the optional 'desktop'
- parameter is specified then attempt to use that particular desktop
- environment's mechanisms to look for windows.
- """
-
- root_window = root(desktop)
- window_list = [window for window in root_window.descendants() if window.displayed()]
- window_list.insert(0, root_window)
- return window_list
-
-def root(desktop=None):
-
- """
- Return the root window for the current desktop. If the optional 'desktop'
- parameter is specified then attempt to use that particular desktop
- environment's mechanisms to look for windows.
- """
-
- # NOTE: The desktop parameter is currently ignored and X11 is tested for
- # NOTE: directly.
-
- if _is_x11():
- return Window(None)
- else:
- raise OSError, "Desktop '%s' not supported" % use_desktop(desktop)
-
-def find(callable, desktop=None):
-
- """
- Find and return windows using the given 'callable' for the current desktop.
- If the optional 'desktop' parameter is specified then attempt to use that
- particular desktop environment's mechanisms to look for windows.
- """
-
- return root(desktop).find(callable)
-
-# vim: tabstop=4 expandtab shiftwidth=4
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Sublime Files/Default (Linux).sublime-keymap b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Sublime Files/Default (Linux).sublime-keymap
deleted file mode 100644
index f5ba726..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Sublime Files/Default (Linux).sublime-keymap
+++ /dev/null
@@ -1,7 +0,0 @@
-[
- {
- "keys": ["ctrl+super+n"],
- "command": "sublime_files",
- "args": {"command":"navigate"}
- }
-]
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Sublime Files/Default (OSX).sublime-keymap b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Sublime Files/Default (OSX).sublime-keymap
deleted file mode 100644
index f5ba726..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Sublime Files/Default (OSX).sublime-keymap
+++ /dev/null
@@ -1,7 +0,0 @@
-[
- {
- "keys": ["ctrl+super+n"],
- "command": "sublime_files",
- "args": {"command":"navigate"}
- }
-]
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Sublime Files/Default (Windows).sublime-keymap b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Sublime Files/Default (Windows).sublime-keymap
deleted file mode 100644
index 3e53fd3..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Sublime Files/Default (Windows).sublime-keymap
+++ /dev/null
@@ -1,7 +0,0 @@
-[
- {
- "keys": ["ctrl+alt+n"],
- "command": "sublime_files",
- "args": {"command":"navigate"}
- }
-]
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Sublime Files/Default.sublime-commands b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Sublime Files/Default.sublime-commands
deleted file mode 100644
index 3b2e67f..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Sublime Files/Default.sublime-commands
+++ /dev/null
@@ -1,7 +0,0 @@
-[
- {
- "caption": "Sublime Files: Open Navigator",
- "command": "sublime_files",
- "args": {"command":"navigate"}
- }
-]
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Sublime Files/Main.sublime-menu b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Sublime Files/Main.sublime-menu
deleted file mode 100644
index d11fdf6..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Sublime Files/Main.sublime-menu
+++ /dev/null
@@ -1,83 +0,0 @@
-[
- {
- "caption": "Preferences",
- "mnemonic": "n",
- "id": "preferences",
- "children":
- [
- {
- "caption": "Package Settings",
- "mnemonic": "P",
- "id": "package-settings",
- "children":
- [
- {
- "caption": "SublimeFiles",
- "children":
- [
- {
- "command": "open_file",
- "args": {"file": "${packages}/Sublime Files/SublimeFiles.sublime-settings"},
- "caption": "Settings – Default"
- },
- {
- "command": "open_file",
- "args": {"file": "${packages}/User/SublimeFiles.sublime-settings"},
- "caption": "Settings – User"
- },
- {
- "command": "open_file",
- "args": {
- "file": "${packages}/Sublime Files/Default (Windows).sublime-keymap",
- "platform": "Windows"
- },
- "caption": "Key Bindings – Default"
- },
- {
- "command": "open_file",
- "args": {
- "file": "${packages}/Sublime Files/Default (OSX).sublime-keymap",
- "platform": "OSX"
- },
- "caption": "Key Bindings – Default"
- },
- {
- "command": "open_file",
- "args": {
- "file": "${packages}/Sublime Files/Default (Linux).sublime-keymap",
- "platform": "Linux"
- },
- "caption": "Key Bindings – Default"
- },
- {
- "command": "open_file",
- "args": {
- "file": "${packages}/User/Default (Windows).sublime-keymap",
- "platform": "Windows"
- },
- "caption": "Key Bindings – User"
- },
- {
- "command": "open_file",
- "args": {
- "file": "${packages}/User/Default (OSX).sublime-keymap",
- "platform": "OSX"
- },
- "caption": "Key Bindings – User"
- },
- {
- "command": "open_file",
- "args": {
- "file": "${packages}/User/Default (Linux).sublime-keymap",
- "platform": "Linux"
- },
- "caption": "Key Bindings – User"
- },
- { "caption": "-" }
- ]
- }
- ]
- }
- ]
- }
-]
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Sublime Files/README.md b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Sublime Files/README.md
deleted file mode 100644
index fe3f14e..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Sublime Files/README.md
+++ /dev/null
@@ -1,72 +0,0 @@
-Sublime Files
--------------
-
-__A keyboard driven file navigation/opening plugin for Sublime Text 2__
-
-
-Sublime Files works entirely through the command palette. By running the
-Sublime Files Navigator, you can "cd" around directories similar to how
-you would on a command line in order to open up files. New files will open up in new tabs.
-
-
-Because Sublime Files actually navigates the file system by changing directories,
-the navigator remembers and starts from last visited directory on subsequent uses.
-To open the navigator, you can either just invoke the command palette command or
-use the keybinding ctrl+super+n
-
-
-Built with Mac OS X, but all the calls have been designed to be platform agnostic and thus should work regardless of system. However, this is untested on Windows.
-
-----------
-
-__Installation__
-
-Sublime Files can be installed through Sublime Package Control.
-
-----------
-
-__Usage__
-
-Sublime files an be activated with the command palette command: "Sublime Files: Open Navigator", or with the key command ctrl+super+n (or ctrl+alt+n for windows).
-The first option will always show the current directory. Selecting another directory will navigate to that directory and selecting a file will open that file.
-
-
-There are a few notable options:
-
-
-- Selecting "Directory actions" will pop up a small list of actions that can be applied onto the current directory. Mainly, a user can create new files, add the directory to the current project, and open a terminal at the directory.
-
-- Selecting "~/" navigates to the home directory.
-
-- Selecting "../" navigates to the parent directory.
-
-- Selecting "To current View" navigates to the directory of the current file being edited.
-
-----------
-__Ignore file types__
-
-
-SublimeFiles by default will ignore \*.pyc files and \*.class files. You can modify the list of ignored files by changing the ignore\_list in SublimeFiles.sublime-settings.
-
-
-----------
-
-__Open Terminal__
-
-
-For OS X/Linux systems, Sublime Files can open up a terminal at the current directory navigated to.
-In order for this feature to work properly, you will have to modify the term\_command field in the
-SublimeFiles.sublime-settings text file
-located in the SublimeFiles plugin directory. As a default, it is set to open up Terminal.app for OS X systems.
-
-For example, Gnome Terminal and iTerm2 users respectively will want to change term\_command in SublimeFiles.sublime-settings to:
-
- - "term_command": "gnome-terminal --working-directory="
- - "term_command" : "open -a iTerm\ 2 "
-
-
-----------
-
-__Sublime Text 3__
-
-Sublime Text 3 is not officially supported by Sublime Files at the moment. However, there is an experimental branch "py3" that has a python3 version of Sublime Files that should work with Sublime Text 3.
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Sublime Files/SublimeFiles.sublime-settings b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Sublime Files/SublimeFiles.sublime-settings
deleted file mode 100644
index 4184c09..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Sublime Files/SublimeFiles.sublime-settings
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- //The command to execute to open a terminal.
- //Program will append the directory to open to the end of term_command.
- "term_command": "open -a Terminal ",
-
- //list of Unix shell-style wildcard matches for file types to
- //ignore when listing files in the navigator.
- //By default, ignores *.pyc and *.class files.
- "ignore_list": ["*.pyc", "*.class"]
-}
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Sublime Files/messages.json b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Sublime Files/messages.json
deleted file mode 100644
index d7c7b05..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Sublime Files/messages.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "install": "README.md"
-}
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Sublime Files/package-metadata.json b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Sublime Files/package-metadata.json
deleted file mode 100644
index 9abe24b..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Sublime Files/package-metadata.json
+++ /dev/null
@@ -1 +0,0 @@
-{"url": "https://github.com/al63/SublimeFiles", "version": "2013.07.16.01.35.12", "description": "Sublime Text 2 plugin for keyboard driven file navigation"}
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Sublime Files/sublime_files.py b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Sublime Files/sublime_files.py
deleted file mode 100644
index 5411933..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Sublime Files/sublime_files.py
+++ /dev/null
@@ -1,198 +0,0 @@
-import sublime, sublime_plugin
-import os, sys, glob
-import shlex
-from fnmatch import fnmatch
-from subprocess import Popen
-
-
-bullet = u'\u2022'
-class SublimeFilesCommand(sublime_plugin.WindowCommand):
- def run(self, command):
- try:
- self.home
- except:
- self.current_dir = ""
- # first time starting up. ugly, but works
- settings = sublime.load_settings('SublimeFiles.sublime-settings')
- if os.name == 'nt':
- self.home = 'USERPROFILE'
- else:
- self.home = 'HOME'
- try:
- self.current_dir = os.path.dirname(sublime.active_window().active_view().file_name())
- os.chdir(self.current_dir)
- except:
- self.current_dir = os.getenv(self.home)
- os.chdir(self.current_dir)
-
- self.project_root = None
- self.bookmark = None
- self.term_command = settings.get('term_command')
- self.ignore_list = settings.get('ignore_list')
- self.drives = [] # for windows machines
-
- if command == 'navigate':
- self.open_navigator()
-
- # function for showing panel for changing directories / opening files
- def open_navigator(self):
- self.check_project_root()
- self.current_dir = os.getcwdu()
- self.dir_files = ['[' + os.getcwdu() + ']',
- bullet + ' Directory actions', '..' + os.sep, '~' + os.sep]
-
- # annoying way to deal with windows
- if sublime.platform() == 'windows':
- if len(self.drives) == 0:
- for i in range(ord('A'), ord('Z') + 1):
- drive = chr(i)
- if (os.path.exists(drive + ':\\')):
- self.drives.append(drive + ':\\')
- self.dir_files += self.drives
-
- for element in os.listdir(os.getcwdu()):
- ignore_element = False
- for ignore_pattern in self.ignore_list:
- if fnmatch(element, ignore_pattern):
- ignore_element = True
- break
- if not ignore_element:
- fullpath = os.path.join(os.getcwdu(), element)
- if os.path.isdir(fullpath):
- self.dir_files.append(element + os.sep)
- else:
- self.dir_files.append(element)
-
- self.dir_files = self.dir_files[:4] + sorted(self.dir_files[4:], key=sort_files)
-
- if self.bookmark:
- self.dir_files.insert(2, bullet + ' To bookmark (' + self.bookmark + ')')
- if self.window.active_view() and self.window.active_view().file_name():
- self.dir_files.insert(2, bullet + ' To current view')
-
- self.window.show_quick_panel(self.dir_files, self.handle_navigator_option, sublime.MONOSPACE_FONT)
-
- # checks if the user has opened up a folder, and if so automatically navigate to the root
- def check_project_root(self):
- folders = self.window.folders()
- if len(folders) > 0:
- # If not one yet present or if has changed
- if not self.project_root or self.project_root != folders[0]:
- self.project_root = folders[0]
- os.chdir(self.project_root)
- elif self.project_root:
- # if folders is empty now and we had a root, let's clear it out
- self.project_root = None
-
- # handles user's selection from open_navigator
- def handle_navigator_option(self, call_value):
- os.chdir(self.current_dir)
- if call_value != -1:
- option = self.dir_files[call_value]
- if call_value == 0:
- self.open_navigator()
- elif call_value == 1:
- self.open_directory_options()
- elif option == '~' + os.sep:
- os.chdir(os.getenv(self.home))
- elif option == '..' + os.sep:
- os.chdir(os.path.pardir)
- elif sublime.platform() == 'windows' and option in self.drives:
- os.chdir(option)
- elif option == bullet + ' To current view':
- os.chdir(os.path.dirname(self.window.active_view().file_name()))
- elif option.startswith(bullet + ' To bookmark'):
- os.chdir(self.bookmark)
- else:
- fullpath = os.path.join(os.getcwdu(), self.dir_files[call_value])
- if os.path.isdir(fullpath): # navigate to directory
- os.chdir(self.dir_files[call_value])
- else: # open file
- self.window.open_file(os.path.join(os.getcwdu(), fullpath))
- return
- self.open_navigator()
-
- # options for when a user selects current directory
- def open_directory_options(self):
- self.directory_options = [bullet + ' Add folder to project', bullet + ' Create new file',
- bullet + ' Create new directory', bullet + ' Set bookmark here', bullet + ' Navigate to specific directory', bullet + ' Back']
- # terminal opening. only for osx/linux right now
- if os.name == 'posix' and self.term_command:
- self.directory_options.insert(0, bullet + ' Open terminal here')
- self.window.show_quick_panel(self.directory_options, self.handle_directory_option, sublime.MONOSPACE_FONT)
-
- # handle choice for when user selects option from current directory
- def handle_directory_option(self, call_value):
- if call_value != -1:
- selection = self.directory_options[call_value]
- if selection == bullet + ' Create new file':
- self.window.show_input_panel('File name: ', '', self.handle_new_file, None, None)
- elif selection == bullet + ' Back':
- self.open_navigator()
- elif selection == bullet + ' Set bookmark here':
- self.bookmark = os.getcwdu()
- self.open_navigator()
- elif selection == bullet + ' Open terminal here':
- command = shlex.split(str(self.term_command))
- command.append(os.getcwdu())
- try:
- Popen(command)
- except:
- sublime.error_message('Unable to open terminal')
- elif selection == bullet + ' Add folder to project':
- sublime_command_line(['-a', os.getcwdu()])
- elif selection == bullet + ' Create new directory':
- self.window.show_input_panel('Directory name: ', '', self.handle_new_directory, None, None)
- elif selection == bullet + ' Navigate to specific directory':
- self.window.show_input_panel("Navigate to: ", os.getcwdu(), self.handle_cwd, None, None);
-
-
- def handle_new_file(self, file_name):
- if os.path.isfile(os.getcwdu() + os.sep + file_name):
- sublime.error_message(file_name + ' already exists')
- return
- if os.path.isdir(os.getcwdu() + os.sep + file_name):
- sublime.error_message(file_name + ' is already a directory')
- return
- FILE = open(os.getcwdu() + os.sep + file_name, 'a')
- FILE.close()
- self.window.open_file(os.getcwdu() + os.sep + file_name)
-
- def handle_new_directory(self, dir_name):
- if os.path.isfile(os.getcwdu() + os.sep + dir_name):
- sublime.error_message(dir_name + ' is already a file')
- return
- if os.path.isdir(os.getcwdu() + os.sep + dir_name):
- sublime.error_message(dir_name + ' already exists')
- return
- os.makedirs(os.getcwdu() + os.sep + dir_name)
-
- def handle_cwd(self, new_dir):
- try:
- if new_dir[0] == "~":
- new_dir = os.getenv(self.home) + new_dir[1:]
- os.chdir(new_dir)
- except:
- sublime.error_message(new_dir + " does not exist")
-
-
-def sort_files(filename):
- total_weight = 0
- if filename[0] == '.':
- total_weight += 2
- if filename[-1] == os.sep:
- total_weight += 1
- return total_weight
-
-# hack to add folders to sidebar (stolen from wbond)
-def get_sublime_path():
- if sublime.platform() == 'osx':
- return '/Applications/Sublime Text 2.app/Contents/SharedSupport/bin/subl'
- elif sublime.platform() == 'linux':
- return open('/proc/self/cmdline').read().split(chr(0))[0]
- else:
- return sys.executable
-
-def sublime_command_line(args):
- args.insert(0, get_sublime_path())
- return Popen(args)
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/README.md b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/README.md
deleted file mode 100644
index 709271e..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/README.md
+++ /dev/null
@@ -1,126 +0,0 @@
-# Soda Theme
-
-Dark and light custom UI themes for Sublime Text 2 and Sublime Text 3.
-
-Project site: [http://buymeasoda.github.com/soda-theme/](http://buymeasoda.github.com/soda-theme/)
-
-## Design
-
-![Soda Light Theme](http://buymeasoda.github.com/soda-theme/images/screenshots/soda-2-light-theme.png?v=4)
-
-![Soda Dark Theme](http://buymeasoda.github.com/soda-theme/images/screenshots/soda-2-dark-theme.png?v=2)
-
-## Installation
-
-Soda theme is designed to work with the latest development builds of Sublime Text, including [Sublime Text 2](http://www.sublimetext.com/dev) and [Sublime Text 3](http://www.sublimetext.com/3dev).
-
-### Using Sublime Package Control
-
-If you are using Will Bond's excellent [Sublime Package Control](http://wbond.net/sublime_packages/package_control), you can easily install Soda Theme via the `Package Control: Install Package` menu item. The Soda Theme package is listed as `Theme - Soda` in the packages list.
-
-### Using Git
-
-Alternatively, if you are a git user, you can install the theme and keep up to date by cloning the repo directly into your `Packages` directory in the Sublime Text application settings area.
-
-You can locate your Sublime Text `Packages` directory by using the menu item `Preferences -> Browse Packages...`.
-
-While inside the `Packages` directory, clone the theme repository using the command below:
-
- git clone https://github.com/buymeasoda/soda-theme/ "Theme - Soda"
-
-### Download Manually
-
-* Download the files using the GitHub .zip download option
-* Unzip the files and rename the folder to `Theme - Soda`
-* Find your `Packages` directory using the menu item `Preferences -> Browse Packages...`
-* Copy the folder into your Sublime Text `Packages` directory
-
-## Activating the theme
-
-To configure Sublime Text to use the theme, follow the instructions below for your specific version.
-
-### Sublime Text 2
-
-* Open your User Settings Preferences file `Sublime Text 2 -> Preferences -> Settings - User`
-* Add (or update) your theme entry to be `"theme": "Soda Light.sublime-theme"` or `"theme": "Soda Dark.sublime-theme"`
-
-**Example Sublime Text 2 User Settings**
-
- {
- "theme": "Soda Light.sublime-theme"
- }
-
-### Sublime Text 3
-
-* Open your User Settings Preferences file `Sublime Text -> Preferences -> Settings - User`
-* Add (or update) your theme entry to be `"theme": "Soda Light 3.sublime-theme"` or `"theme": "Soda Dark 3.sublime-theme"`
-
-**Example Sublime Text 3 User Settings**
-
- {
- "theme": "Soda Light 3.sublime-theme"
- }
-
-## Additional Features
-
-### Alternate Tab Styles
-
-Soda Theme ships with two alternate UI tab styles.
-
-By default, a square tab style is used. If you'd prefer to use the original curved tab style, add the following custom setting to your `Settings - User` file:
-
- "soda_classic_tabs": true
-
-![Soda Tab Styles](http://buymeasoda.github.com/soda-theme/images/features/multiple-tab-styles.png)
-
-### Sidebar Folder Icons
-
-Soda Theme has the ability to use folder icons in the sidebar.
-
-If you'd like to use folder icons in the sidebar instead of the regular arrows, add the following custom setting to your `Settings - User` file:
-
- "soda_folder_icons": true
-
-![Soda Folder Icons](http://buymeasoda.github.com/soda-theme/images/features/sidebar-folder-icons.png)
-
-### Retina Resolution UI
-
-Soda Theme has been designed to take advantage of retina resolution (high-dpi) displays. Both Soda Light and Soda Dark support retina displays.
-
-![Soda Retina](http://buymeasoda.github.com/soda-theme/images/features/soda-retina.png)
-
-### Theme Customisation
-
-Sublime Text provides an elegant way to tweak existing themes without having to duplicate or maintain a separate copy of the original theme. If there are aspects of Soda Theme that you would like to adjust, take a look at the [theme customisation](https://github.com/buymeasoda/soda-theme/wiki/Theme-customisation) wiki page.
-
-## Bonus Options
-
-### Syntax Highlighting Colour Schemes
-
-The Soda Light screenshot uses a modified version of Espresso Tutti Colori and the Soda Dark screenshot uses a modified version of Monokai.
-
-If you'd like to use the syntax highlighting schemes shown in the screenshots:
-
-* Download [colour-schemes.zip](http://buymeasoda.github.com/soda-theme/extras/colour-schemes.zip)
-* Unzip and place the extracted `tmtheme` files in the Sublime Text `Packages/User` folder
-* Enable the colour scheme via `Preferences -> Color Scheme -> User`
-
-### Code Font
-
-The code font shown in the screenshot is Menlo.
-
-## Development
-
-Please note, Sublime Text dev builds move quickly and changes can occur with the theme API between releases, so there may be occasions where the theme doesn't quite work with a brand new dev release.
-
-While developing the theme, I have documented some [theme challenges and ideas](https://github.com/buymeasoda/soda-theme/wiki/Theme-challenges-and-ideas) encountered along the way.
-
-## License
-
-Soda Theme is licensed under the [Creative Commons Attribution-ShareAlike 3.0 License](http://creativecommons.org/licenses/by-sa/3.0/). You are free to share and remix the theme, however please abide by the license terms when doing so.
-
-The following details apply to the Creative Commons license "author specified" components:
-
-* Attribution example: Based on Soda Theme by Ian Hill (http://buymeasoda.com/)
-
-* Naming guidelines: If you create and distribute a derivative theme, please give your theme a unique and original name that does not directly include "Soda Theme" (or a close variant) in the main project title, repo name or Package Control name.
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark 3.sublime-theme b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark 3.sublime-theme
deleted file mode 100644
index e090ed4..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark 3.sublime-theme
+++ /dev/null
@@ -1,1154 +0,0 @@
-[
-
-//
-// TABS (REGULAR)
-//
-
- // Tab set
- {
- "class": "tabset_control",
- "layer0.texture": "Theme - Soda/Soda Dark/tabset-background.png",
- "layer0.inner_margin": [1, 7],
- "layer0.opacity": 1.0,
- "content_margin": [-4, 0, -4, 3],
- "tab_overlap": 5,
- "tab_width": 180,
- "tab_min_width": 45,
- "tab_height": 25,
- "mouse_wheel_switch": false
- },
- {
- "class": "tabset_control",
- "settings": ["enable_tab_scrolling"],
- "content_margin": [3, 0, 3, 3]
- },
- {
- "class": "tabset_control",
- "settings": ["mouse_wheel_switches_tabs"],
- "mouse_wheel_switch": true
- },
- // Tab element
- {
- "class": "tab_control",
- "content_margin": [12, 3, 12, 3],
- "max_margin_trim": 0,
- "hit_test_level": 0.0,
- "layer0.texture": "Theme - Soda/Soda Dark/tab-inactive.png",
- "layer0.inner_margin": [5, 5],
- "layer0.opacity": 1.0
- },
- // Tab close state
- {
- "class": "tab_control",
- "settings": ["show_tab_close_buttons"],
- "content_margin": [12, 3, 7, 3]
- },
- // Tab hover state
- {
- "class": "tab_control",
- "attributes": ["hover"],
- "layer0.texture": "Theme - Soda/Soda Dark/tab-hover.png"
- },
- // Tab active state
- {
- "class": "tab_control",
- "attributes": ["selected"],
- "layer0.texture": "Theme - Soda/Soda Dark/tab-active.png"
- },
- // Tab dirty state (close button hidden)
- {
- "class": "tab_control",
- "settings": ["!show_tab_close_buttons"],
- "attributes": ["dirty"],
- "content_margin": [12, 3, 7, 3]
- },
-
-//
-// TABS (CLASSIC)
-//
-
- // Tab set
- {
- "class": "tabset_control",
- "settings": ["soda_classic_tabs"],
- "content_margin": [3, 4, 3, 3],
- "tab_overlap": 24,
- "tab_height": 28
- },
- {
- "class": "tabset_control",
- "settings": ["soda_classic_tabs", "enable_tab_scrolling"],
- "content_margin": [6, 4, 6, 3]
- },
- // Tab element
- {
- "class": "tab_control",
- "settings": ["soda_classic_tabs"],
- "content_margin": [22, 6, 22, 4],
- "hit_test_level": 0.5,
- "layer0.texture": "Theme - Soda/Soda Dark/classic/tab-inactive.png",
- "layer0.inner_margin": [18, 4]
- },
- // Tab close state
- {
- "class": "tab_control",
- "settings": ["soda_classic_tabs", "show_tab_close_buttons"],
- "content_margin": [22, 6, 15, 4]
- },
- // Tab hover state
- {
- "class": "tab_control",
- "settings": ["soda_classic_tabs"],
- "attributes": ["hover"],
- "layer0.texture": "Theme - Soda/Soda Dark/classic/tab-hover.png"
- },
- // Tab active state
- {
- "class": "tab_control",
- "settings": ["soda_classic_tabs"],
- "attributes": ["selected"],
- "layer0.texture": "Theme - Soda/Soda Dark/classic/tab-active.png"
- },
- // Tab dirty state (close button hidden)
- {
- "class": "tab_control",
- "settings": ["soda_classic_tabs", "!show_tab_close_buttons"],
- "attributes": ["dirty"],
- "content_margin": [22, 6, 15, 4]
- },
-
-//
-// TAB BUTTONS
-//
-
- // Tab close button
- {
- "class": "tab_close_button",
- "content_margin": [0, 0],
- "layer0.texture": "Theme - Soda/Soda Dark/tab-close-inactive.png",
- "layer0.opacity": 1.0,
- "layer0.inner_margin": 0
- },
- {
- "class": "tab_close_button",
- "settings": ["show_tab_close_buttons"],
- "content_margin": [8, 8]
- },
- {
- "class": "tab_close_button",
- "parents": [{"class": "tab_control", "attributes": ["hover"]}],
- "layer0.texture": "Theme - Soda/Soda Dark/tab-close.png",
- "layer0.opacity": 1.0
- },
- {
- "class": "tab_close_button",
- "parents": [{"class": "tab_control", "attributes": ["selected"]}],
- "layer0.texture": "Theme - Soda/Soda Dark/tab-close.png",
- "layer0.opacity": 1.0
- },
- // Tab dirty button
- {
- "class": "tab_close_button",
- "parents": [{"class": "tab_control", "attributes": ["dirty"]}],
- "layer0.texture": "Theme - Soda/Soda Dark/tab-dirty-inactive.png"
- },
- {
- "class": "tab_close_button",
- "settings": ["!show_tab_close_buttons"],
- "parents": [{"class": "tab_control", "attributes": ["dirty"]}],
- "content_margin": [8, 8]
- },
- {
- "class": "tab_close_button",
- "parents": [{"class": "tab_control", "attributes": ["dirty", "hover"]}],
- "layer0.opacity": 1.0
- },
- {
- "class": "tab_close_button",
- "parents": [{"class": "tab_control", "attributes": ["dirty", "selected"]}],
- "layer0.texture": "Theme - Soda/Soda Dark/tab-dirty.png"
- },
- // Tab highlight button
- {
- "class": "tab_close_button",
- "settings": ["highlight_modified_tabs"],
- "parents": [{"class": "tab_control", "attributes": ["dirty"]}],
- "layer0.texture": "Theme - Soda/Soda Dark/tab-highlight-inactive.png"
- },
- {
- "class": "tab_close_button",
- "settings": ["highlight_modified_tabs"],
- "parents": [{"class": "tab_control", "attributes": ["dirty", "selected"]}],
- "layer0.texture": "Theme - Soda/Soda Dark/tab-highlight.png"
- },
- // Tab close button hover
- {
- "class": "tab_close_button",
- "settings": ["show_tab_close_buttons"],
- "attributes": ["hover"],
- "layer0.texture": "Theme - Soda/Soda Dark/tab-close-hover.png"
- },
- // Tab close button pressed
- {
- "class": "tab_close_button",
- "settings": ["show_tab_close_buttons"],
- "attributes": ["pressed"],
- "layer0.texture": "Theme - Soda/Soda Dark/tab-close-pressed.png"
- },
-
-//
-// TAB LABELS
-//
-
- {
- "class": "tab_label",
- "fade": true,
- "fg": [170, 170, 170],
- "shadow_color": [25, 25, 25],
- "shadow_offset": [0, -1],
- "font.italic": false
- },
- {
- "class": "tab_label",
- "parents": [{"class": "tab_control", "attributes": ["hover"]}],
- "fg": [200, 200, 200],
- "shadow_color": [30, 30, 30]
- },
- {
- "class": "tab_label",
- "parents": [{"class": "tab_control", "attributes": ["selected"]}],
- "fg": [230, 230, 230],
- "shadow_color": [35, 35, 35]
- },
- {
- "class": "tab_label",
- "attributes": ["transient"],
- "font.italic": true
- },
-
-//
-// TAB SCROLLING
-//
-
- // Tab dropdown
- {
- "class": "show_tabs_dropdown_button",
- "content_margin": [9, 7, 8, 6],
- "layer0.texture": "Theme - Soda/Soda Dark/tabset-list.png",
- "layer0.opacity": 1.0,
- "layer0.inner_margin": 0
- },
- {
- "class": "show_tabs_dropdown_button",
- "attributes": ["hover"],
- "layer0.texture": "Theme - Soda/Soda Dark/tabset-list-hover.png"
- },
- // Tab scroll left
- {
- "class": "scroll_tabs_left_button",
- "content_margin": [9, 7, 8, 6],
- "layer0.texture": "Theme - Soda/Soda Dark/tabset-left.png",
- "layer0.opacity": 1.0,
- "layer0.inner_margin": 0
- },
- {
- "class": "scroll_tabs_left_button",
- "attributes": ["hover"],
- "layer0.texture": "Theme - Soda/Soda Dark/tabset-left-hover.png"
- },
- // Tab scroll right
- {
- "class": "scroll_tabs_right_button",
- "content_margin": [9, 7, 8, 6],
- "layer0.texture": "Theme - Soda/Soda Dark/tabset-right.png",
- "layer0.opacity": 1.0,
- "layer0.inner_margin": 0
- },
- {
- "class": "scroll_tabs_right_button",
- "attributes": ["hover"],
- "layer0.texture": "Theme - Soda/Soda Dark/tabset-right-hover.png"
- },
-
-//
-// FOLD BUTTONS
-//
-
- {
- "class": "fold_button_control",
- "layer0.texture": "Theme - Soda/Soda Dark/fold-closed.png",
- "layer0.opacity": 1.0,
- "layer0.inner_margin": 0,
- "content_margin": [8, 8]
- },
- {
- "class": "fold_button_control",
- "attributes": ["hover"],
- "layer0.texture": "Theme - Soda/Soda Dark/fold-closed-hover.png"
- },
- {
- "class": "fold_button_control",
- "attributes": ["expanded"],
- "layer0.texture": "Theme - Soda/Soda Dark/fold-open.png"
- },
- {
- "class": "fold_button_control",
- "attributes": ["expanded", "hover"],
- "layer0.texture": "Theme - Soda/Soda Dark/fold-open-hover.png"
- },
-
-//
-// STANDARD SCROLLBARS
-//
-
- // Standard vertical scroll bar
- {
- "class": "scroll_bar_control",
- "layer0.texture": "Theme - Soda/Soda Dark/standard-scrollbar-vertical.png",
- "layer0.opacity": 1.0,
- "layer0.inner_margin": [2, 6],
- "blur": false
- },
- // Standard horizontal scroll bar
- {
- "class": "scroll_bar_control",
- "attributes": ["horizontal"],
- "layer0.texture": "Theme - Soda/Soda Dark/standard-scrollbar-horizontal.png",
- "layer0.inner_margin": [6, 2],
- "blur": false
- },
- // Standard scroll bar corner
- {
- "class": "scroll_corner_control",
- "layer0.texture": "Theme - Soda/Soda Dark/standard-scrollbar-corner.png",
- "layer0.inner_margin": [2, 2],
- "layer0.opacity": 1.0
- },
- // Standard vertical scroll puck
- {
- "class": "puck_control",
- "layer0.texture": "Theme - Soda/Soda Dark/standard-puck-vertical.png",
- "layer0.opacity": 1.0,
- "layer0.inner_margin": [0, 10],
- "content_margin": [8, 12],
- "blur": false
- },
- // Standard horizontal scroll puck
- {
- "class": "puck_control",
- "attributes": ["horizontal"],
- "layer0.texture": "Theme - Soda/Soda Dark/standard-puck-horizontal.png",
- "layer0.inner_margin": [10, 0],
- "content_margin": [12, 8],
- "blur": false
- },
-
-//
-// OVERLAY SCROLLBARS
-//
-
- // Overlay toggle scroll bar
- {
- "class": "scroll_area_control",
- "settings": ["overlay_scroll_bars"],
- "overlay": true
- },
- {
- "class": "scroll_area_control",
- "settings": ["!overlay_scroll_bars"],
- "overlay": false
- },
- // Overlay vertical scroll bar
- {
- "class": "scroll_bar_control",
- "settings": ["overlay_scroll_bars"],
- "layer0.texture": "Theme - Soda/Soda Dark/overlay-scrollbar-vertical.png",
- "layer0.inner_margin": [0, 5],
- "blur": true
- },
- // Overlay horizontal scroll bar
- {
- "class": "scroll_bar_control",
- "settings": ["overlay_scroll_bars"],
- "attributes": ["horizontal"],
- "layer0.texture": "Theme - Soda/Soda Dark/overlay-scrollbar-horizontal.png",
- "layer0.inner_margin": [5, 0],
- "blur": true
- },
- // Overlay vertical puck
- {
- "class": "puck_control",
- "settings": ["overlay_scroll_bars"],
- "layer0.texture": "Theme - Soda/Soda Dark/overlay-puck-vertical.png",
- "layer0.inner_margin": [0, 5],
- "content_margin": [5, 20],
- "blur": true
- },
- // Overlay horizontal puck
- {
- "class": "puck_control",
- "settings": ["overlay_scroll_bars"],
- "attributes": ["horizontal"],
- "layer0.texture": "Theme - Soda/Soda Dark/overlay-puck-horizontal.png",
- "layer0.inner_margin": [5, 0],
- "content_margin": [20, 5],
- "blur": true
- },
- // Overlay light puck (for dark content)
- {
- "class": "puck_control",
- "settings": ["overlay_scroll_bars"],
- "attributes": ["dark"],
- "layer0.texture": "Theme - Soda/Soda Dark/overlay-dark-puck-vertical.png"
- },
- // Overlay light horizontal puck (for dark content)
- {
- "class": "puck_control",
- "settings": ["overlay_scroll_bars"],
- "attributes": ["horizontal", "dark"],
- "layer0.texture": "Theme - Soda/Soda Dark/overlay-dark-puck-horizontal.png"
- },
-
-//
-// EMPTY WINDOW BACKGROUND
-//
-
- {
- "class": "sheet_container_control",
- "layer0.tint": [25, 25, 25],
- "layer0.opacity": 1.0
- },
-
-//
-// GRID LAYOUT
-//
-
- {
- "class": "grid_layout_control",
- "border_size": 1,
- "border_color": [70, 70, 70]
- },
-
-//
-// MINI MAP
-//
-
- {
- "class": "minimap_control",
- "settings": ["always_show_minimap_viewport"],
- "viewport_color": [255, 255, 255, 35],
- "viewport_opacity": 1.0
- },
- {
- "class": "minimap_control",
- "settings": ["!always_show_minimap_viewport"],
- "viewport_color": [255, 255, 255, 35],
- "viewport_opacity": { "target": 0.0, "speed": 10.0, "interpolation": "smoothstep" }
- },
- {
- "class": "minimap_control",
- "attributes": ["hover"],
- "settings": ["!always_show_minimap_viewport"],
- "viewport_opacity": 1.0
- },
-
-//
-// DIALOG
-//
-
- {
- "class": "dialog",
- "layer0.tint": [67, 67, 67],
- "layer0.opacity": 1.0
- },
-
-//
-// PROGRESS BAR
-//
-
- {
- "class": "progress_bar_control",
- "layer0.tint": [30, 30, 30],
- "layer0.opacity": 1.0
- },
- {
- "class": "progress_gauge_control",
- "layer0.tint": [144, 144, 144],
- "layer0.opacity": 1.0,
- "content_margin": [0, 6]
- },
-
-//
-// LABELS
-//
-
- // General labels
- {
- "class": "label_control",
- "color": [204, 204, 204]
- },
- // Text field labels
- {
- "class": "label_control",
- "parents": [{"class": "panel_control"}],
- "shadow_color": [50, 50, 50],
- "shadow_offset": [0, -1]
- },
- // Button labels
- {
- "class": "label_control",
- "parents": [{"class": "button_control"}],
- "shadow_color": [55, 55, 55],
- "shadow_offset": [0, -1]
- },
-
-//
-// TOOLTIP
-//
-
- // Tooltip container
- {
- "class": "tool_tip_control",
- "layer0.texture": "Theme - Soda/Soda Dark/tooltip.png",
- "layer0.inner_margin": [1, 1],
- "layer0.opacity": 0.95,
- "content_margin": [3, 3]
- },
- // Tooltip content
- {
- "class": "tool_tip_label_control",
- "color": [0, 0, 0]
- },
-
-//
-// STATUS BAR
-//
-
- // Status bar container
- {
- "class": "status_bar",
- "layer0.texture": "Theme - Soda/Soda Dark/status-bar-background.png",
- "layer0.opacity": 1.0,
- "layer0.inner_margin": [2, 2],
- "content_margin": [8, 4, 8, 4]
- },
- // Status bar button
- {
- "class": "status_button",
- "min_size": [100, 0]
- },
- // Status bar label
- {
- "class": "label_control",
- "parents": [{"class": "status_bar"}],
- "color": [150, 150, 150],
- "shadow_color": [25, 25, 25],
- "shadow_offset": [0, -1]
- },
-
-//
-// SIDEBAR
-//
-
- // Sidebar container
- {
- "class": "sidebar_container",
- "layer0.texture": "Theme - Soda/Soda Dark/sidebar-bg.png",
- "layer0.opacity": 1.0,
- "layer0.inner_margin": [1, 1, 2, 1],
- "content_margin": [0, 0, 1, 0]
- },
- // Sidebar tree
- {
- "class": "sidebar_tree",
- "row_padding": [8, 3],
- "indent": 15,
- "indent_offset": 15,
- "indent_top_level": false,
- "dark_content": true
- },
- // Sidebar rows
- {
- "class": "tree_row",
- "layer0.texture": "Theme - Soda/Soda Dark/sidebar-row-selected.png",
- "layer0.opacity": 0.0,
- "layer0.inner_margin": [1, 1]
- },
- // Sidebar row selected
- {
- "class": "tree_row",
- "attributes": ["selected"],
- "layer0.opacity": 1.0
- },
- // Sidebar heading
- {
- "class": "sidebar_heading",
- "color": [210, 210, 210],
- "font.bold": true,
- "shadow_color": [0, 0, 0],
- "shadow_offset": [0, -1]
- },
- // Sidebar heading selected
- {
- "class": "sidebar_heading",
- "parents": [{"class": "tree_row", "attributes": ["selected"]}],
- "shadow_offset": [0, 1]
- },
- // Sidebar entry
- {
- "class": "sidebar_label",
- "color": [125, 125, 125],
- "shadow_color": [0, 0, 0],
- "shadow_offset": [0, -1],
- "font.bold": false,
- "font.italic": false
- },
- // Sidebar folder entry
- {
- "class": "sidebar_label",
- "parents": [{"class": "tree_row", "attributes": ["expandable"]}],
- "color": [190, 190, 190]
- },
- {
- "class": "sidebar_label",
- "parents": [{"class": "tree_row", "attributes": ["expandable", "hover"]}],
- "color": [235, 235, 235]
- },
- {
- "class": "sidebar_label",
- "parents": [{"class": "tree_row", "attributes": ["expandable"]}],
- "settings": ["bold_folder_labels"],
- "font.bold": true
- },
- // Sidebar entry selected
- {
- "class": "sidebar_label",
- "parents": [{"class": "tree_row", "attributes": ["selected"]}],
- "color": [210, 210, 210],
- "shadow_color": [0, 0, 0],
- "shadow_offset": [0, 1]
- },
- // Sidebar entry transient
- {
- "class": "sidebar_label",
- "attributes": ["transient"],
- "font.italic": true
- },
-
-//
-// SIDEBAR - OPEN FILE ICONS
-//
-
- // Sidebar file close
- {
- "class": "close_button",
- "layer0.texture": "Theme - Soda/Soda Dark/file-close.png",
- "layer0.opacity": 0.0,
- "layer0.inner_margin": 0,
- "content_margin": [8, 8]
- },
- {
- "class": "close_button",
- "parents": [{"class": "tree_row", "attributes": ["hover"]}],
- "layer0.opacity": 1.0
- },
- // Sidebar file dirty
- {
- "class": "close_button",
- "attributes": ["dirty"],
- "layer0.texture": "Theme - Soda/Soda Dark/file-dirty.png",
- "layer0.opacity": 1.0
- },
- {
- "class": "close_button",
- "attributes": ["dirty"],
- "parents": [{"class": "tree_row", "attributes": ["selected"]}],
- "layer0.texture": "Theme - Soda/Soda Dark/file-dirty-selected.png"
- },
- {
- "class": "close_button",
- "attributes": ["dirty"],
- "parents": [{"class": "tree_row", "attributes": ["hover"]}],
- "layer0.texture": "Theme - Soda/Soda Dark/file-close.png"
- },
- // Sidebar file close hover
- {
- "class": "close_button",
- "attributes": ["hover"],
- "layer0.texture": "Theme - Soda/Soda Dark/file-close-hover.png"
- },
- {
- "class": "close_button",
- "parents": [{"class": "tree_row", "attributes": ["hover", "selected"]}],
- "layer0.texture": "Theme - Soda/Soda Dark/file-close-selected.png"
- },
-
-//
-// SIDEBAR - GENERAL FILE ICONS
-//
-
- // Sidebar group closed
- {
- "class": "disclosure_button_control",
- "content_margin": [8, 8],
- "layer0.texture": "Theme - Soda/Soda Dark/group-closed.png",
- "layer0.opacity": 1.0,
- "layer0.inner_margin": 0
- },
- {
- "class": "disclosure_button_control",
- "parents": [{"class": "tree_row", "attributes": ["hover"]}],
- "layer0.texture": "Theme - Soda/Soda Dark/group-closed-hover.png"
- },
- {
- "class": "disclosure_button_control",
- "parents": [{"class": "tree_row", "attributes": ["selected"]}],
- "layer0.texture": "Theme - Soda/Soda Dark/group-closed-selected.png"
- },
- // Sidebar folder closed
- {
- "class": "disclosure_button_control",
- "settings": ["soda_folder_icons"],
- "layer0.texture": "Theme - Soda/Soda Dark/folder-closed.png"
- },
- {
- "class": "disclosure_button_control",
- "settings": ["soda_folder_icons"],
- "parents": [{"class": "tree_row", "attributes": ["hover"]}],
- "layer0.texture": "Theme - Soda/Soda Dark/folder-closed-hover.png"
- },
- {
- "class": "disclosure_button_control",
- "settings": ["soda_folder_icons"],
- "parents": [{"class": "tree_row", "attributes": ["selected"]}],
- "layer0.texture": "Theme - Soda/Soda Dark/folder-closed-selected.png"
- },
- // Sidebar group open
- {
- "class": "disclosure_button_control",
- "attributes": ["expanded"],
- "layer0.texture": "Theme - Soda/Soda Dark/group-open.png"
- },
- {
- "class": "disclosure_button_control",
- "attributes": ["expanded"],
- "parents": [{"class": "tree_row", "attributes": ["hover"]}],
- "layer0.texture": "Theme - Soda/Soda Dark/group-open-hover.png"
- },
- {
- "class": "disclosure_button_control",
- "attributes": ["expanded"],
- "parents": [{"class": "tree_row", "attributes": ["selected"]}],
- "layer0.texture": "Theme - Soda/Soda Dark/group-open-selected.png"
- },
- // Sidebar folder open
- {
- "class": "disclosure_button_control",
- "settings": ["soda_folder_icons"],
- "attributes": ["expanded"],
- "layer0.texture": "Theme - Soda/Soda Dark/folder-open.png"
- },
- {
- "class": "disclosure_button_control",
- "settings": ["soda_folder_icons"],
- "attributes": ["expanded"],
- "parents": [{"class": "tree_row", "attributes": ["hover"]}],
- "layer0.texture": "Theme - Soda/Soda Dark/folder-open-hover.png"
- },
- {
- "class": "disclosure_button_control",
- "settings": ["soda_folder_icons"],
- "attributes": ["expanded"],
- "parents": [{"class": "tree_row", "attributes": ["selected"]}],
- "layer0.texture": "Theme - Soda/Soda Dark/folder-open-selected.png"
- },
-
-//
-// STANDARD TEXT BUTTONS
-//
-
- // Default button state
- {
- "class": "button_control",
- "content_margin": [6, 5, 6, 6],
- "min_size": [75, 0],
- "layer0.texture": "Theme - Soda/Soda Dark/btn-large.png",
- "layer0.opacity": 1.0,
- "layer0.inner_margin": [6, 6]
- },
- // Pressed button state
- {
- "class": "button_control",
- "attributes": ["pressed"],
- "layer0.texture": "Theme - Soda/Soda Dark/btn-large-on.png"
- },
-
-//
-// TEXT INPUT FIELD
-//
-
- // Text input field item
- {
- "class": "text_line_control",
- "layer0.texture": "Theme - Soda/Soda Dark/text-field.png",
- "layer0.opacity": 1.0,
- "layer0.inner_margin": [4, 5, 4, 3],
- "content_margin": [3, 3, 6, 3]
- },
-
- // Text input dropdown
- {
- "class": "dropdown_button_control",
- "content_margin": [8, 8],
- "layer0.texture": "Theme - Soda/Soda Dark/text-field-list.png",
- "layer0.opacity": 1.0,
- "layer0.inner_margin": [4, 4]
- },
- {
- "class": "dropdown_button_control",
- "attributes": ["hover"],
- "layer0.texture": "Theme - Soda/Soda Dark/text-field-list-hover.png"
- },
-
-//
-// PANEL BACKGROUNDS
-//
-
- // Bottom panel background
- {
- "class": "panel_control",
- "layer0.texture": "Theme - Soda/Soda Dark/panel-background.png",
- "layer0.inner_margin": [2, 2, 2, 2],
- "layer0.opacity": 1.0,
- "content_margin": [2, 3, 2, 1]
- },
- // Quick panel background
- {
- "class": "overlay_control",
- "settings": ["!soda_retina_fix"],
- "layer0.texture": "Theme - Soda/Soda Dark/quick-panel-background.png",
- "layer0.inner_margin": [12, 6, 12, 15],
- "layer0.opacity": 1.0,
- "layer1.texture": "Theme - Soda/Soda Dark/quick-panel-sections.png",
- "layer1.inner_margin": [12, 40, 12, 19],
- "layer1.opacity": 1.0,
- "content_margin": [11, 8, 11, 17]
- },
- // Quick panel background (Retina fix)
- {
- "class": "overlay_control",
- "settings": ["soda_retina_fix"],
- "layer0.tint": [67, 67, 67],
- "layer0.opacity": 1.0,
- "content_margin": [6, 8, 6, 6]
- },
-
-//
-// QUICK PANEL
-//
-
- {
- "class": "quick_panel",
- "row_padding": [5, 2],
- "layer0.tint": [33, 33, 33],
- "layer0.opacity": 1.0,
- "dark_content": true
- },
- {
- "class": "quick_panel_row",
- "layer0.texture": "Theme - Soda/Soda Dark/quick-panel-row.png",
- "layer0.inner_margin": [2, 2, 2, 2],
- "layer0.opacity": 1.0
- },
- {
- "class": "quick_panel_row",
- "attributes": ["selected"],
- "layer0.texture": "Theme - Soda/Soda Dark/quick-panel-row-selected.png"
- },
- {
- "class": "quick_panel_label",
- "fg": [210, 210, 210, 255],
- "match_fg": [126, 199, 239, 255],
- "selected_fg": [255, 255, 255, 255],
- "selected_match_fg": [166, 229, 255, 255]
- },
- {
- "class": "quick_panel_path_label",
- "fg": [130, 130, 130, 255],
- "match_fg": [220, 220, 220, 255],
- "selected_fg": [175, 175, 175, 255],
- "selected_match_fg": [220, 220, 220, 255]
- },
- {
- "class": "quick_panel_score_label",
- "fg": [126, 199, 239, 255],
- "selected_fg": [166, 229, 255, 255]
- },
-
-//
-// MINI QUICK PANEL
-//
-
- {
- "class": "mini_quick_panel_row",
- "layer0.texture": "Theme - Soda/Soda Dark/quick-panel-row.png",
- "layer0.inner_margin": [2, 2, 2, 2],
- "layer0.opacity": 1.0
- },
- {
- "class": "mini_quick_panel_row",
- "attributes": ["selected"],
- "layer0.texture": "Theme - Soda/Soda Dark/quick-panel-row-selected.png"
- },
-
-//
-// CODE COMPLETION DROPDOWN
-//
-
- {
- "class": "popup_control",
- "content_margin": [2, 2],
- "layer0.tint": [30, 30, 30],
- "layer0.opacity": 1.0
- },
- {
- "class": "auto_complete",
- "row_padding": [4, 2]
- },
- {
- "class": "auto_complete_label",
- "fg": [140, 140, 140],
- "match_fg": [220, 220, 220],
- "selected_fg": [180, 180, 180],
- "selected_match_fg": [245, 245, 245]
- },
- {
- "class": "table_row",
- "layer0.texture": "Theme - Soda/Soda Dark/autocomplete-row-selected.png",
- "layer0.opacity": 0.0,
- "layer0.inner_margin": [3, 1]
- },
- {
- "class": "table_row",
- "attributes": ["selected"],
- "layer0.opacity": 1.0
- },
-
-//
-// BOTTOM PANEL BUTTONS
-//
-
- // Button group middle
- {
- "class": "icon_button_control",
- "layer0.texture": "Theme - Soda/Soda Dark/btn-group-middle.png",
- "layer0.inner_margin": [6, 6],
- "layer0.opacity": 1.0,
- "content_margin": [3, 3]
- },
- {
- "class": "icon_button_control",
- "attributes": ["selected"],
- "layer0.texture": "Theme - Soda/Soda Dark/btn-group-middle-on.png"
- },
- // Button group left
- {
- "class": "icon_button_control",
- "attributes": ["left"],
- "layer0.texture": "Theme - Soda/Soda Dark/btn-group-left.png",
- "content_margin": [4, 3, 3, 3]
- },
- {
- "class": "icon_button_control",
- "attributes": ["left", "selected"],
- "layer0.texture": "Theme - Soda/Soda Dark/btn-group-left-on.png"
- },
- // Button group right
- {
- "class": "icon_button_control",
- "attributes": ["right"],
- "layer0.texture": "Theme - Soda/Soda Dark/btn-group-right.png",
- "content_margin": [3, 3, 4, 3]
- },
- {
- "class": "icon_button_control",
- "attributes": ["right", "selected"],
- "layer0.texture": "Theme - Soda/Soda Dark/btn-group-right-on.png"
- },
- // Button single
- {
- "class": "icon_button_control",
- "attributes": ["left", "right"],
- "layer0.texture": "Theme - Soda/Soda Dark/btn-small.png",
- "content_margin": [4, 3]
- },
- {
- "class": "icon_button_control",
- "attributes": ["left", "right", "selected"],
- "layer0.texture": "Theme - Soda/Soda Dark/btn-small-on.png"
- },
- // Panel close button
- {
- "class": "panel_close_button",
- "layer0.texture": "Theme - Soda/Soda Dark/panel-close.png",
- "layer0.opacity": 0.85,
- "content_margin": [8, 12]
- },
- {
- "class": "panel_close_button",
- "attributes": ["hover"],
- "layer0.texture": "Theme - Soda/Soda Dark/panel-close.png",
- "layer0.opacity": 1.0
- },
- {
- "class": "panel_close_button",
- "attributes": ["pressed"],
- "layer0.texture": "Theme - Soda/Soda Dark/panel-close-pressed.png"
- },
-
-//
-// BOTTOM PANEL ICONS - GROUP 1
-//
-
- // Regex search button
- {
- "class": "icon_regex",
- "layer0.texture": "Theme - Soda/Soda Dark/icon-regex-off.png",
- "layer0.opacity": 1.0,
- "content_margin": [9, 9]
- },
- {
- "class": "icon_regex",
- "parents": [{"class": "icon_button_control", "attributes": ["selected"]}],
- "layer0.texture": "Theme - Soda/Soda Dark/icon-regex-on.png"
- },
- // Case sensitive search button
- {
- "class": "icon_case",
- "layer0.texture": "Theme - Soda/Soda Dark/icon-case-off.png",
- "layer0.opacity": 1.0,
- "content_margin": [9, 9]
- },
- {
- "class": "icon_case",
- "parents": [{"class": "icon_button_control", "attributes": ["selected"]}],
- "layer0.texture": "Theme - Soda/Soda Dark/icon-case-on.png"
- },
- // Match whole word search button
- {
- "class": "icon_whole_word",
- "layer0.texture": "Theme - Soda/Soda Dark/icon-word-off.png",
- "layer0.opacity": 1.0,
- "content_margin": [9, 9]
- },
- {
- "class": "icon_whole_word",
- "parents": [{"class": "icon_button_control", "attributes": ["selected"]}],
- "layer0.texture": "Theme - Soda/Soda Dark/icon-word-on.png"
- },
-
-//
-// BOTTOM PANEL ICONS - GROUP 1 (EXTENDED: FIND IN FILES)
-//
-
- // Show search context button
- {
- "class": "icon_context",
- "layer0.texture": "Theme - Soda/Soda Dark/icon-context-off.png",
- "layer0.opacity": 1.0,
- "content_margin": [9, 9]
- },
- {
- "class": "icon_context",
- "parents": [{"class": "icon_button_control", "attributes": ["selected"]}],
- "layer0.texture": "Theme - Soda/Soda Dark/icon-context-on.png"
- },
- // Use search buffer
- {
- "class": "icon_use_buffer",
- "layer0.texture": "Theme - Soda/Soda Dark/icon-buffer-off.png",
- "layer0.opacity": 1.0,
- "content_margin": [9, 9]
- },
- {
- "class": "icon_use_buffer",
- "parents": [{"class": "icon_button_control", "attributes": ["selected"]}],
- "layer0.texture": "Theme - Soda/Soda Dark/icon-buffer-on.png"
- },
-
-//
-// BOTTOM PANEL ICONS - GROUP 2
-//
-
- // Reverse search direction button
- {
- "class": "icon_reverse",
- "layer0.texture": "Theme - Soda/Soda Dark/icon-reverse-off.png",
- "layer0.opacity": 1.0,
- "content_margin": [9, 9]
- },
- {
- "class": "icon_reverse",
- "parents": [{"class": "icon_button_control", "attributes": ["selected"]}],
- "layer0.texture": "Theme - Soda/Soda Dark/icon-reverse-on.png"
- },
- // Search wrap button
- {
- "class": "icon_wrap",
- "layer0.texture": "Theme - Soda/Soda Dark/icon-wrap-off.png",
- "layer0.opacity": 1.0,
- "content_margin": [9, 9]
- },
- {
- "class": "icon_wrap",
- "parents": [{"class": "icon_button_control", "attributes": ["selected"]}],
- "layer0.texture": "Theme - Soda/Soda Dark/icon-wrap-on.png"
- },
- // Search in selection button
- {
- "class": "icon_in_selection",
- "layer0.texture": "Theme - Soda/Soda Dark/icon-selection-off.png",
- "layer0.opacity": 1.0,
- "content_margin": [9, 9]
- },
- {
- "class": "icon_in_selection",
- "parents": [{"class": "icon_button_control", "attributes": ["selected"]}],
- "layer0.texture": "Theme - Soda/Soda Dark/icon-selection-on.png"
- },
-
-//
-// BOTTOM PANEL ICONS - GROUP 3
-//
-
- // Preserve case button
- {
- "class": "icon_preserve_case",
- "layer0.texture": "Theme - Soda/Soda Dark/icon-preserve-off.png",
- "layer0.opacity": 1.0,
- "content_margin": [9, 9]
- },
- {
- "class": "icon_preserve_case",
- "parents": [{"class": "icon_button_control", "attributes": ["selected"]}],
- "layer0.texture": "Theme - Soda/Soda Dark/icon-preserve-on.png"
- },
-
-//
-// BOTTOM PANEL ICONS - GROUP 4
-//
-
- // Highlight results button
- {
- "class": "icon_highlight",
- "layer0.texture": "Theme - Soda/Soda Dark/icon-highlight-off.png",
- "layer0.opacity": 1.0,
- "content_margin": [9, 9]
- },
- {
- "class": "icon_highlight",
- "parents": [{"class": "icon_button_control", "attributes": ["selected"]}],
- "layer0.texture": "Theme - Soda/Soda Dark/icon-highlight-on.png"
- }
-
-]
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark.sublime-theme b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark.sublime-theme
deleted file mode 100644
index 5b47e34..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark.sublime-theme
+++ /dev/null
@@ -1,1014 +0,0 @@
-[
-
-//
-// TABS (REGULAR)
-//
-
- // Tab set
- {
- "class": "tabset_control",
- "layer0.texture": "Theme - Soda/Soda Dark/tabset-background.png",
- "layer0.inner_margin": [1, 7],
- "layer0.opacity": 1.0,
- "content_margin": [-4, 0, -4, 3],
- "tab_overlap": 5,
- "tab_width": 180,
- "tab_min_width": 45,
- "tab_height": 25,
- "mouse_wheel_switch": false
- },
- {
- "class": "tabset_control",
- "settings": ["mouse_wheel_switches_tabs"],
- "mouse_wheel_switch": true
- },
- // Tab element
- {
- "class": "tab_control",
- "content_margin": [12, 3, 12, 3],
- "max_margin_trim": 0,
- "hit_test_level": 0.0,
- "layer0.texture": "Theme - Soda/Soda Dark/tab-inactive.png",
- "layer0.inner_margin": [5, 5],
- "layer0.opacity": 1.0
- },
- // Tab close state
- {
- "class": "tab_control",
- "settings": ["show_tab_close_buttons"],
- "content_margin": [12, 3, 7, 3]
- },
- // Tab hover state
- {
- "class": "tab_control",
- "attributes": ["hover"],
- "layer0.texture": "Theme - Soda/Soda Dark/tab-hover.png"
- },
- // Tab active state
- {
- "class": "tab_control",
- "attributes": ["selected"],
- "layer0.texture": "Theme - Soda/Soda Dark/tab-active.png"
- },
- // Tab dirty state (close button hidden)
- {
- "class": "tab_control",
- "settings": ["!show_tab_close_buttons"],
- "attributes": ["dirty"],
- "content_margin": [12, 3, 7, 3]
- },
-
-//
-// TABS (CLASSIC)
-//
-
- // Tab set
- {
- "class": "tabset_control",
- "settings": ["soda_classic_tabs"],
- "content_margin": [3, 4, 3, 3],
- "tab_overlap": 24,
- "tab_height": 28
- },
- // Tab element
- {
- "class": "tab_control",
- "settings": ["soda_classic_tabs"],
- "content_margin": [22, 6, 22, 4],
- "hit_test_level": 0.5,
- "layer0.texture": "Theme - Soda/Soda Dark/classic/tab-inactive.png",
- "layer0.inner_margin": [18, 4]
- },
- // Tab close state
- {
- "class": "tab_control",
- "settings": ["soda_classic_tabs", "show_tab_close_buttons"],
- "content_margin": [22, 6, 15, 4]
- },
- // Tab hover state
- {
- "class": "tab_control",
- "settings": ["soda_classic_tabs"],
- "attributes": ["hover"],
- "layer0.texture": "Theme - Soda/Soda Dark/classic/tab-hover.png"
- },
- // Tab active state
- {
- "class": "tab_control",
- "settings": ["soda_classic_tabs"],
- "attributes": ["selected"],
- "layer0.texture": "Theme - Soda/Soda Dark/classic/tab-active.png"
- },
- // Tab dirty state (close button hidden)
- {
- "class": "tab_control",
- "settings": ["soda_classic_tabs", "!show_tab_close_buttons"],
- "attributes": ["dirty"],
- "content_margin": [22, 6, 15, 4]
- },
-
-//
-// TAB BUTTONS
-//
-
- // Tab close button
- {
- "class": "tab_close_button",
- "content_margin": [0, 0],
- "layer0.texture": "Theme - Soda/Soda Dark/tab-close-inactive.png",
- "layer0.opacity": 1.0,
- "layer0.inner_margin": 0
- },
- {
- "class": "tab_close_button",
- "settings": ["show_tab_close_buttons"],
- "content_margin": [8, 8]
- },
- {
- "class": "tab_close_button",
- "parents": [{"class": "tab_control", "attributes": ["hover"]}],
- "layer0.texture": "Theme - Soda/Soda Dark/tab-close.png",
- "layer0.opacity": 1.0
- },
- {
- "class": "tab_close_button",
- "parents": [{"class": "tab_control", "attributes": ["selected"]}],
- "layer0.texture": "Theme - Soda/Soda Dark/tab-close.png",
- "layer0.opacity": 1.0
- },
- // Tab dirty button
- {
- "class": "tab_close_button",
- "parents": [{"class": "tab_control", "attributes": ["dirty"]}],
- "layer0.texture": "Theme - Soda/Soda Dark/tab-dirty-inactive.png"
- },
- {
- "class": "tab_close_button",
- "settings": ["!show_tab_close_buttons"],
- "parents": [{"class": "tab_control", "attributes": ["dirty"]}],
- "content_margin": [8, 8]
- },
- {
- "class": "tab_close_button",
- "parents": [{"class": "tab_control", "attributes": ["dirty", "hover"]}],
- "layer0.opacity": 1.0
- },
- {
- "class": "tab_close_button",
- "parents": [{"class": "tab_control", "attributes": ["dirty", "selected"]}],
- "layer0.texture": "Theme - Soda/Soda Dark/tab-dirty.png"
- },
- // Tab highlight button
- {
- "class": "tab_close_button",
- "settings": ["highlight_modified_tabs"],
- "parents": [{"class": "tab_control", "attributes": ["dirty"]}],
- "layer0.texture": "Theme - Soda/Soda Dark/tab-highlight-inactive.png"
- },
- {
- "class": "tab_close_button",
- "settings": ["highlight_modified_tabs"],
- "parents": [{"class": "tab_control", "attributes": ["dirty", "selected"]}],
- "layer0.texture": "Theme - Soda/Soda Dark/tab-highlight.png"
- },
- // Tab close button hover
- {
- "class": "tab_close_button",
- "settings": ["show_tab_close_buttons"],
- "attributes": ["hover"],
- "layer0.texture": "Theme - Soda/Soda Dark/tab-close-hover.png"
- },
- // Tab close button pressed
- {
- "class": "tab_close_button",
- "settings": ["show_tab_close_buttons"],
- "attributes": ["pressed"],
- "layer0.texture": "Theme - Soda/Soda Dark/tab-close-pressed.png"
- },
-
-//
-// TAB LABELS
-//
-
- {
- "class": "tab_label",
- "fade": true,
- "fg": [170, 170, 170],
- "shadow_color": [25, 25, 25],
- "shadow_offset": [0, -1]
- },
- {
- "class": "tab_label",
- "parents": [{"class": "tab_control", "attributes": ["hover"]}],
- "fg": [200, 200, 200],
- "shadow_color": [30, 30, 30]
- },
- {
- "class": "tab_label",
- "parents": [{"class": "tab_control", "attributes": ["selected"]}],
- "fg": [230, 230, 230],
- "shadow_color": [35, 35, 35]
- },
-
-//
-// FOLD BUTTONS
-//
-
- {
- "class": "fold_button_control",
- "layer0.texture": "Theme - Soda/Soda Dark/fold-closed.png",
- "layer0.opacity": 1.0,
- "layer0.inner_margin": 0,
- "content_margin": [8, 8]
- },
- {
- "class": "fold_button_control",
- "attributes": ["hover"],
- "layer0.texture": "Theme - Soda/Soda Dark/fold-closed-hover.png"
- },
- {
- "class": "fold_button_control",
- "attributes": ["expanded"],
- "layer0.texture": "Theme - Soda/Soda Dark/fold-open.png"
- },
- {
- "class": "fold_button_control",
- "attributes": ["expanded", "hover"],
- "layer0.texture": "Theme - Soda/Soda Dark/fold-open-hover.png"
- },
-
-//
-// STANDARD SCROLLBARS
-//
-
- // Standard vertical scroll bar
- {
- "class": "scroll_bar_control",
- "layer0.texture": "Theme - Soda/Soda Dark/standard-scrollbar-vertical.png",
- "layer0.opacity": 1.0,
- "layer0.inner_margin": [2, 6],
- "blur": false
- },
- // Standard horizontal scroll bar
- {
- "class": "scroll_bar_control",
- "attributes": ["horizontal"],
- "layer0.texture": "Theme - Soda/Soda Dark/standard-scrollbar-horizontal.png",
- "layer0.inner_margin": [6, 2],
- "blur": false
- },
- // Standard scroll bar corner
- {
- "class": "scroll_corner_control",
- "layer0.texture": "Theme - Soda/Soda Dark/standard-scrollbar-corner.png",
- "layer0.inner_margin": [2, 2],
- "layer0.opacity": 1.0
- },
- // Standard vertical scroll puck
- {
- "class": "puck_control",
- "layer0.texture": "Theme - Soda/Soda Dark/standard-puck-vertical.png",
- "layer0.opacity": 1.0,
- "layer0.inner_margin": [0, 10],
- "content_margin": [8, 12],
- "blur": false
- },
- // Standard horizontal scroll puck
- {
- "class": "puck_control",
- "attributes": ["horizontal"],
- "layer0.texture": "Theme - Soda/Soda Dark/standard-puck-horizontal.png",
- "layer0.inner_margin": [10, 0],
- "content_margin": [12, 8],
- "blur": false
- },
-
-//
-// OVERLAY SCROLLBARS
-//
-
- // Overlay toggle scroll bar
- {
- "class": "scroll_area_control",
- "settings": ["overlay_scroll_bars"],
- "overlay": true
- },
- {
- "class": "scroll_area_control",
- "settings": ["!overlay_scroll_bars"],
- "overlay": false
- },
- // Overlay vertical scroll bar
- {
- "class": "scroll_bar_control",
- "settings": ["overlay_scroll_bars"],
- "layer0.texture": "Theme - Soda/Soda Dark/overlay-scrollbar-vertical.png",
- "layer0.inner_margin": [0, 5],
- "blur": true
- },
- // Overlay horizontal scroll bar
- {
- "class": "scroll_bar_control",
- "settings": ["overlay_scroll_bars"],
- "attributes": ["horizontal"],
- "layer0.texture": "Theme - Soda/Soda Dark/overlay-scrollbar-horizontal.png",
- "layer0.inner_margin": [5, 0],
- "blur": true
- },
- // Overlay vertical puck
- {
- "class": "puck_control",
- "settings": ["overlay_scroll_bars"],
- "layer0.texture": "Theme - Soda/Soda Dark/overlay-puck-vertical.png",
- "layer0.inner_margin": [0, 5],
- "content_margin": [5, 20],
- "blur": true
- },
- // Overlay horizontal puck
- {
- "class": "puck_control",
- "settings": ["overlay_scroll_bars"],
- "attributes": ["horizontal"],
- "layer0.texture": "Theme - Soda/Soda Dark/overlay-puck-horizontal.png",
- "layer0.inner_margin": [5, 0],
- "content_margin": [20, 5],
- "blur": true
- },
- // Overlay light puck (for dark content)
- {
- "class": "puck_control",
- "settings": ["overlay_scroll_bars"],
- "attributes": ["dark"],
- "layer0.texture": "Theme - Soda/Soda Dark/overlay-dark-puck-vertical.png"
- },
- // Overlay light horizontal puck (for dark content)
- {
- "class": "puck_control",
- "settings": ["overlay_scroll_bars"],
- "attributes": ["horizontal", "dark"],
- "layer0.texture": "Theme - Soda/Soda Dark/overlay-dark-puck-horizontal.png"
- },
-
-//
-// EMPTY WINDOW BACKGROUND
-//
-
- {
- "class": "sheet_container_control",
- "layer0.tint": [25, 25, 25],
- "layer0.opacity": 1.0
- },
-
-//
-// GRID LAYOUT
-//
-
- {
- "class": "grid_layout_control",
- "border_size": 1,
- "border_color": [70, 70, 70]
- },
-
-//
-// MINI MAP
-//
-
- {
- "class": "minimap_control",
- "viewport_color": [255, 255, 255, 35]
- },
-
-//
-// LABELS
-//
-
- // General labels
- {
- "class": "label_control",
- "color": [204, 204, 204]
- },
- // Text field labels
- {
- "class": "label_control",
- "parents": [{"class": "panel_control"}],
- "shadow_color": [50, 50, 50],
- "shadow_offset": [0, -1]
- },
- // Button labels
- {
- "class": "label_control",
- "parents": [{"class": "button_control"}],
- "shadow_color": [55, 55, 55],
- "shadow_offset": [0, -1]
- },
-
-//
-// TOOLTIP
-//
-
- // Tooltip container
- {
- "class": "tool_tip_control",
- "layer0.texture": "Theme - Soda/Soda Dark/tooltip.png",
- "layer0.inner_margin": [1, 1],
- "layer0.opacity": 0.95,
- "content_margin": [3, 3]
- },
- // Tooltip content
- {
- "class": "tool_tip_label_control",
- "color": [0, 0, 0]
- },
-
-//
-// STATUS BAR
-//
-
- // Status bar container
- {
- "class": "status_bar",
- "layer0.texture": "Theme - Soda/Soda Dark/status-bar-background.png",
- "layer0.opacity": 1.0,
- "layer0.inner_margin": [2, 2],
- "content_margin": [8, 4, 8, 4]
- },
- // Status bar button
- {
- "class": "status_button",
- "min_size": [100, 0]
- },
- // Status bar label
- {
- "class": "label_control",
- "parents": [{"class": "status_bar"}],
- "color": [150, 150, 150],
- "shadow_color": [25, 25, 25],
- "shadow_offset": [0, -1]
- },
-
-//
-// SIDEBAR
-//
-
- // Sidebar container
- {
- "class": "sidebar_container",
- "layer0.texture": "Theme - Soda/Soda Dark/sidebar-bg.png",
- "layer0.opacity": 1.0,
- "layer0.inner_margin": [1, 1, 2, 1],
- "content_margin": [0, 0, 1, 0]
- },
- // Sidebar tree
- {
- "class": "sidebar_tree",
- "row_padding": [8, 3],
- "indent": 15,
- "indent_offset": 15,
- "indent_top_level": false,
- "dark_content": true
- },
- // Sidebar rows
- {
- "class": "tree_row",
- "layer0.texture": "Theme - Soda/Soda Dark/sidebar-row-selected.png",
- "layer0.opacity": 0.0,
- "layer0.inner_margin": [1, 1]
- },
- // Sidebar row selected
- {
- "class": "tree_row",
- "attributes": ["selected"],
- "layer0.opacity": 1.0
- },
- // Sidebar heading
- {
- "class": "sidebar_heading",
- "color": [210, 210, 210],
- "font.bold": true,
- "shadow_color": [0, 0, 0],
- "shadow_offset": [0, -1]
- },
- // Sidebar heading selected
- {
- "class": "sidebar_heading",
- "parents": [{"class": "tree_row", "attributes": ["selected"]}],
- "shadow_offset": [0, 1]
- },
- // Sidebar entry
- {
- "class": "sidebar_label",
- "color": [125, 125, 125],
- "shadow_color": [0, 0, 0],
- "shadow_offset": [0, -1]
- },
- // Sidebar folder entry
- {
- "class": "sidebar_label",
- "parents": [{"class": "tree_row", "attributes": ["expandable"]}],
- "color": [190, 190, 190]
- },
- {
- "class": "sidebar_label",
- "parents": [{"class": "tree_row", "attributes": ["expandable", "hover"]}],
- "color": [235, 235, 235]
- },
- {
- "class": "sidebar_label",
- "parents": [{"class": "tree_row", "attributes": ["expandable"]}],
- "settings": ["bold_folder_labels"],
- "font.bold": true
- },
- // Sidebar entry selected
- {
- "class": "sidebar_label",
- "parents": [{"class": "tree_row", "attributes": ["selected"]}],
- "color": [210, 210, 210],
- "shadow_color": [0, 0, 0],
- "shadow_offset": [0, 1]
- },
-
-//
-// SIDEBAR - OPEN FILE ICONS
-//
-
- // Sidebar file close
- {
- "class": "close_button",
- "layer0.texture": "Theme - Soda/Soda Dark/file-close.png",
- "layer0.opacity": 0.0,
- "layer0.inner_margin": 0,
- "content_margin": [8, 8]
- },
- {
- "class": "close_button",
- "parents": [{"class": "tree_row", "attributes": ["hover"]}],
- "layer0.opacity": 1.0
- },
- // Sidebar file dirty
- {
- "class": "close_button",
- "attributes": ["dirty"],
- "layer0.texture": "Theme - Soda/Soda Dark/file-dirty.png",
- "layer0.opacity": 1.0
- },
- {
- "class": "close_button",
- "attributes": ["dirty"],
- "parents": [{"class": "tree_row", "attributes": ["selected"]}],
- "layer0.texture": "Theme - Soda/Soda Dark/file-dirty-selected.png"
- },
- {
- "class": "close_button",
- "attributes": ["dirty"],
- "parents": [{"class": "tree_row", "attributes": ["hover"]}],
- "layer0.texture": "Theme - Soda/Soda Dark/file-close.png"
- },
- // Sidebar file close hover
- {
- "class": "close_button",
- "attributes": ["hover"],
- "layer0.texture": "Theme - Soda/Soda Dark/file-close-hover.png"
- },
- {
- "class": "close_button",
- "parents": [{"class": "tree_row", "attributes": ["hover", "selected"]}],
- "layer0.texture": "Theme - Soda/Soda Dark/file-close-selected.png"
- },
-
-//
-// SIDEBAR - GENERAL FILE ICONS
-//
-
- // Sidebar group closed
- {
- "class": "disclosure_button_control",
- "content_margin": [8, 8],
- "layer0.texture": "Theme - Soda/Soda Dark/group-closed.png",
- "layer0.opacity": 1.0,
- "layer0.inner_margin": 0
- },
- {
- "class": "disclosure_button_control",
- "parents": [{"class": "tree_row", "attributes": ["hover"]}],
- "layer0.texture": "Theme - Soda/Soda Dark/group-closed-hover.png"
- },
- {
- "class": "disclosure_button_control",
- "parents": [{"class": "tree_row", "attributes": ["selected"]}],
- "layer0.texture": "Theme - Soda/Soda Dark/group-closed-selected.png"
- },
- // Sidebar folder closed
- {
- "class": "disclosure_button_control",
- "settings": ["soda_folder_icons"],
- "layer0.texture": "Theme - Soda/Soda Dark/folder-closed.png"
- },
- {
- "class": "disclosure_button_control",
- "settings": ["soda_folder_icons"],
- "parents": [{"class": "tree_row", "attributes": ["hover"]}],
- "layer0.texture": "Theme - Soda/Soda Dark/folder-closed-hover.png"
- },
- {
- "class": "disclosure_button_control",
- "settings": ["soda_folder_icons"],
- "parents": [{"class": "tree_row", "attributes": ["selected"]}],
- "layer0.texture": "Theme - Soda/Soda Dark/folder-closed-selected.png"
- },
- // Sidebar group open
- {
- "class": "disclosure_button_control",
- "attributes": ["expanded"],
- "layer0.texture": "Theme - Soda/Soda Dark/group-open.png"
- },
- {
- "class": "disclosure_button_control",
- "attributes": ["expanded"],
- "parents": [{"class": "tree_row", "attributes": ["hover"]}],
- "layer0.texture": "Theme - Soda/Soda Dark/group-open-hover.png"
- },
- {
- "class": "disclosure_button_control",
- "attributes": ["expanded"],
- "parents": [{"class": "tree_row", "attributes": ["selected"]}],
- "layer0.texture": "Theme - Soda/Soda Dark/group-open-selected.png"
- },
- // Sidebar folder open
- {
- "class": "disclosure_button_control",
- "settings": ["soda_folder_icons"],
- "attributes": ["expanded"],
- "layer0.texture": "Theme - Soda/Soda Dark/folder-open.png"
- },
- {
- "class": "disclosure_button_control",
- "settings": ["soda_folder_icons"],
- "attributes": ["expanded"],
- "parents": [{"class": "tree_row", "attributes": ["hover"]}],
- "layer0.texture": "Theme - Soda/Soda Dark/folder-open-hover.png"
- },
- {
- "class": "disclosure_button_control",
- "settings": ["soda_folder_icons"],
- "attributes": ["expanded"],
- "parents": [{"class": "tree_row", "attributes": ["selected"]}],
- "layer0.texture": "Theme - Soda/Soda Dark/folder-open-selected.png"
- },
-
-//
-// STANDARD TEXT BUTTONS
-//
-
- // Default button state
- {
- "class": "button_control",
- "content_margin": [6, 5, 6, 6],
- "min_size": [75, 0],
- "layer0.texture": "Theme - Soda/Soda Dark/btn-large.png",
- "layer0.opacity": 1.0,
- "layer0.inner_margin": [6, 6]
- },
- // Pressed button state
- {
- "class": "button_control",
- "attributes": ["pressed"],
- "layer0.texture": "Theme - Soda/Soda Dark/btn-large-on.png"
- },
-
-//
-// TEXT INPUT FIELD
-//
-
- // Text input field item
- {
- "class": "text_line_control",
- "layer0.texture": "Theme - Soda/Soda Dark/text-field.png",
- "layer0.opacity": 1.0,
- "layer0.inner_margin": [4, 5, 4, 3],
- "content_margin": [3, 3]
- },
-
-//
-// PANEL BACKGROUNDS
-//
-
- // Bottom panel background
- {
- "class": "panel_control",
- "layer0.texture": "Theme - Soda/Soda Dark/panel-background.png",
- "layer0.inner_margin": [2, 2, 2, 2],
- "layer0.opacity": 1.0,
- "content_margin": [2, 3, 2, 1]
- },
- // Quick panel background
- {
- "class": "overlay_control",
- "settings": ["!soda_retina_fix"],
- "layer0.texture": "Theme - Soda/Soda Dark/quick-panel-background.png",
- "layer0.inner_margin": [12, 6, 12, 15],
- "layer0.opacity": 1.0,
- "layer1.texture": "Theme - Soda/Soda Dark/quick-panel-sections.png",
- "layer1.inner_margin": [12, 40, 12, 19],
- "layer1.opacity": 1.0,
- "content_margin": [11, 8, 11, 17]
- },
- // Quick panel background (Retina fix)
- {
- "class": "overlay_control",
- "settings": ["soda_retina_fix"],
- "layer0.tint": [67, 67, 67],
- "layer0.opacity": 1.0,
- "content_margin": [6, 8, 6, 6]
- },
-
-//
-// QUICK PANEL
-//
-
- {
- "class": "quick_panel",
- "row_padding": [5, 2],
- "layer0.tint": [33, 33, 33],
- "layer0.opacity": 1.0,
- "dark_content": true
- },
- {
- "class": "quick_panel_row",
- "layer0.texture": "Theme - Soda/Soda Dark/quick-panel-row.png",
- "layer0.inner_margin": [2, 2, 2, 2],
- "layer0.opacity": 1.0
- },
- {
- "class": "quick_panel_row",
- "attributes": ["selected"],
- "layer0.texture": "Theme - Soda/Soda Dark/quick-panel-row-selected.png"
- },
- {
- "class": "quick_panel_label",
- "fg": [210, 210, 210, 255],
- "match_fg": [126, 199, 239, 255],
- "selected_fg": [255, 255, 255, 255],
- "selected_match_fg": [166, 229, 255, 255]
- },
- {
- "class": "quick_panel_path_label",
- "fg": [130, 130, 130, 255],
- "match_fg": [220, 220, 220, 255],
- "selected_fg": [175, 175, 175, 255],
- "selected_match_fg": [220, 220, 220, 255]
- },
- {
- "class": "quick_panel_score_label",
- "fg": [126, 199, 239, 255],
- "selected_fg": [166, 229, 255, 255]
- },
-
-//
-// MINI QUICK PANEL
-//
-
- {
- "class": "mini_quick_panel_row",
- "layer0.texture": "Theme - Soda/Soda Dark/quick-panel-row.png",
- "layer0.inner_margin": [2, 2, 2, 2],
- "layer0.opacity": 1.0
- },
- {
- "class": "mini_quick_panel_row",
- "attributes": ["selected"],
- "layer0.texture": "Theme - Soda/Soda Dark/quick-panel-row-selected.png"
- },
-
-//
-// CODE COMPLETION DROPDOWN
-//
-
- {
- "class": "popup_control",
- "content_margin": [2, 2],
- "layer0.tint": [30, 30, 30],
- "layer0.opacity": 1.0
- },
- {
- "class": "auto_complete",
- "row_padding": [4, 2]
- },
- {
- "class": "auto_complete_label",
- "fg": [140, 140, 140],
- "match_fg": [220, 220, 220],
- "selected_fg": [180, 180, 180],
- "selected_match_fg": [245, 245, 245]
- },
- {
- "class": "table_row",
- "layer0.texture": "Theme - Soda/Soda Dark/autocomplete-row-selected.png",
- "layer0.opacity": 0.0,
- "layer0.inner_margin": [3, 1]
- },
- {
- "class": "table_row",
- "attributes": ["selected"],
- "layer0.opacity": 1.0
- },
-
-//
-// BOTTOM PANEL BUTTONS
-//
-
- // Button group middle
- {
- "class": "icon_button_control",
- "layer0.texture": "Theme - Soda/Soda Dark/btn-group-middle.png",
- "layer0.inner_margin": [6, 6],
- "layer0.opacity": 1.0,
- "content_margin": [3, 3]
- },
- {
- "class": "icon_button_control",
- "attributes": ["selected"],
- "layer0.texture": "Theme - Soda/Soda Dark/btn-group-middle-on.png"
- },
- // Button group left
- {
- "class": "icon_button_control",
- "attributes": ["left"],
- "layer0.texture": "Theme - Soda/Soda Dark/btn-group-left.png",
- "content_margin": [4, 3, 3, 3]
- },
- {
- "class": "icon_button_control",
- "attributes": ["left", "selected"],
- "layer0.texture": "Theme - Soda/Soda Dark/btn-group-left-on.png"
- },
- // Button group right
- {
- "class": "icon_button_control",
- "attributes": ["right"],
- "layer0.texture": "Theme - Soda/Soda Dark/btn-group-right.png",
- "content_margin": [3, 3, 4, 3]
- },
- {
- "class": "icon_button_control",
- "attributes": ["right", "selected"],
- "layer0.texture": "Theme - Soda/Soda Dark/btn-group-right-on.png"
- },
- // Button single
- {
- "class": "icon_button_control",
- "attributes": ["left", "right"],
- "layer0.texture": "Theme - Soda/Soda Dark/btn-small.png",
- "content_margin": [4, 3]
- },
- {
- "class": "icon_button_control",
- "attributes": ["left", "right", "selected"],
- "layer0.texture": "Theme - Soda/Soda Dark/btn-small-on.png"
- },
-
-//
-// BOTTOM PANEL ICONS - GROUP 1
-//
-
- // Regex search button
- {
- "class": "icon_regex",
- "layer0.texture": "Theme - Soda/Soda Dark/icon-regex-off.png",
- "layer0.opacity": 1.0,
- "content_margin": [9, 9]
- },
- {
- "class": "icon_regex",
- "parents": [{"class": "icon_button_control", "attributes": ["selected"]}],
- "layer0.texture": "Theme - Soda/Soda Dark/icon-regex-on.png"
- },
- // Case sensitive search button
- {
- "class": "icon_case",
- "layer0.texture": "Theme - Soda/Soda Dark/icon-case-off.png",
- "layer0.opacity": 1.0,
- "content_margin": [9, 9]
- },
- {
- "class": "icon_case",
- "parents": [{"class": "icon_button_control", "attributes": ["selected"]}],
- "layer0.texture": "Theme - Soda/Soda Dark/icon-case-on.png"
- },
- // Match whole word search button
- {
- "class": "icon_whole_word",
- "layer0.texture": "Theme - Soda/Soda Dark/icon-word-off.png",
- "layer0.opacity": 1.0,
- "content_margin": [9, 9]
- },
- {
- "class": "icon_whole_word",
- "parents": [{"class": "icon_button_control", "attributes": ["selected"]}],
- "layer0.texture": "Theme - Soda/Soda Dark/icon-word-on.png"
- },
-
-//
-// BOTTOM PANEL ICONS - GROUP 1 (EXTENDED: FIND IN FILES)
-//
-
- // Show search context button
- {
- "class": "icon_context",
- "layer0.texture": "Theme - Soda/Soda Dark/icon-context-off.png",
- "layer0.opacity": 1.0,
- "content_margin": [9, 9]
- },
- {
- "class": "icon_context",
- "parents": [{"class": "icon_button_control", "attributes": ["selected"]}],
- "layer0.texture": "Theme - Soda/Soda Dark/icon-context-on.png"
- },
- // Use search buffer
- {
- "class": "icon_use_buffer",
- "layer0.texture": "Theme - Soda/Soda Dark/icon-buffer-off.png",
- "layer0.opacity": 1.0,
- "content_margin": [9, 9]
- },
- {
- "class": "icon_use_buffer",
- "parents": [{"class": "icon_button_control", "attributes": ["selected"]}],
- "layer0.texture": "Theme - Soda/Soda Dark/icon-buffer-on.png"
- },
-
-//
-// BOTTOM PANEL ICONS - GROUP 2
-//
-
- // Reverse search direction button
- {
- "class": "icon_reverse",
- "layer0.texture": "Theme - Soda/Soda Dark/icon-reverse-off.png",
- "layer0.opacity": 1.0,
- "content_margin": [9, 9]
- },
- {
- "class": "icon_reverse",
- "parents": [{"class": "icon_button_control", "attributes": ["selected"]}],
- "layer0.texture": "Theme - Soda/Soda Dark/icon-reverse-on.png"
- },
- // Search wrap button
- {
- "class": "icon_wrap",
- "layer0.texture": "Theme - Soda/Soda Dark/icon-wrap-off.png",
- "layer0.opacity": 1.0,
- "content_margin": [9, 9]
- },
- {
- "class": "icon_wrap",
- "parents": [{"class": "icon_button_control", "attributes": ["selected"]}],
- "layer0.texture": "Theme - Soda/Soda Dark/icon-wrap-on.png"
- },
- // Search in selection button
- {
- "class": "icon_in_selection",
- "layer0.texture": "Theme - Soda/Soda Dark/icon-selection-off.png",
- "layer0.opacity": 1.0,
- "content_margin": [9, 9]
- },
- {
- "class": "icon_in_selection",
- "parents": [{"class": "icon_button_control", "attributes": ["selected"]}],
- "layer0.texture": "Theme - Soda/Soda Dark/icon-selection-on.png"
- },
-
-//
-// BOTTOM PANEL ICONS - GROUP 3
-//
-
- // Preserve case button
- {
- "class": "icon_preserve_case",
- "layer0.texture": "Theme - Soda/Soda Dark/icon-preserve-off.png",
- "layer0.opacity": 1.0,
- "content_margin": [9, 9]
- },
- {
- "class": "icon_preserve_case",
- "parents": [{"class": "icon_button_control", "attributes": ["selected"]}],
- "layer0.texture": "Theme - Soda/Soda Dark/icon-preserve-on.png"
- },
-
-//
-// BOTTOM PANEL ICONS - GROUP 4
-//
-
- // Highlight results button
- {
- "class": "icon_highlight",
- "layer0.texture": "Theme - Soda/Soda Dark/icon-highlight-off.png",
- "layer0.opacity": 1.0,
- "content_margin": [9, 9]
- },
- {
- "class": "icon_highlight",
- "parents": [{"class": "icon_button_control", "attributes": ["selected"]}],
- "layer0.texture": "Theme - Soda/Soda Dark/icon-highlight-on.png"
- }
-
-]
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/.gitignore b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/.gitignore
deleted file mode 100644
index f05fcdc..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-*.cache
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/Widget - Soda Dark 3.sublime-settings b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/Widget - Soda Dark 3.sublime-settings
deleted file mode 100644
index d5787af..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/Widget - Soda Dark 3.sublime-settings
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "color_scheme": "Packages/Theme - Soda/Soda Dark/Widget - Soda Dark.stTheme",
- "draw_shadows": false
-}
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/Widget - Soda Dark.stTheme b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/Widget - Soda Dark.stTheme
deleted file mode 100644
index e106e4e..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/Widget - Soda Dark.stTheme
+++ /dev/null
@@ -1,87 +0,0 @@
-
-
-
-
- author
- Ian Hill
- comment
- A widget theme for the UI components of the Soda Dark theme.
- name
- Soda Dark - Widget Theme
- settings
-
-
- settings
-
- background
- #383838
- caret
- #F8F8F8
- foreground
- #F8F8F8
- invisibles
- #3B3B3B
- lineHighlight
- #333333
- selection
- #666666
- selectionBorder
- #66666600
- inactiveSelection
- #4a4a4a
-
-
-
- name
- Comment
- scope
- comment
- settings
-
- fontStyle
- italic
- foreground
- #505C63
-
-
-
- name
- Keyword
- scope
- keyword, storage
- settings
-
- foreground
- #A7DBD8
-
-
-
- scope
- constant
- settings
-
- foreground
- #E0E4CC
-
-
-
- scope
- string
- settings
-
- foreground
- #E0E4CC
-
-
-
- scope
- constant.character.escape
- settings
-
- foreground
- #e9903c
-
-
-
-
-
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/Widget - Soda Dark.sublime-settings b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/Widget - Soda Dark.sublime-settings
deleted file mode 100644
index d5787af..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/Widget - Soda Dark.sublime-settings
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "color_scheme": "Packages/Theme - Soda/Soda Dark/Widget - Soda Dark.stTheme",
- "draw_shadows": false
-}
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/autocomplete-row-selected.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/autocomplete-row-selected.png
deleted file mode 100644
index 336555c..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/autocomplete-row-selected.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/autocomplete-row-selected@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/autocomplete-row-selected@2x.png
deleted file mode 100644
index 2a3d7b4..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/autocomplete-row-selected@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/bookmark.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/bookmark.png
deleted file mode 100644
index 8d15c63..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/bookmark.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/btn-group-left-on.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/btn-group-left-on.png
deleted file mode 100644
index dd340bb..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/btn-group-left-on.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/btn-group-left-on@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/btn-group-left-on@2x.png
deleted file mode 100644
index b6b8a5a..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/btn-group-left-on@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/btn-group-left.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/btn-group-left.png
deleted file mode 100644
index 67b3ccf..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/btn-group-left.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/btn-group-left@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/btn-group-left@2x.png
deleted file mode 100644
index 0e07796..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/btn-group-left@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/btn-group-middle-on.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/btn-group-middle-on.png
deleted file mode 100644
index 9b1126f..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/btn-group-middle-on.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/btn-group-middle-on@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/btn-group-middle-on@2x.png
deleted file mode 100644
index f8f23c1..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/btn-group-middle-on@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/btn-group-middle.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/btn-group-middle.png
deleted file mode 100644
index dfca99b..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/btn-group-middle.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/btn-group-middle@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/btn-group-middle@2x.png
deleted file mode 100644
index 0217ebd..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/btn-group-middle@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/btn-group-right-on.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/btn-group-right-on.png
deleted file mode 100644
index 12340b7..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/btn-group-right-on.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/btn-group-right-on@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/btn-group-right-on@2x.png
deleted file mode 100644
index 57595b4..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/btn-group-right-on@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/btn-group-right.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/btn-group-right.png
deleted file mode 100644
index 2897025..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/btn-group-right.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/btn-group-right@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/btn-group-right@2x.png
deleted file mode 100644
index 43a6c14..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/btn-group-right@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/btn-large-on.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/btn-large-on.png
deleted file mode 100644
index a2e3ce0..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/btn-large-on.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/btn-large-on@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/btn-large-on@2x.png
deleted file mode 100644
index b9e71bd..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/btn-large-on@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/btn-large.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/btn-large.png
deleted file mode 100644
index 0c95e6e..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/btn-large.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/btn-large@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/btn-large@2x.png
deleted file mode 100644
index 3985eee..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/btn-large@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/btn-small-on.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/btn-small-on.png
deleted file mode 100644
index 4763433..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/btn-small-on.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/btn-small-on@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/btn-small-on@2x.png
deleted file mode 100644
index 2b8fca2..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/btn-small-on@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/btn-small.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/btn-small.png
deleted file mode 100644
index 0c95e6e..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/btn-small.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/btn-small@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/btn-small@2x.png
deleted file mode 100644
index 3985eee..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/btn-small@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/circle.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/circle.png
deleted file mode 100644
index a007d54..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/circle.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/classic/tab-active.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/classic/tab-active.png
deleted file mode 100644
index 5835373..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/classic/tab-active.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/classic/tab-active@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/classic/tab-active@2x.png
deleted file mode 100644
index 7b33a92..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/classic/tab-active@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/classic/tab-hover.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/classic/tab-hover.png
deleted file mode 100644
index f62088a..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/classic/tab-hover.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/classic/tab-hover@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/classic/tab-hover@2x.png
deleted file mode 100644
index af5e4fa..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/classic/tab-hover@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/classic/tab-inactive.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/classic/tab-inactive.png
deleted file mode 100644
index b228738..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/classic/tab-inactive.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/classic/tab-inactive@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/classic/tab-inactive@2x.png
deleted file mode 100644
index f7debe5..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/classic/tab-inactive@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/dot.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/dot.png
deleted file mode 100644
index 0216b46..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/dot.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/file-close-hover.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/file-close-hover.png
deleted file mode 100644
index 2905761..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/file-close-hover.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/file-close-hover@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/file-close-hover@2x.png
deleted file mode 100644
index 6dd2b02..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/file-close-hover@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/file-close-selected.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/file-close-selected.png
deleted file mode 100644
index 5e38529..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/file-close-selected.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/file-close-selected@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/file-close-selected@2x.png
deleted file mode 100644
index 9852d56..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/file-close-selected@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/file-close.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/file-close.png
deleted file mode 100644
index 0c342be..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/file-close.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/file-close@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/file-close@2x.png
deleted file mode 100644
index f04cf86..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/file-close@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/file-dirty-selected.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/file-dirty-selected.png
deleted file mode 100644
index f79a4a8..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/file-dirty-selected.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/file-dirty-selected@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/file-dirty-selected@2x.png
deleted file mode 100644
index dddf043..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/file-dirty-selected@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/file-dirty.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/file-dirty.png
deleted file mode 100644
index 8edd2e1..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/file-dirty.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/file-dirty@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/file-dirty@2x.png
deleted file mode 100644
index 3fa444c..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/file-dirty@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/fold-closed-hover.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/fold-closed-hover.png
deleted file mode 100644
index a2c3c03..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/fold-closed-hover.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/fold-closed-hover@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/fold-closed-hover@2x.png
deleted file mode 100644
index 40539a3..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/fold-closed-hover@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/fold-closed.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/fold-closed.png
deleted file mode 100644
index 9a22f7b..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/fold-closed.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/fold-closed@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/fold-closed@2x.png
deleted file mode 100644
index 32cbcf3..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/fold-closed@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/fold-open-hover.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/fold-open-hover.png
deleted file mode 100644
index 55d88a8..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/fold-open-hover.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/fold-open-hover@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/fold-open-hover@2x.png
deleted file mode 100644
index 71cdf1d..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/fold-open-hover@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/fold-open.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/fold-open.png
deleted file mode 100644
index c695b22..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/fold-open.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/fold-open@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/fold-open@2x.png
deleted file mode 100644
index 113fc26..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/fold-open@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/fold.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/fold.png
deleted file mode 100644
index 8008475..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/fold.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/folder-closed-hover.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/folder-closed-hover.png
deleted file mode 100644
index 8934679..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/folder-closed-hover.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/folder-closed-hover@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/folder-closed-hover@2x.png
deleted file mode 100644
index a5e4694..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/folder-closed-hover@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/folder-closed-selected.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/folder-closed-selected.png
deleted file mode 100644
index 8089d03..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/folder-closed-selected.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/folder-closed-selected@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/folder-closed-selected@2x.png
deleted file mode 100644
index 13c2e24..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/folder-closed-selected@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/folder-closed.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/folder-closed.png
deleted file mode 100644
index 4d2dfcf..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/folder-closed.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/folder-closed@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/folder-closed@2x.png
deleted file mode 100644
index 717d217..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/folder-closed@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/folder-open-hover.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/folder-open-hover.png
deleted file mode 100644
index 702caa4..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/folder-open-hover.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/folder-open-hover@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/folder-open-hover@2x.png
deleted file mode 100644
index 7a75ce3..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/folder-open-hover@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/folder-open-selected.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/folder-open-selected.png
deleted file mode 100644
index b8f9bd6..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/folder-open-selected.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/folder-open-selected@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/folder-open-selected@2x.png
deleted file mode 100644
index 045460e..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/folder-open-selected@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/folder-open.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/folder-open.png
deleted file mode 100644
index bf450fe..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/folder-open.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/folder-open@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/folder-open@2x.png
deleted file mode 100644
index 27872ff..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/folder-open@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/group-closed-hover.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/group-closed-hover.png
deleted file mode 100644
index 8daa831..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/group-closed-hover.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/group-closed-hover@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/group-closed-hover@2x.png
deleted file mode 100644
index 9cd434e..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/group-closed-hover@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/group-closed-selected.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/group-closed-selected.png
deleted file mode 100644
index 6e9f19c..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/group-closed-selected.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/group-closed-selected@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/group-closed-selected@2x.png
deleted file mode 100644
index ed2726e..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/group-closed-selected@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/group-closed.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/group-closed.png
deleted file mode 100644
index f85890a..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/group-closed.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/group-closed@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/group-closed@2x.png
deleted file mode 100644
index 6d4e995..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/group-closed@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/group-open-hover.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/group-open-hover.png
deleted file mode 100644
index a58f50b..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/group-open-hover.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/group-open-hover@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/group-open-hover@2x.png
deleted file mode 100644
index d3298f4..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/group-open-hover@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/group-open-selected.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/group-open-selected.png
deleted file mode 100644
index 70c63f4..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/group-open-selected.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/group-open-selected@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/group-open-selected@2x.png
deleted file mode 100644
index 9d9c733..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/group-open-selected@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/group-open.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/group-open.png
deleted file mode 100644
index 96a2091..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/group-open.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/group-open@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/group-open@2x.png
deleted file mode 100644
index 57e5a99..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/group-open@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-buffer-off.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-buffer-off.png
deleted file mode 100644
index c35b86e..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-buffer-off.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-buffer-off@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-buffer-off@2x.png
deleted file mode 100644
index d43a110..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-buffer-off@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-buffer-on.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-buffer-on.png
deleted file mode 100644
index c92b7d3..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-buffer-on.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-buffer-on@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-buffer-on@2x.png
deleted file mode 100644
index b6e79fd..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-buffer-on@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-case-off.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-case-off.png
deleted file mode 100644
index 03e980d..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-case-off.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-case-off@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-case-off@2x.png
deleted file mode 100644
index ee83912..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-case-off@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-case-on.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-case-on.png
deleted file mode 100644
index 70f33a5..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-case-on.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-case-on@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-case-on@2x.png
deleted file mode 100644
index 6d4fcc0..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-case-on@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-context-off.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-context-off.png
deleted file mode 100644
index 7db1bc4..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-context-off.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-context-off@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-context-off@2x.png
deleted file mode 100644
index 2a0557c..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-context-off@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-context-on.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-context-on.png
deleted file mode 100644
index 4807bf1..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-context-on.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-context-on@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-context-on@2x.png
deleted file mode 100644
index 06edcb4..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-context-on@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-highlight-off.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-highlight-off.png
deleted file mode 100644
index a6e5498..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-highlight-off.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-highlight-off@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-highlight-off@2x.png
deleted file mode 100644
index e8d1a84..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-highlight-off@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-highlight-on.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-highlight-on.png
deleted file mode 100644
index 7891125..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-highlight-on.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-highlight-on@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-highlight-on@2x.png
deleted file mode 100644
index b0e05cd..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-highlight-on@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-preserve-off.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-preserve-off.png
deleted file mode 100644
index 1b94814..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-preserve-off.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-preserve-off@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-preserve-off@2x.png
deleted file mode 100644
index e7e60ba..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-preserve-off@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-preserve-on.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-preserve-on.png
deleted file mode 100644
index 632caa0..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-preserve-on.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-preserve-on@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-preserve-on@2x.png
deleted file mode 100644
index 801023b..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-preserve-on@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-regex-off.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-regex-off.png
deleted file mode 100644
index ed11298..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-regex-off.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-regex-off@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-regex-off@2x.png
deleted file mode 100644
index 62a7ab7..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-regex-off@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-regex-on.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-regex-on.png
deleted file mode 100644
index 1feb2d6..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-regex-on.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-regex-on@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-regex-on@2x.png
deleted file mode 100644
index 5c2ee44..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-regex-on@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-reverse-off.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-reverse-off.png
deleted file mode 100644
index 91a13b6..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-reverse-off.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-reverse-off@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-reverse-off@2x.png
deleted file mode 100644
index c0f0af4..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-reverse-off@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-reverse-on.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-reverse-on.png
deleted file mode 100644
index 5980b03..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-reverse-on.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-reverse-on@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-reverse-on@2x.png
deleted file mode 100644
index c9d9738..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-reverse-on@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-selection-off.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-selection-off.png
deleted file mode 100644
index efc00dc..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-selection-off.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-selection-off@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-selection-off@2x.png
deleted file mode 100644
index 911c8b8..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-selection-off@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-selection-on.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-selection-on.png
deleted file mode 100644
index 19aac38..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-selection-on.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-selection-on@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-selection-on@2x.png
deleted file mode 100644
index ae56d56..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-selection-on@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-word-off.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-word-off.png
deleted file mode 100644
index 3ac7ad7..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-word-off.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-word-off@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-word-off@2x.png
deleted file mode 100644
index c643e1f..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-word-off@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-word-on.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-word-on.png
deleted file mode 100644
index 91480ab..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-word-on.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-word-on@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-word-on@2x.png
deleted file mode 100644
index e7c6f33..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-word-on@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-wrap-off.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-wrap-off.png
deleted file mode 100644
index 92a65d4..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-wrap-off.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-wrap-off@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-wrap-off@2x.png
deleted file mode 100644
index 23a4c17..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-wrap-off@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-wrap-on.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-wrap-on.png
deleted file mode 100644
index a781406..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-wrap-on.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-wrap-on@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-wrap-on@2x.png
deleted file mode 100644
index 867d810..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/icon-wrap-on@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/overlay-dark-puck-horizontal.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/overlay-dark-puck-horizontal.png
deleted file mode 100644
index 762e5a7..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/overlay-dark-puck-horizontal.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/overlay-dark-puck-horizontal@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/overlay-dark-puck-horizontal@2x.png
deleted file mode 100644
index 166aba8..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/overlay-dark-puck-horizontal@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/overlay-dark-puck-vertical.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/overlay-dark-puck-vertical.png
deleted file mode 100644
index f2c4047..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/overlay-dark-puck-vertical.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/overlay-dark-puck-vertical@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/overlay-dark-puck-vertical@2x.png
deleted file mode 100644
index 7f22be6..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/overlay-dark-puck-vertical@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/overlay-puck-horizontal.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/overlay-puck-horizontal.png
deleted file mode 100644
index 4b677dc..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/overlay-puck-horizontal.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/overlay-puck-horizontal@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/overlay-puck-horizontal@2x.png
deleted file mode 100644
index 3ee8fee..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/overlay-puck-horizontal@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/overlay-puck-vertical.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/overlay-puck-vertical.png
deleted file mode 100644
index 1603bad..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/overlay-puck-vertical.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/overlay-puck-vertical@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/overlay-puck-vertical@2x.png
deleted file mode 100644
index 7aebfa6..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/overlay-puck-vertical@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/overlay-scrollbar-horizontal.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/overlay-scrollbar-horizontal.png
deleted file mode 100644
index be64d27..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/overlay-scrollbar-horizontal.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/overlay-scrollbar-horizontal@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/overlay-scrollbar-horizontal@2x.png
deleted file mode 100644
index 0bbd1cb..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/overlay-scrollbar-horizontal@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/overlay-scrollbar-vertical.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/overlay-scrollbar-vertical.png
deleted file mode 100644
index 70100d0..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/overlay-scrollbar-vertical.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/overlay-scrollbar-vertical@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/overlay-scrollbar-vertical@2x.png
deleted file mode 100644
index e860a90..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/overlay-scrollbar-vertical@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/panel-background.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/panel-background.png
deleted file mode 100644
index b92b2b9..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/panel-background.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/panel-background@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/panel-background@2x.png
deleted file mode 100644
index e7b5f99..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/panel-background@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/panel-close-pressed.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/panel-close-pressed.png
deleted file mode 100644
index 3af0941..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/panel-close-pressed.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/panel-close-pressed@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/panel-close-pressed@2x.png
deleted file mode 100644
index 19cc98e..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/panel-close-pressed@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/panel-close.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/panel-close.png
deleted file mode 100644
index 9d53a68..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/panel-close.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/panel-close@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/panel-close@2x.png
deleted file mode 100644
index 1f06ed6..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/panel-close@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/quick-panel-background-fix.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/quick-panel-background-fix.png
deleted file mode 100644
index ceb6c74..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/quick-panel-background-fix.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/quick-panel-background-fix@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/quick-panel-background-fix@2x.png
deleted file mode 100644
index e91a68c..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/quick-panel-background-fix@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/quick-panel-background.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/quick-panel-background.png
deleted file mode 100644
index 398d444..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/quick-panel-background.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/quick-panel-background@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/quick-panel-background@2x.png
deleted file mode 100644
index 712178d..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/quick-panel-background@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/quick-panel-row-selected.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/quick-panel-row-selected.png
deleted file mode 100644
index c7ba57b..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/quick-panel-row-selected.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/quick-panel-row-selected@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/quick-panel-row-selected@2x.png
deleted file mode 100644
index 753e68f..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/quick-panel-row-selected@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/quick-panel-row.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/quick-panel-row.png
deleted file mode 100644
index 6caef9d..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/quick-panel-row.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/quick-panel-row@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/quick-panel-row@2x.png
deleted file mode 100644
index 4d1faff..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/quick-panel-row@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/quick-panel-sections-fix.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/quick-panel-sections-fix.png
deleted file mode 100644
index 5f10806..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/quick-panel-sections-fix.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/quick-panel-sections-fix@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/quick-panel-sections-fix@2x.png
deleted file mode 100644
index 3632e34..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/quick-panel-sections-fix@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/quick-panel-sections.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/quick-panel-sections.png
deleted file mode 100644
index 70c7838..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/quick-panel-sections.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/quick-panel-sections@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/quick-panel-sections@2x.png
deleted file mode 100644
index 184c512..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/quick-panel-sections@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/sidebar-bg.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/sidebar-bg.png
deleted file mode 100644
index 70abafa..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/sidebar-bg.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/sidebar-bg@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/sidebar-bg@2x.png
deleted file mode 100644
index 68c1315..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/sidebar-bg@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/sidebar-row-selected.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/sidebar-row-selected.png
deleted file mode 100644
index e043cb1..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/sidebar-row-selected.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/sidebar-row-selected@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/sidebar-row-selected@2x.png
deleted file mode 100644
index 959fe75..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/sidebar-row-selected@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/standard-puck-horizontal.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/standard-puck-horizontal.png
deleted file mode 100644
index 318b08e..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/standard-puck-horizontal.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/standard-puck-horizontal@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/standard-puck-horizontal@2x.png
deleted file mode 100644
index 5dac081..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/standard-puck-horizontal@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/standard-puck-vertical.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/standard-puck-vertical.png
deleted file mode 100644
index ee5401e..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/standard-puck-vertical.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/standard-puck-vertical@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/standard-puck-vertical@2x.png
deleted file mode 100644
index ede9da9..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/standard-puck-vertical@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/standard-scrollbar-corner.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/standard-scrollbar-corner.png
deleted file mode 100644
index 9148079..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/standard-scrollbar-corner.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/standard-scrollbar-corner@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/standard-scrollbar-corner@2x.png
deleted file mode 100644
index b9db402..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/standard-scrollbar-corner@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/standard-scrollbar-horizontal.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/standard-scrollbar-horizontal.png
deleted file mode 100644
index 80ea3df..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/standard-scrollbar-horizontal.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/standard-scrollbar-horizontal@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/standard-scrollbar-horizontal@2x.png
deleted file mode 100644
index 00c1a3b..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/standard-scrollbar-horizontal@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/standard-scrollbar-vertical.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/standard-scrollbar-vertical.png
deleted file mode 100644
index dbf4dd0..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/standard-scrollbar-vertical.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/standard-scrollbar-vertical@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/standard-scrollbar-vertical@2x.png
deleted file mode 100644
index d604dac..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/standard-scrollbar-vertical@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/status-bar-background.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/status-bar-background.png
deleted file mode 100644
index 4eab5f3..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/status-bar-background.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/status-bar-background@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/status-bar-background@2x.png
deleted file mode 100644
index d8126c8..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/status-bar-background@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tab-active.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tab-active.png
deleted file mode 100644
index 72fd2e9..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tab-active.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tab-active@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tab-active@2x.png
deleted file mode 100644
index 0f78299..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tab-active@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tab-close-hover.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tab-close-hover.png
deleted file mode 100644
index 0d37ca3..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tab-close-hover.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tab-close-hover@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tab-close-hover@2x.png
deleted file mode 100644
index 66791d8..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tab-close-hover@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tab-close-inactive.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tab-close-inactive.png
deleted file mode 100644
index c45c727..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tab-close-inactive.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tab-close-inactive@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tab-close-inactive@2x.png
deleted file mode 100644
index 34ccdf5..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tab-close-inactive@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tab-close-pressed.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tab-close-pressed.png
deleted file mode 100644
index 2cf0633..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tab-close-pressed.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tab-close-pressed@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tab-close-pressed@2x.png
deleted file mode 100644
index dad7a93..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tab-close-pressed@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tab-close.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tab-close.png
deleted file mode 100644
index c45c727..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tab-close.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tab-close@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tab-close@2x.png
deleted file mode 100644
index 34ccdf5..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tab-close@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tab-dirty-inactive.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tab-dirty-inactive.png
deleted file mode 100644
index 95003f0..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tab-dirty-inactive.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tab-dirty-inactive@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tab-dirty-inactive@2x.png
deleted file mode 100644
index aed1da1..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tab-dirty-inactive@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tab-dirty.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tab-dirty.png
deleted file mode 100644
index 9eb7ea1..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tab-dirty.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tab-dirty@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tab-dirty@2x.png
deleted file mode 100644
index f388264..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tab-dirty@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tab-highlight-inactive.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tab-highlight-inactive.png
deleted file mode 100644
index 9c715ca..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tab-highlight-inactive.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tab-highlight-inactive@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tab-highlight-inactive@2x.png
deleted file mode 100644
index 028b26f..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tab-highlight-inactive@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tab-highlight.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tab-highlight.png
deleted file mode 100644
index c9a28b8..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tab-highlight.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tab-highlight@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tab-highlight@2x.png
deleted file mode 100644
index 2d53da8..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tab-highlight@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tab-hover.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tab-hover.png
deleted file mode 100644
index b5c4c7c..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tab-hover.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tab-hover@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tab-hover@2x.png
deleted file mode 100644
index d7d17f0..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tab-hover@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tab-inactive.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tab-inactive.png
deleted file mode 100644
index 00ccf2d..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tab-inactive.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tab-inactive@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tab-inactive@2x.png
deleted file mode 100644
index c20d292..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tab-inactive@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tabset-background.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tabset-background.png
deleted file mode 100644
index 04e7b5a..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tabset-background.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tabset-background@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tabset-background@2x.png
deleted file mode 100644
index c2bdeba..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tabset-background@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tabset-left-hover.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tabset-left-hover.png
deleted file mode 100644
index fd585a5..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tabset-left-hover.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tabset-left-hover@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tabset-left-hover@2x.png
deleted file mode 100644
index d335314..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tabset-left-hover@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tabset-left.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tabset-left.png
deleted file mode 100644
index 58e1d80..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tabset-left.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tabset-left@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tabset-left@2x.png
deleted file mode 100644
index 2f70fb6..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tabset-left@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tabset-list-hover.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tabset-list-hover.png
deleted file mode 100644
index 16f0b8d..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tabset-list-hover.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tabset-list-hover@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tabset-list-hover@2x.png
deleted file mode 100644
index eff9636..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tabset-list-hover@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tabset-list.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tabset-list.png
deleted file mode 100644
index 67e28bd..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tabset-list.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tabset-list@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tabset-list@2x.png
deleted file mode 100644
index c11f5bc..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tabset-list@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tabset-right-hover.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tabset-right-hover.png
deleted file mode 100644
index a9fa486..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tabset-right-hover.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tabset-right-hover@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tabset-right-hover@2x.png
deleted file mode 100644
index cc34076..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tabset-right-hover@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tabset-right.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tabset-right.png
deleted file mode 100644
index 16f47a1..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tabset-right.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tabset-right@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tabset-right@2x.png
deleted file mode 100644
index 9c25eb2..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tabset-right@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/text-field-list-hover.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/text-field-list-hover.png
deleted file mode 100644
index de44bc9..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/text-field-list-hover.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/text-field-list-hover@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/text-field-list-hover@2x.png
deleted file mode 100644
index 9825e0a..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/text-field-list-hover@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/text-field-list.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/text-field-list.png
deleted file mode 100644
index 03762fd..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/text-field-list.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/text-field-list@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/text-field-list@2x.png
deleted file mode 100644
index f16b2c0..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/text-field-list@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/text-field.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/text-field.png
deleted file mode 100644
index c85556e..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/text-field.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/text-field@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/text-field@2x.png
deleted file mode 100644
index cc19f14..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/text-field@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tooltip.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tooltip.png
deleted file mode 100644
index 63faab6..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tooltip.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tooltip@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tooltip@2x.png
deleted file mode 100644
index 1cccaa6..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Dark/tooltip@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light 3.sublime-theme b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light 3.sublime-theme
deleted file mode 100644
index 3fe7ff0..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light 3.sublime-theme
+++ /dev/null
@@ -1,1160 +0,0 @@
-[
-
-//
-// TABS (REGULAR)
-//
-
- // Tab set
- {
- "class": "tabset_control",
- "layer0.texture": "Theme - Soda/Soda Light/tabset-background.png",
- "layer0.inner_margin": [1, 7],
- "layer0.opacity": 1.0,
- "content_margin": [-4, 0, -4, 3],
- "tab_overlap": 5,
- "tab_width": 180,
- "tab_min_width": 45,
- "tab_height": 25,
- "mouse_wheel_switch": false
- },
- {
- "class": "tabset_control",
- "settings": ["enable_tab_scrolling"],
- "content_margin": [3, 0, 3, 3]
- },
- {
- "class": "tabset_control",
- "settings": ["mouse_wheel_switches_tabs"],
- "mouse_wheel_switch": true
- },
- // Tab element
- {
- "class": "tab_control",
- "content_margin": [12, 3, 12, 3],
- "max_margin_trim": 0,
- "hit_test_level": 0.0,
- "layer0.texture": "Theme - Soda/Soda Light/tab-inactive.png",
- "layer0.inner_margin": [5, 5],
- "layer0.opacity": 1.0
- },
- // Tab close state
- {
- "class": "tab_control",
- "settings": ["show_tab_close_buttons"],
- "content_margin": [12, 3, 7, 3]
- },
- // Tab hover state
- {
- "class": "tab_control",
- "attributes": ["hover"],
- "layer0.texture": "Theme - Soda/Soda Light/tab-hover.png"
- },
- // Tab active state
- {
- "class": "tab_control",
- "attributes": ["selected"],
- "layer0.texture": "Theme - Soda/Soda Light/tab-active.png"
- },
- // Tab dirty state (close button hidden)
- {
- "class": "tab_control",
- "settings": ["!show_tab_close_buttons"],
- "attributes": ["dirty"],
- "content_margin": [12, 3, 7, 3]
- },
-
-//
-// TABS (CLASSIC)
-//
-
- // Tab set
- {
- "class": "tabset_control",
- "settings": ["soda_classic_tabs"],
- "content_margin": [3, 4, 3, 3],
- "tab_overlap": 24,
- "tab_height": 28
- },
- {
- "class": "tabset_control",
- "settings": ["soda_classic_tabs", "enable_tab_scrolling"],
- "content_margin": [6, 4, 6, 3]
- },
- // Tab element
- {
- "class": "tab_control",
- "settings": ["soda_classic_tabs"],
- "content_margin": [22, 6, 22, 4],
- "hit_test_level": 0.5,
- "layer0.texture": "Theme - Soda/Soda Light/classic/tab-inactive.png",
- "layer0.inner_margin": [18, 4]
- },
- // Tab close state
- {
- "class": "tab_control",
- "settings": ["soda_classic_tabs", "show_tab_close_buttons"],
- "content_margin": [22, 6, 15, 4]
- },
- // Tab hover state
- {
- "class": "tab_control",
- "settings": ["soda_classic_tabs"],
- "attributes": ["hover"],
- "layer0.texture": "Theme - Soda/Soda Light/classic/tab-hover.png"
- },
- // Tab active state
- {
- "class": "tab_control",
- "settings": ["soda_classic_tabs"],
- "attributes": ["selected"],
- "layer0.texture": "Theme - Soda/Soda Light/classic/tab-active.png"
- },
- // Tab dirty state (close button hidden)
- {
- "class": "tab_control",
- "settings": ["soda_classic_tabs", "!show_tab_close_buttons"],
- "attributes": ["dirty"],
- "content_margin": [22, 6, 15, 4]
- },
-
-//
-// TAB BUTTONS
-//
-
- // Tab close button
- {
- "class": "tab_close_button",
- "content_margin": [0, 0],
- "layer0.texture": "Theme - Soda/Soda Light/tab-close-inactive.png",
- "layer0.opacity": 1.0,
- "layer0.inner_margin": 0
- },
- {
- "class": "tab_close_button",
- "settings": ["show_tab_close_buttons"],
- "content_margin": [8, 8]
- },
- {
- "class": "tab_close_button",
- "parents": [{"class": "tab_control", "attributes": ["hover"]}],
- "layer0.texture": "Theme - Soda/Soda Light/tab-close.png",
- "layer0.opacity": 0.85
- },
- {
- "class": "tab_close_button",
- "parents": [{"class": "tab_control", "attributes": ["selected"]}],
- "layer0.texture": "Theme - Soda/Soda Light/tab-close.png",
- "layer0.opacity": 1.0
- },
- // Tab dirty button
- {
- "class": "tab_close_button",
- "parents": [{"class": "tab_control", "attributes": ["dirty"]}],
- "layer0.texture": "Theme - Soda/Soda Light/tab-dirty-inactive.png"
- },
- {
- "class": "tab_close_button",
- "settings": ["!show_tab_close_buttons"],
- "parents": [{"class": "tab_control", "attributes": ["dirty"]}],
- "content_margin": [8, 8]
- },
- {
- "class": "tab_close_button",
- "parents": [{"class": "tab_control", "attributes": ["dirty", "hover"]}],
- "layer0.opacity": 1.0
- },
- {
- "class": "tab_close_button",
- "parents": [{"class": "tab_control", "attributes": ["dirty", "selected"]}],
- "layer0.texture": "Theme - Soda/Soda Light/tab-dirty.png"
- },
- // Tab highlight button
- {
- "class": "tab_close_button",
- "settings": ["highlight_modified_tabs"],
- "parents": [{"class": "tab_control", "attributes": ["dirty"]}],
- "layer0.texture": "Theme - Soda/Soda Light/tab-highlight-inactive.png"
- },
- {
- "class": "tab_close_button",
- "settings": ["highlight_modified_tabs"],
- "parents": [{"class": "tab_control", "attributes": ["dirty", "selected"]}],
- "layer0.texture": "Theme - Soda/Soda Light/tab-highlight.png"
- },
- // Tab close button hover
- {
- "class": "tab_close_button",
- "settings": ["show_tab_close_buttons"],
- "attributes": ["hover"],
- "layer0.texture": "Theme - Soda/Soda Light/tab-close-hover.png"
- },
- // Tab close button pressed
- {
- "class": "tab_close_button",
- "settings": ["show_tab_close_buttons"],
- "attributes": ["pressed"],
- "layer0.texture": "Theme - Soda/Soda Light/tab-close-pressed.png"
- },
-
-//
-// TAB LABELS
-//
-
- {
- "class": "tab_label",
- "fade": true,
- "fg": [50, 50, 50],
- "shadow_color": [235, 235, 235],
- "shadow_offset": [0, 1],
- "font.italic": false
- },
- {
- "class": "tab_label",
- "parents": [{"class": "tab_control", "attributes": ["hover"]}],
- "fg": [25, 25, 25],
- "shadow_color": [245, 245, 245]
- },
- {
- "class": "tab_label",
- "parents": [{"class": "tab_control", "attributes": ["selected"]}],
- "fg": [0, 0, 0],
- "shadow_color": [255, 255, 255]
- },
- {
- "class": "tab_label",
- "attributes": ["transient"],
- "font.italic": true
- },
-
-//
-// TAB SCROLLING
-//
-
- // Tab dropdown
- {
- "class": "show_tabs_dropdown_button",
- "content_margin": [9, 7, 8, 6],
- "layer0.texture": "Theme - Soda/Soda Light/tabset-list.png",
- "layer0.opacity": 1.0,
- "layer0.inner_margin": 0
- },
- {
- "class": "show_tabs_dropdown_button",
- "attributes": ["hover"],
- "layer0.texture": "Theme - Soda/Soda Light/tabset-list-hover.png"
- },
- // Tab scroll left
- {
- "class": "scroll_tabs_left_button",
- "content_margin": [9, 7, 8, 6],
- "layer0.texture": "Theme - Soda/Soda Light/tabset-left.png",
- "layer0.opacity": 1.0,
- "layer0.inner_margin": 0
- },
- {
- "class": "scroll_tabs_left_button",
- "attributes": ["hover"],
- "layer0.texture": "Theme - Soda/Soda Light/tabset-left-hover.png"
- },
- // Tab scroll right
- {
- "class": "scroll_tabs_right_button",
- "content_margin": [9, 7, 8, 6],
- "layer0.texture": "Theme - Soda/Soda Light/tabset-right.png",
- "layer0.opacity": 1.0,
- "layer0.inner_margin": 0
- },
- {
- "class": "scroll_tabs_right_button",
- "attributes": ["hover"],
- "layer0.texture": "Theme - Soda/Soda Light/tabset-right-hover.png"
- },
-
-//
-// FOLD BUTTONS
-//
-
- {
- "class": "fold_button_control",
- "layer0.texture": "Theme - Soda/Soda Light/fold-closed.png",
- "layer0.opacity": 1.0,
- "layer0.inner_margin": 0,
- "content_margin": [8, 8]
- },
- {
- "class": "fold_button_control",
- "attributes": ["hover"],
- "layer0.texture": "Theme - Soda/Soda Light/fold-closed-hover.png"
- },
- {
- "class": "fold_button_control",
- "attributes": ["expanded"],
- "layer0.texture": "Theme - Soda/Soda Light/fold-open.png"
- },
- {
- "class": "fold_button_control",
- "attributes": ["expanded", "hover"],
- "layer0.texture": "Theme - Soda/Soda Light/fold-open-hover.png"
- },
-
-//
-// STANDARD SCROLLBARS
-//
-
- // Standard vertical scroll bar
- {
- "class": "scroll_bar_control",
- "layer0.texture": "Theme - Soda/Soda Light/standard-scrollbar-vertical.png",
- "layer0.opacity": 1.0,
- "layer0.inner_margin": [2, 6],
- "blur": false
- },
- // Standard horizontal scroll bar
- {
- "class": "scroll_bar_control",
- "attributes": ["horizontal"],
- "layer0.texture": "Theme - Soda/Soda Light/standard-scrollbar-horizontal.png",
- "layer0.inner_margin": [6, 2],
- "blur": false
- },
- // Standard scroll bar corner
- {
- "class": "scroll_corner_control",
- "layer0.texture": "Theme - Soda/Soda Light/standard-scrollbar-corner.png",
- "layer0.inner_margin": [2, 2],
- "layer0.opacity": 1.0
- },
- // Standard vertical scroll puck
- {
- "class": "puck_control",
- "layer0.texture": "Theme - Soda/Soda Light/standard-puck-vertical.png",
- "layer0.opacity": 1.0,
- "layer0.inner_margin": [0, 10],
- "content_margin": [8, 12],
- "blur": false
- },
- // Standard horizontal scroll puck
- {
- "class": "puck_control",
- "attributes": ["horizontal"],
- "layer0.texture": "Theme - Soda/Soda Light/standard-puck-horizontal.png",
- "layer0.inner_margin": [10, 0],
- "content_margin": [12, 8],
- "blur": false
- },
-
-//
-// OVERLAY SCROLLBARS
-//
-
- // Overlay toggle scroll bar
- {
- "class": "scroll_area_control",
- "settings": ["overlay_scroll_bars"],
- "overlay": true
- },
- {
- "class": "scroll_area_control",
- "settings": ["!overlay_scroll_bars"],
- "overlay": false
- },
- // Overlay vertical scroll bar
- {
- "class": "scroll_bar_control",
- "settings": ["overlay_scroll_bars"],
- "layer0.texture": "Theme - Soda/Soda Light/overlay-scrollbar-vertical.png",
- "layer0.inner_margin": [0, 5],
- "blur": true
- },
- // Overlay horizontal scroll bar
- {
- "class": "scroll_bar_control",
- "settings": ["overlay_scroll_bars"],
- "attributes": ["horizontal"],
- "layer0.texture": "Theme - Soda/Soda Light/overlay-scrollbar-horizontal.png",
- "layer0.inner_margin": [5, 0],
- "blur": true
- },
- // Overlay vertical puck
- {
- "class": "puck_control",
- "settings": ["overlay_scroll_bars"],
- "layer0.texture": "Theme - Soda/Soda Light/overlay-puck-vertical.png",
- "layer0.inner_margin": [0, 5],
- "content_margin": [5, 20],
- "blur": true
- },
- // Overlay horizontal puck
- {
- "class": "puck_control",
- "settings": ["overlay_scroll_bars"],
- "attributes": ["horizontal"],
- "layer0.texture": "Theme - Soda/Soda Light/overlay-puck-horizontal.png",
- "layer0.inner_margin": [5, 0],
- "content_margin": [20, 5],
- "blur": true
- },
- // Overlay light puck (for dark content)
- {
- "class": "puck_control",
- "settings": ["overlay_scroll_bars"],
- "attributes": ["dark"],
- "layer0.texture": "Theme - Soda/Soda Light/overlay-dark-puck-vertical.png"
- },
- // Overlay light horizontal puck (for dark content)
- {
- "class": "puck_control",
- "settings": ["overlay_scroll_bars"],
- "attributes": ["horizontal", "dark"],
- "layer0.texture": "Theme - Soda/Soda Light/overlay-dark-puck-horizontal.png"
- },
-
-//
-// EMPTY WINDOW BACKGROUND
-//
-
- {
- "class": "sheet_container_control",
- "layer0.tint": [255, 255, 255],
- "layer0.opacity": 1.0
- },
-
-//
-// GRID LAYOUT
-//
-
- {
- "class": "grid_layout_control",
- "border_size": 1,
- "border_color": [189, 189, 189]
- },
-
-//
-// MINI MAP
-//
-
- {
- "class": "minimap_control",
- "settings": ["always_show_minimap_viewport"],
- "viewport_color": [0, 0, 0, 35],
- "viewport_opacity": 1.0
- },
- {
- "class": "minimap_control",
- "settings": ["!always_show_minimap_viewport"],
- "viewport_color": [0, 0, 0, 35],
- "viewport_opacity": { "target": 0.0, "speed": 10.0, "interpolation": "smoothstep" }
- },
- {
- "class": "minimap_control",
- "attributes": ["hover"],
- "settings": ["!always_show_minimap_viewport"],
- "viewport_opacity": 1.0
- },
-
-//
-// DIALOG
-//
-
- {
- "class": "dialog",
- "layer0.tint": [238, 238, 238],
- "layer0.opacity": 1.0
- },
-
-//
-// PROGRESS BAR
-//
-
- {
- "class": "progress_bar_control",
- "layer0.tint": [193, 193, 193],
- "layer0.opacity": 1.0
- },
- {
- "class": "progress_gauge_control",
- "layer0.tint": [70, 160, 225],
- "layer0.opacity": 1.0,
- "content_margin": [0, 6]
- },
-
-//
-// LABELS
-//
-
- // General labels
- {
- "class": "label_control",
- "color": [0, 0, 0]
- },
- // Text field labels
- {
- "class": "label_control",
- "parents": [{"class": "panel_control"}],
- "shadow_color": [250, 250, 250],
- "shadow_offset": [0, 1]
- },
- // Button labels
- {
- "class": "label_control",
- "parents": [{"class": "button_control"}],
- "shadow_color": [245, 245, 245],
- "shadow_offset": [0, 1]
- },
-
-//
-// TOOLTIP
-//
-
- // Tooltip container
- {
- "class": "tool_tip_control",
- "layer0.texture": "Theme - Soda/Soda Light/tooltip.png",
- "layer0.inner_margin": [1, 1],
- "layer0.opacity": 0.95,
- "content_margin": [3, 3]
- },
- // Tooltip content
- {
- "class": "tool_tip_label_control",
- "color": [0, 0, 0]
- },
-
-//
-// STATUS BAR
-//
-
- // Status bar container
- {
- "class": "status_bar",
- "layer0.texture": "Theme - Soda/Soda Light/status-bar-background.png",
- "layer0.opacity": 1.0,
- "layer0.inner_margin": [2, 2],
- "content_margin": [8, 4, 8, 4]
- },
- // Status bar button
- {
- "class": "status_button",
- "min_size": [100, 0]
- },
- // Status bar label
- {
- "class": "label_control",
- "parents": [{"class": "status_bar"}],
- "color": [47, 47, 47],
- "shadow_color": [220, 220, 220],
- "shadow_offset": [0, 1]
- },
-
-//
-// SIDEBAR
-//
-
- // Sidebar container
- {
- "class": "sidebar_container",
- "layer0.texture": "Theme - Soda/Soda Light/sidebar-bg.png",
- "layer0.opacity": 1.0,
- "layer0.inner_margin": [1, 1, 2, 1],
- "content_margin": [0, 0, 1, 0]
- },
- // Sidebar tree
- {
- "class": "sidebar_tree",
- "row_padding": [8, 3],
- "indent": 15,
- "indent_offset": 15,
- "indent_top_level": false
- },
- // Sidebar rows
- {
- "class": "tree_row",
- "layer0.texture": "Theme - Soda/Soda Light/sidebar-row-selected.png",
- "layer0.opacity": 0.0,
- "layer0.inner_margin": [1, 1]
- },
- // Sidebar row selected
- {
- "class": "tree_row",
- "attributes": ["selected"],
- "layer0.opacity": 1.0
- },
- // Sidebar heading
- {
- "class": "sidebar_heading",
- "color": [110, 126, 141],
- "font.bold": true,
- "shadow_color": [249, 250, 252],
- "shadow_offset": [0, 1]
- },
- // Sidebar heading selected
- {
- "class": "sidebar_heading",
- "parents": [{"class": "tree_row", "attributes": ["selected"]}],
- "color": [255, 255, 255],
- "shadow_color": [34, 94, 145]
- },
- // Sidebar entry
- {
- "class": "sidebar_label",
- "color": [0, 0, 0],
- "shadow_color": [241, 244, 247],
- "shadow_offset": [0, 1],
- "font.bold": false,
- "font.italic": false
- },
- // Sidebar folder entry
- {
- "class": "sidebar_label",
- "parents": [{"class": "tree_row", "attributes": ["expandable"]}],
- "color": [70, 86, 102]
- },
- {
- "class": "sidebar_label",
- "parents": [{"class": "tree_row", "attributes": ["expandable", "hover"]}],
- "color": [45, 56, 68]
- },
- {
- "class": "sidebar_label",
- "parents": [{"class": "tree_row", "attributes": ["expandable"]}],
- "settings": ["bold_folder_labels"],
- "color": [110, 126, 141],
- "font.bold": true
- },
- {
- "class": "sidebar_label",
- "parents": [{"class": "tree_row", "attributes": ["expandable", "hover"]}],
- "settings": ["bold_folder_labels"],
- "color": [81, 92, 103]
- },
- // Sidebar entry selected
- {
- "class": "sidebar_label",
- "parents": [{"class": "tree_row", "attributes": ["selected"]}],
- "color": [255, 255, 255],
- "shadow_color": [34, 94, 145],
- "shadow_offset": [0, 1]
- },
- // Sidebar entry transient
- {
- "class": "sidebar_label",
- "attributes": ["transient"],
- "font.italic": true
- },
-
-//
-// SIDEBAR - OPEN FILE ICONS
-//
-
- // Sidebar file close
- {
- "class": "close_button",
- "layer0.texture": "Theme - Soda/Soda Light/file-close.png",
- "layer0.opacity": 0.0,
- "layer0.inner_margin": 0,
- "content_margin": [8, 8]
- },
- {
- "class": "close_button",
- "parents": [{"class": "tree_row", "attributes": ["hover"]}],
- "layer0.opacity": 1.0
- },
- // Sidebar file dirty
- {
- "class": "close_button",
- "attributes": ["dirty"],
- "layer0.texture": "Theme - Soda/Soda Light/file-dirty.png",
- "layer0.opacity": 1.0
- },
- {
- "class": "close_button",
- "attributes": ["dirty"],
- "parents": [{"class": "tree_row", "attributes": ["selected"]}],
- "layer0.texture": "Theme - Soda/Soda Light/file-dirty-selected.png"
- },
- {
- "class": "close_button",
- "attributes": ["dirty"],
- "parents": [{"class": "tree_row", "attributes": ["hover"]}],
- "layer0.texture": "Theme - Soda/Soda Light/file-close.png"
- },
- // Sidebar file close hover
- {
- "class": "close_button",
- "attributes": ["hover"],
- "layer0.texture": "Theme - Soda/Soda Light/file-close-hover.png"
- },
- {
- "class": "close_button",
- "parents": [{"class": "tree_row", "attributes": ["hover", "selected"]}],
- "layer0.texture": "Theme - Soda/Soda Light/file-close-selected.png"
- },
-
-//
-// SIDEBAR - GENERAL FILE ICONS
-//
-
- // Sidebar group closed
- {
- "class": "disclosure_button_control",
- "content_margin": [8, 8],
- "layer0.texture": "Theme - Soda/Soda Light/group-closed.png",
- "layer0.opacity": 1.0,
- "layer0.inner_margin": 0
- },
- {
- "class": "disclosure_button_control",
- "parents": [{"class": "tree_row", "attributes": ["hover"]}],
- "layer0.texture": "Theme - Soda/Soda Light/group-closed-hover.png"
- },
- {
- "class": "disclosure_button_control",
- "parents": [{"class": "tree_row", "attributes": ["selected"]}],
- "layer0.texture": "Theme - Soda/Soda Light/group-closed-selected.png"
- },
- // Sidebar folder closed
- {
- "class": "disclosure_button_control",
- "settings": ["soda_folder_icons"],
- "layer0.texture": "Theme - Soda/Soda Light/folder-closed.png"
- },
- {
- "class": "disclosure_button_control",
- "settings": ["soda_folder_icons"],
- "parents": [{"class": "tree_row", "attributes": ["hover"]}],
- "layer0.texture": "Theme - Soda/Soda Light/folder-closed-hover.png"
- },
- {
- "class": "disclosure_button_control",
- "settings": ["soda_folder_icons"],
- "parents": [{"class": "tree_row", "attributes": ["selected"]}],
- "layer0.texture": "Theme - Soda/Soda Light/folder-closed-selected.png"
- },
- // Sidebar group open
- {
- "class": "disclosure_button_control",
- "attributes": ["expanded"],
- "layer0.texture": "Theme - Soda/Soda Light/group-open.png"
- },
- {
- "class": "disclosure_button_control",
- "attributes": ["expanded"],
- "parents": [{"class": "tree_row", "attributes": ["hover"]}],
- "layer0.texture": "Theme - Soda/Soda Light/group-open-hover.png"
- },
- {
- "class": "disclosure_button_control",
- "attributes": ["expanded"],
- "parents": [{"class": "tree_row", "attributes": ["selected"]}],
- "layer0.texture": "Theme - Soda/Soda Light/group-open-selected.png"
- },
- // Sidebar folder open
- {
- "class": "disclosure_button_control",
- "settings": ["soda_folder_icons"],
- "attributes": ["expanded"],
- "layer0.texture": "Theme - Soda/Soda Light/folder-open.png"
- },
- {
- "class": "disclosure_button_control",
- "settings": ["soda_folder_icons"],
- "attributes": ["expanded"],
- "parents": [{"class": "tree_row", "attributes": ["hover"]}],
- "layer0.texture": "Theme - Soda/Soda Light/folder-open-hover.png"
- },
- {
- "class": "disclosure_button_control",
- "settings": ["soda_folder_icons"],
- "attributes": ["expanded"],
- "parents": [{"class": "tree_row", "attributes": ["selected"]}],
- "layer0.texture": "Theme - Soda/Soda Light/folder-open-selected.png"
- },
-
-//
-// STANDARD TEXT BUTTONS
-//
-
- // Default button state
- {
- "class": "button_control",
- "content_margin": [6, 5, 6, 6],
- "min_size": [75, 0],
- "layer0.texture": "Theme - Soda/Soda Light/btn-large.png",
- "layer0.opacity": 1.0,
- "layer0.inner_margin": [6, 6]
- },
- // Pressed button state
- {
- "class": "button_control",
- "attributes": ["pressed"],
- "layer0.texture": "Theme - Soda/Soda Light/btn-large-on.png"
- },
-
-//
-// TEXT INPUT FIELD
-//
-
- // Text input field item
- {
- "class": "text_line_control",
- "layer0.texture": "Theme - Soda/Soda Light/text-field.png",
- "layer0.opacity": 1.0,
- "layer0.inner_margin": [4, 5, 4, 3],
- "content_margin": [3, 3, 6, 3]
- },
-
- // Text input dropdown
- {
- "class": "dropdown_button_control",
- "content_margin": [8, 8],
- "layer0.texture": "Theme - Soda/Soda Light/text-field-list.png",
- "layer0.opacity": 1.0,
- "layer0.inner_margin": [4, 4]
- },
- {
- "class": "dropdown_button_control",
- "attributes": ["hover"],
- "layer0.texture": "Theme - Soda/Soda Light/text-field-list-hover.png"
- },
-
-//
-// PANEL BACKGROUNDS
-//
-
- // Bottom panel background
- {
- "class": "panel_control",
- "layer0.texture": "Theme - Soda/Soda Light/panel-background.png",
- "layer0.inner_margin": [2, 2, 2, 2],
- "layer0.opacity": 1.0,
- "content_margin": [2, 3, 2, 1]
- },
- // Quick panel background
- {
- "class": "overlay_control",
- "settings": ["!soda_retina_fix"],
- "layer0.texture": "Theme - Soda/Soda Light/quick-panel-background.png",
- "layer0.inner_margin": [12, 6, 12, 15],
- "layer0.opacity": 1.0,
- "layer1.texture": "Theme - Soda/Soda Light/quick-panel-sections.png",
- "layer1.inner_margin": [12, 40, 12, 19],
- "layer1.opacity": 1.0,
- "content_margin": [11, 8, 11, 17]
- },
- // Quick panel background (Retina fix)
- {
- "class": "overlay_control",
- "settings": ["soda_retina_fix"],
- "layer0.tint": [238, 238, 238],
- "layer0.opacity": 1.0,
- "content_margin": [6, 8, 6, 6]
- },
-
-//
-// QUICK PANEL
-//
-
- {
- "class": "quick_panel",
- "row_padding": [5, 2],
- "layer0.tint": [252, 252, 252],
- "layer0.opacity": 1.0
- },
- {
- "class": "quick_panel_row",
- "layer0.texture": "Theme - Soda/Soda Light/quick-panel-row.png",
- "layer0.inner_margin": [2, 2, 2, 2],
- "layer0.opacity": 1.0
- },
- {
- "class": "quick_panel_row",
- "attributes": ["selected"],
- "layer0.texture": "Theme - Soda/Soda Light/quick-panel-row-selected.png"
- },
- {
- "class": "quick_panel_label",
- "fg": [50, 50, 50, 255],
- "match_fg": [0, 0, 0, 255],
- "selected_fg": [25, 25, 25, 255],
- "selected_match_fg": [0, 0, 0, 255]
- },
- {
- "class": "quick_panel_path_label",
- "fg": [150, 150, 150, 255],
- "match_fg": [90, 90, 90, 255],
- "selected_fg": [120, 120, 120, 255],
- "selected_match_fg": [90, 90, 90, 255]
- },
- {
- "class": "quick_panel_score_label",
- "fg": [72, 139, 211, 255],
- "selected_fg": [72, 139, 211, 255]
- },
-
-//
-// MINI QUICK PANEL
-//
-
- {
- "class": "mini_quick_panel_row",
- "layer0.texture": "Theme - Soda/Soda Light/quick-panel-row.png",
- "layer0.inner_margin": [2, 2, 2, 2],
- "layer0.opacity": 1.0
- },
- {
- "class": "mini_quick_panel_row",
- "attributes": ["selected"],
- "layer0.texture": "Theme - Soda/Soda Light/quick-panel-row-selected.png"
- },
-
-//
-// CODE COMPLETION DROPDOWN
-//
-
- {
- "class": "popup_control",
- "content_margin": [2, 2],
- "layer0.tint": [255, 255, 255],
- "layer0.opacity": 1.0
- },
- {
- "class": "auto_complete",
- "row_padding": [4, 2]
- },
- {
- "class": "auto_complete_label",
- "fg": [51, 51, 51],
- "match_fg": [0, 0, 0],
- "selected_fg": [205, 226, 243],
- "selected_match_fg": [255, 255, 255]
- },
- {
- "class": "table_row",
- "layer0.texture": "Theme - Soda/Soda Light/autocomplete-row-selected.png",
- "layer0.opacity": 0.0,
- "layer0.inner_margin": [3, 1]
- },
- {
- "class": "table_row",
- "attributes": ["selected"],
- "layer0.opacity": 1.0
- },
-
-//
-// BOTTOM PANEL BUTTONS
-//
-
- // Button group middle
- {
- "class": "icon_button_control",
- "layer0.texture": "Theme - Soda/Soda Light/btn-group-middle.png",
- "layer0.inner_margin": [6, 6],
- "layer0.opacity": 1.0,
- "content_margin": [3, 3]
- },
- {
- "class": "icon_button_control",
- "attributes": ["selected"],
- "layer0.texture": "Theme - Soda/Soda Light/btn-group-middle-on.png"
- },
- // Button group left
- {
- "class": "icon_button_control",
- "attributes": ["left"],
- "layer0.texture": "Theme - Soda/Soda Light/btn-group-left.png",
- "content_margin": [4, 3, 3, 3]
- },
- {
- "class": "icon_button_control",
- "attributes": ["left", "selected"],
- "layer0.texture": "Theme - Soda/Soda Light/btn-group-left-on.png"
- },
- // Button group right
- {
- "class": "icon_button_control",
- "attributes": ["right"],
- "layer0.texture": "Theme - Soda/Soda Light/btn-group-right.png",
- "content_margin": [3, 3, 4, 3]
- },
- {
- "class": "icon_button_control",
- "attributes": ["right", "selected"],
- "layer0.texture": "Theme - Soda/Soda Light/btn-group-right-on.png"
- },
- // Button single
- {
- "class": "icon_button_control",
- "attributes": ["left", "right"],
- "layer0.texture": "Theme - Soda/Soda Light/btn-small.png",
- "content_margin": [4, 3]
- },
- {
- "class": "icon_button_control",
- "attributes": ["left", "right", "selected"],
- "layer0.texture": "Theme - Soda/Soda Light/btn-small-on.png"
- },
- // Panel close button
- {
- "class": "panel_close_button",
- "layer0.texture": "Theme - Soda/Soda Light/panel-close.png",
- "layer0.opacity": 0.85,
- "content_margin": [8, 12]
- },
- {
- "class": "panel_close_button",
- "attributes": ["hover"],
- "layer0.texture": "Theme - Soda/Soda Light/panel-close.png",
- "layer0.opacity": 1.0
- },
- {
- "class": "panel_close_button",
- "attributes": ["pressed"],
- "layer0.texture": "Theme - Soda/Soda Light/panel-close-pressed.png"
- },
-
-//
-// BOTTOM PANEL ICONS - GROUP 1
-//
-
- // Regex search button
- {
- "class": "icon_regex",
- "layer0.texture": "Theme - Soda/Soda Light/icon-regex-off.png",
- "layer0.opacity": 1.0,
- "content_margin": [9, 9]
- },
- {
- "class": "icon_regex",
- "parents": [{"class": "icon_button_control", "attributes": ["selected"]}],
- "layer0.texture": "Theme - Soda/Soda Light/icon-regex-on.png"
- },
- // Case sensitive search button
- {
- "class": "icon_case",
- "layer0.texture": "Theme - Soda/Soda Light/icon-case-off.png",
- "layer0.opacity": 1.0,
- "content_margin": [9, 9]
- },
- {
- "class": "icon_case",
- "parents": [{"class": "icon_button_control", "attributes": ["selected"]}],
- "layer0.texture": "Theme - Soda/Soda Light/icon-case-on.png"
- },
- // Match whole word search button
- {
- "class": "icon_whole_word",
- "layer0.texture": "Theme - Soda/Soda Light/icon-word-off.png",
- "layer0.opacity": 1.0,
- "content_margin": [9, 9]
- },
- {
- "class": "icon_whole_word",
- "parents": [{"class": "icon_button_control", "attributes": ["selected"]}],
- "layer0.texture": "Theme - Soda/Soda Light/icon-word-on.png"
- },
-
-//
-// BOTTOM PANEL ICONS - GROUP 1 (EXTENDED: FIND IN FILES)
-//
-
- // Show search context button
- {
- "class": "icon_context",
- "layer0.texture": "Theme - Soda/Soda Light/icon-context-off.png",
- "layer0.opacity": 1.0,
- "content_margin": [9, 9]
- },
- {
- "class": "icon_context",
- "parents": [{"class": "icon_button_control", "attributes": ["selected"]}],
- "layer0.texture": "Theme - Soda/Soda Light/icon-context-on.png"
- },
- // Use search buffer
- {
- "class": "icon_use_buffer",
- "layer0.texture": "Theme - Soda/Soda Light/icon-buffer-off.png",
- "layer0.opacity": 1.0,
- "content_margin": [9, 9]
- },
- {
- "class": "icon_use_buffer",
- "parents": [{"class": "icon_button_control", "attributes": ["selected"]}],
- "layer0.texture": "Theme - Soda/Soda Light/icon-buffer-on.png"
- },
-
-//
-// BOTTOM PANEL ICONS - GROUP 2
-//
-
- // Reverse search direction button
- {
- "class": "icon_reverse",
- "layer0.texture": "Theme - Soda/Soda Light/icon-reverse-off.png",
- "layer0.opacity": 1.0,
- "content_margin": [9, 9]
- },
- {
- "class": "icon_reverse",
- "parents": [{"class": "icon_button_control", "attributes": ["selected"]}],
- "layer0.texture": "Theme - Soda/Soda Light/icon-reverse-on.png"
- },
- // Search wrap button
- {
- "class": "icon_wrap",
- "layer0.texture": "Theme - Soda/Soda Light/icon-wrap-off.png",
- "layer0.opacity": 1.0,
- "content_margin": [9, 9]
- },
- {
- "class": "icon_wrap",
- "parents": [{"class": "icon_button_control", "attributes": ["selected"]}],
- "layer0.texture": "Theme - Soda/Soda Light/icon-wrap-on.png"
- },
- // Search in selection button
- {
- "class": "icon_in_selection",
- "layer0.texture": "Theme - Soda/Soda Light/icon-selection-off.png",
- "layer0.opacity": 1.0,
- "content_margin": [9, 9]
- },
- {
- "class": "icon_in_selection",
- "parents": [{"class": "icon_button_control", "attributes": ["selected"]}],
- "layer0.texture": "Theme - Soda/Soda Light/icon-selection-on.png"
- },
-
-//
-// BOTTOM PANEL ICONS - GROUP 3
-//
-
- // Preserve case button
- {
- "class": "icon_preserve_case",
- "layer0.texture": "Theme - Soda/Soda Light/icon-preserve-off.png",
- "layer0.opacity": 1.0,
- "content_margin": [9, 9]
- },
- {
- "class": "icon_preserve_case",
- "parents": [{"class": "icon_button_control", "attributes": ["selected"]}],
- "layer0.texture": "Theme - Soda/Soda Light/icon-preserve-on.png"
- },
-
-//
-// BOTTOM PANEL ICONS - GROUP 4
-//
-
- // Highlight results button
- {
- "class": "icon_highlight",
- "layer0.texture": "Theme - Soda/Soda Light/icon-highlight-off.png",
- "layer0.opacity": 1.0,
- "content_margin": [9, 9]
- },
- {
- "class": "icon_highlight",
- "parents": [{"class": "icon_button_control", "attributes": ["selected"]}],
- "layer0.texture": "Theme - Soda/Soda Light/icon-highlight-on.png"
- }
-
-]
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light.sublime-theme b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light.sublime-theme
deleted file mode 100644
index 936a573..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light.sublime-theme
+++ /dev/null
@@ -1,1020 +0,0 @@
-[
-
-//
-// TABS (REGULAR)
-//
-
- // Tab set
- {
- "class": "tabset_control",
- "layer0.texture": "Theme - Soda/Soda Light/tabset-background.png",
- "layer0.inner_margin": [1, 7],
- "layer0.opacity": 1.0,
- "content_margin": [-4, 0, -4, 3],
- "tab_overlap": 5,
- "tab_width": 180,
- "tab_min_width": 45,
- "tab_height": 25,
- "mouse_wheel_switch": false
- },
- {
- "class": "tabset_control",
- "settings": ["mouse_wheel_switches_tabs"],
- "mouse_wheel_switch": true
- },
- // Tab element
- {
- "class": "tab_control",
- "content_margin": [12, 3, 12, 3],
- "max_margin_trim": 0,
- "hit_test_level": 0.0,
- "layer0.texture": "Theme - Soda/Soda Light/tab-inactive.png",
- "layer0.inner_margin": [5, 5],
- "layer0.opacity": 1.0
- },
- // Tab close state
- {
- "class": "tab_control",
- "settings": ["show_tab_close_buttons"],
- "content_margin": [12, 3, 7, 3]
- },
- // Tab hover state
- {
- "class": "tab_control",
- "attributes": ["hover"],
- "layer0.texture": "Theme - Soda/Soda Light/tab-hover.png"
- },
- // Tab active state
- {
- "class": "tab_control",
- "attributes": ["selected"],
- "layer0.texture": "Theme - Soda/Soda Light/tab-active.png"
- },
- // Tab dirty state (close button hidden)
- {
- "class": "tab_control",
- "settings": ["!show_tab_close_buttons"],
- "attributes": ["dirty"],
- "content_margin": [12, 3, 7, 3]
- },
-
-//
-// TABS (CLASSIC)
-//
-
- // Tab set
- {
- "class": "tabset_control",
- "settings": ["soda_classic_tabs"],
- "content_margin": [3, 4, 3, 3],
- "tab_overlap": 24,
- "tab_height": 28
- },
- // Tab element
- {
- "class": "tab_control",
- "settings": ["soda_classic_tabs"],
- "content_margin": [22, 6, 22, 4],
- "hit_test_level": 0.5,
- "layer0.texture": "Theme - Soda/Soda Light/classic/tab-inactive.png",
- "layer0.inner_margin": [18, 4]
- },
- // Tab close state
- {
- "class": "tab_control",
- "settings": ["soda_classic_tabs", "show_tab_close_buttons"],
- "content_margin": [22, 6, 15, 4]
- },
- // Tab hover state
- {
- "class": "tab_control",
- "settings": ["soda_classic_tabs"],
- "attributes": ["hover"],
- "layer0.texture": "Theme - Soda/Soda Light/classic/tab-hover.png"
- },
- // Tab active state
- {
- "class": "tab_control",
- "settings": ["soda_classic_tabs"],
- "attributes": ["selected"],
- "layer0.texture": "Theme - Soda/Soda Light/classic/tab-active.png"
- },
- // Tab dirty state (close button hidden)
- {
- "class": "tab_control",
- "settings": ["soda_classic_tabs", "!show_tab_close_buttons"],
- "attributes": ["dirty"],
- "content_margin": [22, 6, 15, 4]
- },
-
-//
-// TAB BUTTONS
-//
-
- // Tab close button
- {
- "class": "tab_close_button",
- "content_margin": [0, 0],
- "layer0.texture": "Theme - Soda/Soda Light/tab-close-inactive.png",
- "layer0.opacity": 1.0,
- "layer0.inner_margin": 0
- },
- {
- "class": "tab_close_button",
- "settings": ["show_tab_close_buttons"],
- "content_margin": [8, 8]
- },
- {
- "class": "tab_close_button",
- "parents": [{"class": "tab_control", "attributes": ["hover"]}],
- "layer0.texture": "Theme - Soda/Soda Light/tab-close.png",
- "layer0.opacity": 0.85
- },
- {
- "class": "tab_close_button",
- "parents": [{"class": "tab_control", "attributes": ["selected"]}],
- "layer0.texture": "Theme - Soda/Soda Light/tab-close.png",
- "layer0.opacity": 1.0
- },
- // Tab dirty button
- {
- "class": "tab_close_button",
- "parents": [{"class": "tab_control", "attributes": ["dirty"]}],
- "layer0.texture": "Theme - Soda/Soda Light/tab-dirty-inactive.png"
- },
- {
- "class": "tab_close_button",
- "settings": ["!show_tab_close_buttons"],
- "parents": [{"class": "tab_control", "attributes": ["dirty"]}],
- "content_margin": [8, 8]
- },
- {
- "class": "tab_close_button",
- "parents": [{"class": "tab_control", "attributes": ["dirty", "hover"]}],
- "layer0.opacity": 1.0
- },
- {
- "class": "tab_close_button",
- "parents": [{"class": "tab_control", "attributes": ["dirty", "selected"]}],
- "layer0.texture": "Theme - Soda/Soda Light/tab-dirty.png"
- },
- // Tab highlight button
- {
- "class": "tab_close_button",
- "settings": ["highlight_modified_tabs"],
- "parents": [{"class": "tab_control", "attributes": ["dirty"]}],
- "layer0.texture": "Theme - Soda/Soda Light/tab-highlight-inactive.png"
- },
- {
- "class": "tab_close_button",
- "settings": ["highlight_modified_tabs"],
- "parents": [{"class": "tab_control", "attributes": ["dirty", "selected"]}],
- "layer0.texture": "Theme - Soda/Soda Light/tab-highlight.png"
- },
- // Tab close button hover
- {
- "class": "tab_close_button",
- "settings": ["show_tab_close_buttons"],
- "attributes": ["hover"],
- "layer0.texture": "Theme - Soda/Soda Light/tab-close-hover.png"
- },
- // Tab close button pressed
- {
- "class": "tab_close_button",
- "settings": ["show_tab_close_buttons"],
- "attributes": ["pressed"],
- "layer0.texture": "Theme - Soda/Soda Light/tab-close-pressed.png"
- },
-
-//
-// TAB LABELS
-//
-
- {
- "class": "tab_label",
- "fade": true,
- "fg": [50, 50, 50],
- "shadow_color": [235, 235, 235],
- "shadow_offset": [0, 1]
- },
- {
- "class": "tab_label",
- "parents": [{"class": "tab_control", "attributes": ["hover"]}],
- "fg": [25, 25, 25],
- "shadow_color": [245, 245, 245]
- },
- {
- "class": "tab_label",
- "parents": [{"class": "tab_control", "attributes": ["selected"]}],
- "fg": [0, 0, 0],
- "shadow_color": [255, 255, 255]
- },
-
-//
-// FOLD BUTTONS
-//
-
- {
- "class": "fold_button_control",
- "layer0.texture": "Theme - Soda/Soda Light/fold-closed.png",
- "layer0.opacity": 1.0,
- "layer0.inner_margin": 0,
- "content_margin": [8, 8]
- },
- {
- "class": "fold_button_control",
- "attributes": ["hover"],
- "layer0.texture": "Theme - Soda/Soda Light/fold-closed-hover.png"
- },
- {
- "class": "fold_button_control",
- "attributes": ["expanded"],
- "layer0.texture": "Theme - Soda/Soda Light/fold-open.png"
- },
- {
- "class": "fold_button_control",
- "attributes": ["expanded", "hover"],
- "layer0.texture": "Theme - Soda/Soda Light/fold-open-hover.png"
- },
-
-//
-// STANDARD SCROLLBARS
-//
-
- // Standard vertical scroll bar
- {
- "class": "scroll_bar_control",
- "layer0.texture": "Theme - Soda/Soda Light/standard-scrollbar-vertical.png",
- "layer0.opacity": 1.0,
- "layer0.inner_margin": [2, 6],
- "blur": false
- },
- // Standard horizontal scroll bar
- {
- "class": "scroll_bar_control",
- "attributes": ["horizontal"],
- "layer0.texture": "Theme - Soda/Soda Light/standard-scrollbar-horizontal.png",
- "layer0.inner_margin": [6, 2],
- "blur": false
- },
- // Standard scroll bar corner
- {
- "class": "scroll_corner_control",
- "layer0.texture": "Theme - Soda/Soda Light/standard-scrollbar-corner.png",
- "layer0.inner_margin": [2, 2],
- "layer0.opacity": 1.0
- },
- // Standard vertical scroll puck
- {
- "class": "puck_control",
- "layer0.texture": "Theme - Soda/Soda Light/standard-puck-vertical.png",
- "layer0.opacity": 1.0,
- "layer0.inner_margin": [0, 10],
- "content_margin": [8, 12],
- "blur": false
- },
- // Standard horizontal scroll puck
- {
- "class": "puck_control",
- "attributes": ["horizontal"],
- "layer0.texture": "Theme - Soda/Soda Light/standard-puck-horizontal.png",
- "layer0.inner_margin": [10, 0],
- "content_margin": [12, 8],
- "blur": false
- },
-
-//
-// OVERLAY SCROLLBARS
-//
-
- // Overlay toggle scroll bar
- {
- "class": "scroll_area_control",
- "settings": ["overlay_scroll_bars"],
- "overlay": true
- },
- {
- "class": "scroll_area_control",
- "settings": ["!overlay_scroll_bars"],
- "overlay": false
- },
- // Overlay vertical scroll bar
- {
- "class": "scroll_bar_control",
- "settings": ["overlay_scroll_bars"],
- "layer0.texture": "Theme - Soda/Soda Light/overlay-scrollbar-vertical.png",
- "layer0.inner_margin": [0, 5],
- "blur": true
- },
- // Overlay horizontal scroll bar
- {
- "class": "scroll_bar_control",
- "settings": ["overlay_scroll_bars"],
- "attributes": ["horizontal"],
- "layer0.texture": "Theme - Soda/Soda Light/overlay-scrollbar-horizontal.png",
- "layer0.inner_margin": [5, 0],
- "blur": true
- },
- // Overlay vertical puck
- {
- "class": "puck_control",
- "settings": ["overlay_scroll_bars"],
- "layer0.texture": "Theme - Soda/Soda Light/overlay-puck-vertical.png",
- "layer0.inner_margin": [0, 5],
- "content_margin": [5, 20],
- "blur": true
- },
- // Overlay horizontal puck
- {
- "class": "puck_control",
- "settings": ["overlay_scroll_bars"],
- "attributes": ["horizontal"],
- "layer0.texture": "Theme - Soda/Soda Light/overlay-puck-horizontal.png",
- "layer0.inner_margin": [5, 0],
- "content_margin": [20, 5],
- "blur": true
- },
- // Overlay light puck (for dark content)
- {
- "class": "puck_control",
- "settings": ["overlay_scroll_bars"],
- "attributes": ["dark"],
- "layer0.texture": "Theme - Soda/Soda Light/overlay-dark-puck-vertical.png"
- },
- // Overlay light horizontal puck (for dark content)
- {
- "class": "puck_control",
- "settings": ["overlay_scroll_bars"],
- "attributes": ["horizontal", "dark"],
- "layer0.texture": "Theme - Soda/Soda Light/overlay-dark-puck-horizontal.png"
- },
-
-//
-// EMPTY WINDOW BACKGROUND
-//
-
- {
- "class": "sheet_container_control",
- "layer0.tint": [255, 255, 255],
- "layer0.opacity": 1.0
- },
-
-//
-// GRID LAYOUT
-//
-
- {
- "class": "grid_layout_control",
- "border_size": 1,
- "border_color": [189, 189, 189]
- },
-
-//
-// MINI MAP
-//
-
- {
- "class": "minimap_control",
- "viewport_color": [0, 0, 0, 35]
- },
-
-//
-// LABELS
-//
-
- // General labels
- {
- "class": "label_control",
- "color": [0, 0, 0]
- },
- // Text field labels
- {
- "class": "label_control",
- "parents": [{"class": "panel_control"}],
- "shadow_color": [250, 250, 250],
- "shadow_offset": [0, 1]
- },
- // Button labels
- {
- "class": "label_control",
- "parents": [{"class": "button_control"}],
- "shadow_color": [245, 245, 245],
- "shadow_offset": [0, 1]
- },
-
-//
-// TOOLTIP
-//
-
- // Tooltip container
- {
- "class": "tool_tip_control",
- "layer0.texture": "Theme - Soda/Soda Light/tooltip.png",
- "layer0.inner_margin": [1, 1],
- "layer0.opacity": 0.95,
- "content_margin": [3, 3]
- },
- // Tooltip content
- {
- "class": "tool_tip_label_control",
- "color": [0, 0, 0]
- },
-
-//
-// STATUS BAR
-//
-
- // Status bar container
- {
- "class": "status_bar",
- "layer0.texture": "Theme - Soda/Soda Light/status-bar-background.png",
- "layer0.opacity": 1.0,
- "layer0.inner_margin": [2, 2],
- "content_margin": [8, 4, 8, 4]
- },
- // Status bar button
- {
- "class": "status_button",
- "min_size": [100, 0]
- },
- // Status bar label
- {
- "class": "label_control",
- "parents": [{"class": "status_bar"}],
- "color": [47, 47, 47],
- "shadow_color": [220, 220, 220],
- "shadow_offset": [0, 1]
- },
-
-//
-// SIDEBAR
-//
-
- // Sidebar container
- {
- "class": "sidebar_container",
- "layer0.texture": "Theme - Soda/Soda Light/sidebar-bg.png",
- "layer0.opacity": 1.0,
- "layer0.inner_margin": [1, 1, 2, 1],
- "content_margin": [0, 0, 1, 0]
- },
- // Sidebar tree
- {
- "class": "sidebar_tree",
- "row_padding": [8, 3],
- "indent": 15,
- "indent_offset": 15,
- "indent_top_level": false
- },
- // Sidebar rows
- {
- "class": "tree_row",
- "layer0.texture": "Theme - Soda/Soda Light/sidebar-row-selected.png",
- "layer0.opacity": 0.0,
- "layer0.inner_margin": [1, 1]
- },
- // Sidebar row selected
- {
- "class": "tree_row",
- "attributes": ["selected"],
- "layer0.opacity": 1.0
- },
- // Sidebar heading
- {
- "class": "sidebar_heading",
- "color": [110, 126, 141],
- "font.bold": true,
- "shadow_color": [249, 250, 252],
- "shadow_offset": [0, 1]
- },
- // Sidebar heading selected
- {
- "class": "sidebar_heading",
- "parents": [{"class": "tree_row", "attributes": ["selected"]}],
- "color": [255, 255, 255],
- "shadow_color": [34, 94, 145]
- },
- // Sidebar entry
- {
- "class": "sidebar_label",
- "color": [0, 0, 0],
- "shadow_color": [241, 244, 247],
- "shadow_offset": [0, 1]
- },
- // Sidebar folder entry
- {
- "class": "sidebar_label",
- "parents": [{"class": "tree_row", "attributes": ["expandable"]}],
- "color": [70, 86, 102]
- },
- {
- "class": "sidebar_label",
- "parents": [{"class": "tree_row", "attributes": ["expandable", "hover"]}],
- "color": [45, 56, 68]
- },
- {
- "class": "sidebar_label",
- "parents": [{"class": "tree_row", "attributes": ["expandable"]}],
- "settings": ["bold_folder_labels"],
- "color": [110, 126, 141],
- "font.bold": true
- },
- {
- "class": "sidebar_label",
- "parents": [{"class": "tree_row", "attributes": ["expandable", "hover"]}],
- "settings": ["bold_folder_labels"],
- "color": [81, 92, 103]
- },
- // Sidebar entry selected
- {
- "class": "sidebar_label",
- "parents": [{"class": "tree_row", "attributes": ["selected"]}],
- "color": [255, 255, 255],
- "shadow_color": [34, 94, 145],
- "shadow_offset": [0, 1]
- },
-
-//
-// SIDEBAR - OPEN FILE ICONS
-//
-
- // Sidebar file close
- {
- "class": "close_button",
- "layer0.texture": "Theme - Soda/Soda Light/file-close.png",
- "layer0.opacity": 0.0,
- "layer0.inner_margin": 0,
- "content_margin": [8, 8]
- },
- {
- "class": "close_button",
- "parents": [{"class": "tree_row", "attributes": ["hover"]}],
- "layer0.opacity": 1.0
- },
- // Sidebar file dirty
- {
- "class": "close_button",
- "attributes": ["dirty"],
- "layer0.texture": "Theme - Soda/Soda Light/file-dirty.png",
- "layer0.opacity": 1.0
- },
- {
- "class": "close_button",
- "attributes": ["dirty"],
- "parents": [{"class": "tree_row", "attributes": ["selected"]}],
- "layer0.texture": "Theme - Soda/Soda Light/file-dirty-selected.png"
- },
- {
- "class": "close_button",
- "attributes": ["dirty"],
- "parents": [{"class": "tree_row", "attributes": ["hover"]}],
- "layer0.texture": "Theme - Soda/Soda Light/file-close.png"
- },
- // Sidebar file close hover
- {
- "class": "close_button",
- "attributes": ["hover"],
- "layer0.texture": "Theme - Soda/Soda Light/file-close-hover.png"
- },
- {
- "class": "close_button",
- "parents": [{"class": "tree_row", "attributes": ["hover", "selected"]}],
- "layer0.texture": "Theme - Soda/Soda Light/file-close-selected.png"
- },
-
-//
-// SIDEBAR - GENERAL FILE ICONS
-//
-
- // Sidebar group closed
- {
- "class": "disclosure_button_control",
- "content_margin": [8, 8],
- "layer0.texture": "Theme - Soda/Soda Light/group-closed.png",
- "layer0.opacity": 1.0,
- "layer0.inner_margin": 0
- },
- {
- "class": "disclosure_button_control",
- "parents": [{"class": "tree_row", "attributes": ["hover"]}],
- "layer0.texture": "Theme - Soda/Soda Light/group-closed-hover.png"
- },
- {
- "class": "disclosure_button_control",
- "parents": [{"class": "tree_row", "attributes": ["selected"]}],
- "layer0.texture": "Theme - Soda/Soda Light/group-closed-selected.png"
- },
- // Sidebar folder closed
- {
- "class": "disclosure_button_control",
- "settings": ["soda_folder_icons"],
- "layer0.texture": "Theme - Soda/Soda Light/folder-closed.png"
- },
- {
- "class": "disclosure_button_control",
- "settings": ["soda_folder_icons"],
- "parents": [{"class": "tree_row", "attributes": ["hover"]}],
- "layer0.texture": "Theme - Soda/Soda Light/folder-closed-hover.png"
- },
- {
- "class": "disclosure_button_control",
- "settings": ["soda_folder_icons"],
- "parents": [{"class": "tree_row", "attributes": ["selected"]}],
- "layer0.texture": "Theme - Soda/Soda Light/folder-closed-selected.png"
- },
- // Sidebar group open
- {
- "class": "disclosure_button_control",
- "attributes": ["expanded"],
- "layer0.texture": "Theme - Soda/Soda Light/group-open.png"
- },
- {
- "class": "disclosure_button_control",
- "attributes": ["expanded"],
- "parents": [{"class": "tree_row", "attributes": ["hover"]}],
- "layer0.texture": "Theme - Soda/Soda Light/group-open-hover.png"
- },
- {
- "class": "disclosure_button_control",
- "attributes": ["expanded"],
- "parents": [{"class": "tree_row", "attributes": ["selected"]}],
- "layer0.texture": "Theme - Soda/Soda Light/group-open-selected.png"
- },
- // Sidebar folder open
- {
- "class": "disclosure_button_control",
- "settings": ["soda_folder_icons"],
- "attributes": ["expanded"],
- "layer0.texture": "Theme - Soda/Soda Light/folder-open.png"
- },
- {
- "class": "disclosure_button_control",
- "settings": ["soda_folder_icons"],
- "attributes": ["expanded"],
- "parents": [{"class": "tree_row", "attributes": ["hover"]}],
- "layer0.texture": "Theme - Soda/Soda Light/folder-open-hover.png"
- },
- {
- "class": "disclosure_button_control",
- "settings": ["soda_folder_icons"],
- "attributes": ["expanded"],
- "parents": [{"class": "tree_row", "attributes": ["selected"]}],
- "layer0.texture": "Theme - Soda/Soda Light/folder-open-selected.png"
- },
-
-//
-// STANDARD TEXT BUTTONS
-//
-
- // Default button state
- {
- "class": "button_control",
- "content_margin": [6, 5, 6, 6],
- "min_size": [75, 0],
- "layer0.texture": "Theme - Soda/Soda Light/btn-large.png",
- "layer0.opacity": 1.0,
- "layer0.inner_margin": [6, 6]
- },
- // Pressed button state
- {
- "class": "button_control",
- "attributes": ["pressed"],
- "layer0.texture": "Theme - Soda/Soda Light/btn-large-on.png"
- },
-
-//
-// TEXT INPUT FIELD
-//
-
- // Text input field item
- {
- "class": "text_line_control",
- "layer0.texture": "Theme - Soda/Soda Light/text-field.png",
- "layer0.opacity": 1.0,
- "layer0.inner_margin": [4, 5, 4, 3],
- "content_margin": [3, 3]
- },
-
-//
-// PANEL BACKGROUNDS
-//
-
- // Bottom panel background
- {
- "class": "panel_control",
- "layer0.texture": "Theme - Soda/Soda Light/panel-background.png",
- "layer0.inner_margin": [2, 2, 2, 2],
- "layer0.opacity": 1.0,
- "content_margin": [2, 3, 2, 1]
- },
- // Quick panel background
- {
- "class": "overlay_control",
- "settings": ["!soda_retina_fix"],
- "layer0.texture": "Theme - Soda/Soda Light/quick-panel-background.png",
- "layer0.inner_margin": [12, 6, 12, 15],
- "layer0.opacity": 1.0,
- "layer1.texture": "Theme - Soda/Soda Light/quick-panel-sections.png",
- "layer1.inner_margin": [12, 40, 12, 19],
- "layer1.opacity": 1.0,
- "content_margin": [11, 8, 11, 17]
- },
- // Quick panel background (Retina fix)
- {
- "class": "overlay_control",
- "settings": ["soda_retina_fix"],
- "layer0.tint": [238, 238, 238],
- "layer0.opacity": 1.0,
- "content_margin": [6, 8, 6, 6]
- },
-
-//
-// QUICK PANEL
-//
-
- {
- "class": "quick_panel",
- "row_padding": [5, 2],
- "layer0.tint": [252, 252, 252],
- "layer0.opacity": 1.0
- },
- {
- "class": "quick_panel_row",
- "layer0.texture": "Theme - Soda/Soda Light/quick-panel-row.png",
- "layer0.inner_margin": [2, 2, 2, 2],
- "layer0.opacity": 1.0
- },
- {
- "class": "quick_panel_row",
- "attributes": ["selected"],
- "layer0.texture": "Theme - Soda/Soda Light/quick-panel-row-selected.png"
- },
- {
- "class": "quick_panel_label",
- "fg": [50, 50, 50, 255],
- "match_fg": [0, 0, 0, 255],
- "selected_fg": [25, 25, 25, 255],
- "selected_match_fg": [0, 0, 0, 255]
- },
- {
- "class": "quick_panel_path_label",
- "fg": [150, 150, 150, 255],
- "match_fg": [90, 90, 90, 255],
- "selected_fg": [120, 120, 120, 255],
- "selected_match_fg": [90, 90, 90, 255]
- },
- {
- "class": "quick_panel_score_label",
- "fg": [72, 139, 211, 255],
- "selected_fg": [72, 139, 211, 255]
- },
-
-//
-// MINI QUICK PANEL
-//
-
- {
- "class": "mini_quick_panel_row",
- "layer0.texture": "Theme - Soda/Soda Light/quick-panel-row.png",
- "layer0.inner_margin": [2, 2, 2, 2],
- "layer0.opacity": 1.0
- },
- {
- "class": "mini_quick_panel_row",
- "attributes": ["selected"],
- "layer0.texture": "Theme - Soda/Soda Light/quick-panel-row-selected.png"
- },
-
-//
-// CODE COMPLETION DROPDOWN
-//
-
- {
- "class": "popup_control",
- "content_margin": [2, 2],
- "layer0.tint": [255, 255, 255],
- "layer0.opacity": 1.0
- },
- {
- "class": "auto_complete",
- "row_padding": [4, 2]
- },
- {
- "class": "auto_complete_label",
- "fg": [51, 51, 51],
- "match_fg": [0, 0, 0],
- "selected_fg": [205, 226, 243],
- "selected_match_fg": [255, 255, 255]
- },
- {
- "class": "table_row",
- "layer0.texture": "Theme - Soda/Soda Light/autocomplete-row-selected.png",
- "layer0.opacity": 0.0,
- "layer0.inner_margin": [3, 1]
- },
- {
- "class": "table_row",
- "attributes": ["selected"],
- "layer0.opacity": 1.0
- },
-
-//
-// BOTTOM PANEL BUTTONS
-//
-
- // Button group middle
- {
- "class": "icon_button_control",
- "layer0.texture": "Theme - Soda/Soda Light/btn-group-middle.png",
- "layer0.inner_margin": [6, 6],
- "layer0.opacity": 1.0,
- "content_margin": [3, 3]
- },
- {
- "class": "icon_button_control",
- "attributes": ["selected"],
- "layer0.texture": "Theme - Soda/Soda Light/btn-group-middle-on.png"
- },
- // Button group left
- {
- "class": "icon_button_control",
- "attributes": ["left"],
- "layer0.texture": "Theme - Soda/Soda Light/btn-group-left.png",
- "content_margin": [4, 3, 3, 3]
- },
- {
- "class": "icon_button_control",
- "attributes": ["left", "selected"],
- "layer0.texture": "Theme - Soda/Soda Light/btn-group-left-on.png"
- },
- // Button group right
- {
- "class": "icon_button_control",
- "attributes": ["right"],
- "layer0.texture": "Theme - Soda/Soda Light/btn-group-right.png",
- "content_margin": [3, 3, 4, 3]
- },
- {
- "class": "icon_button_control",
- "attributes": ["right", "selected"],
- "layer0.texture": "Theme - Soda/Soda Light/btn-group-right-on.png"
- },
- // Button single
- {
- "class": "icon_button_control",
- "attributes": ["left", "right"],
- "layer0.texture": "Theme - Soda/Soda Light/btn-small.png",
- "content_margin": [4, 3]
- },
- {
- "class": "icon_button_control",
- "attributes": ["left", "right", "selected"],
- "layer0.texture": "Theme - Soda/Soda Light/btn-small-on.png"
- },
-
-//
-// BOTTOM PANEL ICONS - GROUP 1
-//
-
- // Regex search button
- {
- "class": "icon_regex",
- "layer0.texture": "Theme - Soda/Soda Light/icon-regex-off.png",
- "layer0.opacity": 1.0,
- "content_margin": [9, 9]
- },
- {
- "class": "icon_regex",
- "parents": [{"class": "icon_button_control", "attributes": ["selected"]}],
- "layer0.texture": "Theme - Soda/Soda Light/icon-regex-on.png"
- },
- // Case sensitive search button
- {
- "class": "icon_case",
- "layer0.texture": "Theme - Soda/Soda Light/icon-case-off.png",
- "layer0.opacity": 1.0,
- "content_margin": [9, 9]
- },
- {
- "class": "icon_case",
- "parents": [{"class": "icon_button_control", "attributes": ["selected"]}],
- "layer0.texture": "Theme - Soda/Soda Light/icon-case-on.png"
- },
- // Match whole word search button
- {
- "class": "icon_whole_word",
- "layer0.texture": "Theme - Soda/Soda Light/icon-word-off.png",
- "layer0.opacity": 1.0,
- "content_margin": [9, 9]
- },
- {
- "class": "icon_whole_word",
- "parents": [{"class": "icon_button_control", "attributes": ["selected"]}],
- "layer0.texture": "Theme - Soda/Soda Light/icon-word-on.png"
- },
-
-//
-// BOTTOM PANEL ICONS - GROUP 1 (EXTENDED: FIND IN FILES)
-//
-
- // Show search context button
- {
- "class": "icon_context",
- "layer0.texture": "Theme - Soda/Soda Light/icon-context-off.png",
- "layer0.opacity": 1.0,
- "content_margin": [9, 9]
- },
- {
- "class": "icon_context",
- "parents": [{"class": "icon_button_control", "attributes": ["selected"]}],
- "layer0.texture": "Theme - Soda/Soda Light/icon-context-on.png"
- },
- // Use search buffer
- {
- "class": "icon_use_buffer",
- "layer0.texture": "Theme - Soda/Soda Light/icon-buffer-off.png",
- "layer0.opacity": 1.0,
- "content_margin": [9, 9]
- },
- {
- "class": "icon_use_buffer",
- "parents": [{"class": "icon_button_control", "attributes": ["selected"]}],
- "layer0.texture": "Theme - Soda/Soda Light/icon-buffer-on.png"
- },
-
-//
-// BOTTOM PANEL ICONS - GROUP 2
-//
-
- // Reverse search direction button
- {
- "class": "icon_reverse",
- "layer0.texture": "Theme - Soda/Soda Light/icon-reverse-off.png",
- "layer0.opacity": 1.0,
- "content_margin": [9, 9]
- },
- {
- "class": "icon_reverse",
- "parents": [{"class": "icon_button_control", "attributes": ["selected"]}],
- "layer0.texture": "Theme - Soda/Soda Light/icon-reverse-on.png"
- },
- // Search wrap button
- {
- "class": "icon_wrap",
- "layer0.texture": "Theme - Soda/Soda Light/icon-wrap-off.png",
- "layer0.opacity": 1.0,
- "content_margin": [9, 9]
- },
- {
- "class": "icon_wrap",
- "parents": [{"class": "icon_button_control", "attributes": ["selected"]}],
- "layer0.texture": "Theme - Soda/Soda Light/icon-wrap-on.png"
- },
- // Search in selection button
- {
- "class": "icon_in_selection",
- "layer0.texture": "Theme - Soda/Soda Light/icon-selection-off.png",
- "layer0.opacity": 1.0,
- "content_margin": [9, 9]
- },
- {
- "class": "icon_in_selection",
- "parents": [{"class": "icon_button_control", "attributes": ["selected"]}],
- "layer0.texture": "Theme - Soda/Soda Light/icon-selection-on.png"
- },
-
-//
-// BOTTOM PANEL ICONS - GROUP 3
-//
-
- // Preserve case button
- {
- "class": "icon_preserve_case",
- "layer0.texture": "Theme - Soda/Soda Light/icon-preserve-off.png",
- "layer0.opacity": 1.0,
- "content_margin": [9, 9]
- },
- {
- "class": "icon_preserve_case",
- "parents": [{"class": "icon_button_control", "attributes": ["selected"]}],
- "layer0.texture": "Theme - Soda/Soda Light/icon-preserve-on.png"
- },
-
-//
-// BOTTOM PANEL ICONS - GROUP 4
-//
-
- // Highlight results button
- {
- "class": "icon_highlight",
- "layer0.texture": "Theme - Soda/Soda Light/icon-highlight-off.png",
- "layer0.opacity": 1.0,
- "content_margin": [9, 9]
- },
- {
- "class": "icon_highlight",
- "parents": [{"class": "icon_button_control", "attributes": ["selected"]}],
- "layer0.texture": "Theme - Soda/Soda Light/icon-highlight-on.png"
- }
-
-]
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/.gitignore b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/.gitignore
deleted file mode 100644
index c3ed10e..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-*.cache
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/Widget - Soda Light 3.sublime-settings b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/Widget - Soda Light 3.sublime-settings
deleted file mode 100644
index 5cf1379..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/Widget - Soda Light 3.sublime-settings
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "color_scheme": "Packages/Theme - Soda/Soda Light/Widget - Soda Light.stTheme",
- "draw_shadows": false
-}
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/Widget - Soda Light.stTheme b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/Widget - Soda Light.stTheme
deleted file mode 100644
index 7b59a19..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/Widget - Soda Light.stTheme
+++ /dev/null
@@ -1,87 +0,0 @@
-
-
-
-
- author
- Ian Hill
- comment
- A widget theme for the UI components of the Soda Light theme.
- name
- Soda Light - Widget Theme
- settings
-
-
- settings
-
- background
- #FFFFFF
- caret
- #000000
- foreground
- #000000
- invisibles
- #E0E0E0
- lineHighlight
- #2D89D825
- selection
- #b5d5ff
- selectionBorder
- #b5d5ff00
- inactiveSelection
- #EDEDED
-
-
-
- name
- Comment
- scope
- comment
- settings
-
- fontStyle
- italic
- foreground
- #0066FF
-
-
-
- name
- Keyword
- scope
- keyword, storage
- settings
-
- foreground
- #4271AE
-
-
-
- scope
- constant
- settings
-
- foreground
- #2C473E
-
-
-
- scope
- string
- settings
-
- foreground
- #1D577D
-
-
-
- scope
- constant.character.escape
- settings
-
- foreground
- #e47b18
-
-
-
-
-
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/Widget - Soda Light.sublime-settings b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/Widget - Soda Light.sublime-settings
deleted file mode 100644
index 5cf1379..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/Widget - Soda Light.sublime-settings
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "color_scheme": "Packages/Theme - Soda/Soda Light/Widget - Soda Light.stTheme",
- "draw_shadows": false
-}
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/autocomplete-row-selected.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/autocomplete-row-selected.png
deleted file mode 100644
index f34dcea..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/autocomplete-row-selected.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/autocomplete-row-selected@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/autocomplete-row-selected@2x.png
deleted file mode 100644
index 65d88cc..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/autocomplete-row-selected@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/bookmark.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/bookmark.png
deleted file mode 100644
index 8d15c63..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/bookmark.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/btn-group-left-on.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/btn-group-left-on.png
deleted file mode 100644
index c39d6c2..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/btn-group-left-on.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/btn-group-left-on@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/btn-group-left-on@2x.png
deleted file mode 100644
index 2f1e8e9..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/btn-group-left-on@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/btn-group-left.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/btn-group-left.png
deleted file mode 100644
index ca80559..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/btn-group-left.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/btn-group-left@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/btn-group-left@2x.png
deleted file mode 100644
index 0f9071a..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/btn-group-left@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/btn-group-middle-on.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/btn-group-middle-on.png
deleted file mode 100644
index aa6311c..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/btn-group-middle-on.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/btn-group-middle-on@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/btn-group-middle-on@2x.png
deleted file mode 100644
index 9fc633c..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/btn-group-middle-on@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/btn-group-middle.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/btn-group-middle.png
deleted file mode 100644
index 6118c7a..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/btn-group-middle.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/btn-group-middle@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/btn-group-middle@2x.png
deleted file mode 100644
index 80a20c3..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/btn-group-middle@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/btn-group-right-on.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/btn-group-right-on.png
deleted file mode 100644
index 0c6cdc5..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/btn-group-right-on.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/btn-group-right-on@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/btn-group-right-on@2x.png
deleted file mode 100644
index 8d6e7b0..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/btn-group-right-on@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/btn-group-right.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/btn-group-right.png
deleted file mode 100644
index 4e0a8c2..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/btn-group-right.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/btn-group-right@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/btn-group-right@2x.png
deleted file mode 100644
index c9e67ac..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/btn-group-right@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/btn-large-on.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/btn-large-on.png
deleted file mode 100644
index 527647e..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/btn-large-on.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/btn-large-on@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/btn-large-on@2x.png
deleted file mode 100644
index a4e4d38..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/btn-large-on@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/btn-large.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/btn-large.png
deleted file mode 100644
index 46bf8c1..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/btn-large.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/btn-large@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/btn-large@2x.png
deleted file mode 100644
index 20cade4..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/btn-large@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/btn-small-on.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/btn-small-on.png
deleted file mode 100644
index 27d0ff5..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/btn-small-on.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/btn-small-on@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/btn-small-on@2x.png
deleted file mode 100644
index eb0cef5..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/btn-small-on@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/btn-small.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/btn-small.png
deleted file mode 100644
index 46bf8c1..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/btn-small.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/btn-small@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/btn-small@2x.png
deleted file mode 100644
index 20cade4..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/btn-small@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/circle.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/circle.png
deleted file mode 100644
index a007d54..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/circle.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/classic/tab-active.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/classic/tab-active.png
deleted file mode 100644
index 7b897ba..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/classic/tab-active.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/classic/tab-active@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/classic/tab-active@2x.png
deleted file mode 100644
index 27f4935..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/classic/tab-active@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/classic/tab-hover.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/classic/tab-hover.png
deleted file mode 100644
index 1a3a028..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/classic/tab-hover.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/classic/tab-hover@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/classic/tab-hover@2x.png
deleted file mode 100644
index 4d1a154..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/classic/tab-hover@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/classic/tab-inactive.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/classic/tab-inactive.png
deleted file mode 100644
index 875d028..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/classic/tab-inactive.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/classic/tab-inactive@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/classic/tab-inactive@2x.png
deleted file mode 100644
index d2885b6..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/classic/tab-inactive@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/dot.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/dot.png
deleted file mode 100644
index 0216b46..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/dot.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/file-close-hover.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/file-close-hover.png
deleted file mode 100644
index 2e0c183..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/file-close-hover.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/file-close-hover@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/file-close-hover@2x.png
deleted file mode 100644
index e8badf2..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/file-close-hover@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/file-close-selected.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/file-close-selected.png
deleted file mode 100644
index cace18c..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/file-close-selected.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/file-close-selected@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/file-close-selected@2x.png
deleted file mode 100644
index 63dcb2a..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/file-close-selected@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/file-close.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/file-close.png
deleted file mode 100644
index 208cd82..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/file-close.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/file-close@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/file-close@2x.png
deleted file mode 100644
index 7a88575..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/file-close@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/file-dirty-selected.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/file-dirty-selected.png
deleted file mode 100644
index b6cc225..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/file-dirty-selected.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/file-dirty-selected@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/file-dirty-selected@2x.png
deleted file mode 100644
index 6fce947..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/file-dirty-selected@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/file-dirty.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/file-dirty.png
deleted file mode 100644
index 4d0cc80..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/file-dirty.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/file-dirty@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/file-dirty@2x.png
deleted file mode 100644
index d486279..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/file-dirty@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/fold-closed-hover.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/fold-closed-hover.png
deleted file mode 100644
index 67ccfb4..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/fold-closed-hover.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/fold-closed-hover@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/fold-closed-hover@2x.png
deleted file mode 100644
index 2b56eeb..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/fold-closed-hover@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/fold-closed.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/fold-closed.png
deleted file mode 100644
index da76c65..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/fold-closed.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/fold-closed@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/fold-closed@2x.png
deleted file mode 100644
index 0c240cf..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/fold-closed@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/fold-open-hover.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/fold-open-hover.png
deleted file mode 100644
index 7ab33ad..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/fold-open-hover.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/fold-open-hover@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/fold-open-hover@2x.png
deleted file mode 100644
index d6a6891..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/fold-open-hover@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/fold-open.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/fold-open.png
deleted file mode 100644
index 653d14f..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/fold-open.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/fold-open@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/fold-open@2x.png
deleted file mode 100644
index 26d06bb..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/fold-open@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/fold.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/fold.png
deleted file mode 100644
index 8008475..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/fold.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/folder-closed-hover.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/folder-closed-hover.png
deleted file mode 100644
index 69a8d9d..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/folder-closed-hover.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/folder-closed-hover@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/folder-closed-hover@2x.png
deleted file mode 100644
index 9bfdf66..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/folder-closed-hover@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/folder-closed-selected.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/folder-closed-selected.png
deleted file mode 100644
index cdd80ba..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/folder-closed-selected.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/folder-closed-selected@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/folder-closed-selected@2x.png
deleted file mode 100644
index a8e0890..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/folder-closed-selected@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/folder-closed.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/folder-closed.png
deleted file mode 100644
index 30fca80..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/folder-closed.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/folder-closed@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/folder-closed@2x.png
deleted file mode 100644
index 106876f..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/folder-closed@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/folder-open-hover.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/folder-open-hover.png
deleted file mode 100644
index ea61a4f..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/folder-open-hover.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/folder-open-hover@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/folder-open-hover@2x.png
deleted file mode 100644
index 1ee80ed..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/folder-open-hover@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/folder-open-selected.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/folder-open-selected.png
deleted file mode 100644
index 1440eb3..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/folder-open-selected.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/folder-open-selected@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/folder-open-selected@2x.png
deleted file mode 100644
index 7ca33d6..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/folder-open-selected@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/folder-open.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/folder-open.png
deleted file mode 100644
index 8eb2e7a..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/folder-open.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/folder-open@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/folder-open@2x.png
deleted file mode 100644
index e4c22a1..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/folder-open@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/group-closed-hover.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/group-closed-hover.png
deleted file mode 100644
index c5b3323..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/group-closed-hover.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/group-closed-hover@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/group-closed-hover@2x.png
deleted file mode 100644
index 9ad2704..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/group-closed-hover@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/group-closed-selected.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/group-closed-selected.png
deleted file mode 100644
index f3b8cde..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/group-closed-selected.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/group-closed-selected@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/group-closed-selected@2x.png
deleted file mode 100644
index 952963a..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/group-closed-selected@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/group-closed.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/group-closed.png
deleted file mode 100644
index 9ae650b..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/group-closed.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/group-closed@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/group-closed@2x.png
deleted file mode 100644
index 17e88c0..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/group-closed@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/group-open-hover.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/group-open-hover.png
deleted file mode 100644
index 881580e..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/group-open-hover.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/group-open-hover@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/group-open-hover@2x.png
deleted file mode 100644
index be7ab7b..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/group-open-hover@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/group-open-selected.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/group-open-selected.png
deleted file mode 100644
index ac3c28f..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/group-open-selected.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/group-open-selected@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/group-open-selected@2x.png
deleted file mode 100644
index fb9a2c6..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/group-open-selected@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/group-open.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/group-open.png
deleted file mode 100644
index 576df0b..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/group-open.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/group-open@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/group-open@2x.png
deleted file mode 100644
index dbb3622..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/group-open@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-buffer-off.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-buffer-off.png
deleted file mode 100644
index 0851ba0..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-buffer-off.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-buffer-off@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-buffer-off@2x.png
deleted file mode 100644
index 41bd998..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-buffer-off@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-buffer-on.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-buffer-on.png
deleted file mode 100644
index 9f464b8..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-buffer-on.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-buffer-on@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-buffer-on@2x.png
deleted file mode 100644
index e8f6025..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-buffer-on@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-case-off.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-case-off.png
deleted file mode 100644
index 028f16c..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-case-off.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-case-off@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-case-off@2x.png
deleted file mode 100644
index b602eb2..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-case-off@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-case-on.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-case-on.png
deleted file mode 100644
index 6eb4ad3..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-case-on.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-case-on@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-case-on@2x.png
deleted file mode 100644
index 729fea0..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-case-on@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-context-off.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-context-off.png
deleted file mode 100644
index 19d04e2..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-context-off.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-context-off@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-context-off@2x.png
deleted file mode 100644
index b7c5ceb..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-context-off@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-context-on.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-context-on.png
deleted file mode 100644
index e4ad24b..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-context-on.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-context-on@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-context-on@2x.png
deleted file mode 100644
index 35e5ccf..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-context-on@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-highlight-off.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-highlight-off.png
deleted file mode 100644
index 2549b51..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-highlight-off.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-highlight-off@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-highlight-off@2x.png
deleted file mode 100644
index a24f029..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-highlight-off@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-highlight-on.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-highlight-on.png
deleted file mode 100644
index f10bafc..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-highlight-on.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-highlight-on@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-highlight-on@2x.png
deleted file mode 100644
index 7e938af..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-highlight-on@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-preserve-off.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-preserve-off.png
deleted file mode 100644
index 402785f..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-preserve-off.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-preserve-off@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-preserve-off@2x.png
deleted file mode 100644
index 39bb640..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-preserve-off@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-preserve-on.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-preserve-on.png
deleted file mode 100644
index a8e9290..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-preserve-on.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-preserve-on@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-preserve-on@2x.png
deleted file mode 100644
index 819a8c9..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-preserve-on@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-regex-off.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-regex-off.png
deleted file mode 100644
index 54657e1..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-regex-off.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-regex-off@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-regex-off@2x.png
deleted file mode 100644
index 884a9bc..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-regex-off@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-regex-on.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-regex-on.png
deleted file mode 100644
index 92d7cc8..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-regex-on.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-regex-on@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-regex-on@2x.png
deleted file mode 100644
index aab3f57..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-regex-on@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-reverse-off.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-reverse-off.png
deleted file mode 100644
index e6b8fd3..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-reverse-off.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-reverse-off@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-reverse-off@2x.png
deleted file mode 100644
index 0687d84..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-reverse-off@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-reverse-on.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-reverse-on.png
deleted file mode 100644
index cf71654..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-reverse-on.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-reverse-on@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-reverse-on@2x.png
deleted file mode 100644
index 8d5efe7..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-reverse-on@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-selection-off.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-selection-off.png
deleted file mode 100644
index fa2d2bd..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-selection-off.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-selection-off@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-selection-off@2x.png
deleted file mode 100644
index 4c06d66..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-selection-off@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-selection-on.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-selection-on.png
deleted file mode 100644
index 7d34fc8..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-selection-on.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-selection-on@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-selection-on@2x.png
deleted file mode 100644
index 775593d..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-selection-on@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-word-off.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-word-off.png
deleted file mode 100644
index 0e7d77e..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-word-off.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-word-off@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-word-off@2x.png
deleted file mode 100644
index bcc96f9..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-word-off@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-word-on.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-word-on.png
deleted file mode 100644
index 6bdd0bd..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-word-on.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-word-on@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-word-on@2x.png
deleted file mode 100644
index f3bf654..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-word-on@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-wrap-off.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-wrap-off.png
deleted file mode 100644
index f60a4d3..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-wrap-off.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-wrap-off@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-wrap-off@2x.png
deleted file mode 100644
index be2929c..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-wrap-off@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-wrap-on.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-wrap-on.png
deleted file mode 100644
index 553da68..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-wrap-on.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-wrap-on@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-wrap-on@2x.png
deleted file mode 100644
index ac044cc..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/icon-wrap-on@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/overlay-dark-puck-horizontal.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/overlay-dark-puck-horizontal.png
deleted file mode 100644
index 762e5a7..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/overlay-dark-puck-horizontal.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/overlay-dark-puck-horizontal@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/overlay-dark-puck-horizontal@2x.png
deleted file mode 100644
index 166aba8..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/overlay-dark-puck-horizontal@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/overlay-dark-puck-vertical.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/overlay-dark-puck-vertical.png
deleted file mode 100644
index f2c4047..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/overlay-dark-puck-vertical.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/overlay-dark-puck-vertical@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/overlay-dark-puck-vertical@2x.png
deleted file mode 100644
index 7f22be6..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/overlay-dark-puck-vertical@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/overlay-puck-horizontal.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/overlay-puck-horizontal.png
deleted file mode 100644
index 4b677dc..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/overlay-puck-horizontal.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/overlay-puck-horizontal@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/overlay-puck-horizontal@2x.png
deleted file mode 100644
index 3ee8fee..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/overlay-puck-horizontal@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/overlay-puck-vertical.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/overlay-puck-vertical.png
deleted file mode 100644
index 1603bad..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/overlay-puck-vertical.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/overlay-puck-vertical@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/overlay-puck-vertical@2x.png
deleted file mode 100644
index 7aebfa6..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/overlay-puck-vertical@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/overlay-scrollbar-horizontal.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/overlay-scrollbar-horizontal.png
deleted file mode 100644
index be64d27..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/overlay-scrollbar-horizontal.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/overlay-scrollbar-horizontal@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/overlay-scrollbar-horizontal@2x.png
deleted file mode 100644
index 0bbd1cb..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/overlay-scrollbar-horizontal@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/overlay-scrollbar-vertical.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/overlay-scrollbar-vertical.png
deleted file mode 100644
index 70100d0..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/overlay-scrollbar-vertical.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/overlay-scrollbar-vertical@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/overlay-scrollbar-vertical@2x.png
deleted file mode 100644
index e860a90..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/overlay-scrollbar-vertical@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/panel-background.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/panel-background.png
deleted file mode 100644
index 33b8009..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/panel-background.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/panel-background@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/panel-background@2x.png
deleted file mode 100644
index c2d47ea..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/panel-background@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/panel-close-pressed.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/panel-close-pressed.png
deleted file mode 100644
index a612a71..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/panel-close-pressed.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/panel-close-pressed@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/panel-close-pressed@2x.png
deleted file mode 100644
index 8d8b03b..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/panel-close-pressed@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/panel-close.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/panel-close.png
deleted file mode 100644
index bf78f8a..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/panel-close.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/panel-close@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/panel-close@2x.png
deleted file mode 100644
index a3b944a..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/panel-close@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/quick-panel-background-fix.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/quick-panel-background-fix.png
deleted file mode 100644
index 05440d4..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/quick-panel-background-fix.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/quick-panel-background-fix@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/quick-panel-background-fix@2x.png
deleted file mode 100644
index 479ef3a..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/quick-panel-background-fix@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/quick-panel-background.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/quick-panel-background.png
deleted file mode 100644
index 9897713..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/quick-panel-background.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/quick-panel-background@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/quick-panel-background@2x.png
deleted file mode 100644
index ee7e828..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/quick-panel-background@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/quick-panel-row-selected.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/quick-panel-row-selected.png
deleted file mode 100644
index 777a621..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/quick-panel-row-selected.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/quick-panel-row-selected@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/quick-panel-row-selected@2x.png
deleted file mode 100644
index 36aa746..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/quick-panel-row-selected@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/quick-panel-row.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/quick-panel-row.png
deleted file mode 100644
index 2e0a4a9..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/quick-panel-row.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/quick-panel-row@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/quick-panel-row@2x.png
deleted file mode 100644
index ff1ecf5..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/quick-panel-row@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/quick-panel-sections-fix.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/quick-panel-sections-fix.png
deleted file mode 100644
index 9c911db..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/quick-panel-sections-fix.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/quick-panel-sections-fix@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/quick-panel-sections-fix@2x.png
deleted file mode 100644
index 7475d28..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/quick-panel-sections-fix@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/quick-panel-sections.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/quick-panel-sections.png
deleted file mode 100644
index 8ba8584..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/quick-panel-sections.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/quick-panel-sections@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/quick-panel-sections@2x.png
deleted file mode 100644
index 4fb59d2..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/quick-panel-sections@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/sidebar-bg.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/sidebar-bg.png
deleted file mode 100644
index 7906a82..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/sidebar-bg.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/sidebar-bg@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/sidebar-bg@2x.png
deleted file mode 100644
index 80ff9e3..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/sidebar-bg@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/sidebar-row-selected.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/sidebar-row-selected.png
deleted file mode 100644
index 5166236..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/sidebar-row-selected.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/sidebar-row-selected@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/sidebar-row-selected@2x.png
deleted file mode 100644
index 9afcf8c..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/sidebar-row-selected@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/standard-puck-horizontal.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/standard-puck-horizontal.png
deleted file mode 100644
index f91545b..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/standard-puck-horizontal.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/standard-puck-horizontal@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/standard-puck-horizontal@2x.png
deleted file mode 100644
index 5dfd8e7..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/standard-puck-horizontal@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/standard-puck-vertical.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/standard-puck-vertical.png
deleted file mode 100644
index e86fe14..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/standard-puck-vertical.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/standard-puck-vertical@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/standard-puck-vertical@2x.png
deleted file mode 100644
index f995b67..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/standard-puck-vertical@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/standard-scrollbar-corner.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/standard-scrollbar-corner.png
deleted file mode 100644
index 89cb55c..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/standard-scrollbar-corner.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/standard-scrollbar-corner@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/standard-scrollbar-corner@2x.png
deleted file mode 100644
index be274ed..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/standard-scrollbar-corner@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/standard-scrollbar-horizontal.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/standard-scrollbar-horizontal.png
deleted file mode 100644
index 6a79412..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/standard-scrollbar-horizontal.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/standard-scrollbar-horizontal@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/standard-scrollbar-horizontal@2x.png
deleted file mode 100644
index 34b1871..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/standard-scrollbar-horizontal@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/standard-scrollbar-vertical.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/standard-scrollbar-vertical.png
deleted file mode 100644
index 5db1229..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/standard-scrollbar-vertical.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/standard-scrollbar-vertical@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/standard-scrollbar-vertical@2x.png
deleted file mode 100644
index 417b4d4..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/standard-scrollbar-vertical@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/status-bar-background.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/status-bar-background.png
deleted file mode 100644
index d7421ca..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/status-bar-background.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/status-bar-background@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/status-bar-background@2x.png
deleted file mode 100644
index ff8d0ff..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/status-bar-background@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tab-active.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tab-active.png
deleted file mode 100644
index f9dd09d..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tab-active.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tab-active@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tab-active@2x.png
deleted file mode 100644
index b359129..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tab-active@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tab-close-hover.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tab-close-hover.png
deleted file mode 100644
index 5c0bce1..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tab-close-hover.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tab-close-hover@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tab-close-hover@2x.png
deleted file mode 100644
index 3d9063c..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tab-close-hover@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tab-close-inactive.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tab-close-inactive.png
deleted file mode 100644
index f1fadd1..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tab-close-inactive.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tab-close-inactive@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tab-close-inactive@2x.png
deleted file mode 100644
index f5412cf..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tab-close-inactive@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tab-close-pressed.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tab-close-pressed.png
deleted file mode 100644
index 1d49426..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tab-close-pressed.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tab-close-pressed@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tab-close-pressed@2x.png
deleted file mode 100644
index aa00e3a..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tab-close-pressed@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tab-close.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tab-close.png
deleted file mode 100644
index c86acc3..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tab-close.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tab-close@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tab-close@2x.png
deleted file mode 100644
index 466e73b..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tab-close@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tab-dirty-inactive.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tab-dirty-inactive.png
deleted file mode 100644
index c633b56..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tab-dirty-inactive.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tab-dirty-inactive@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tab-dirty-inactive@2x.png
deleted file mode 100644
index 06eaf17..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tab-dirty-inactive@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tab-dirty.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tab-dirty.png
deleted file mode 100644
index 0cfac0d..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tab-dirty.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tab-dirty@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tab-dirty@2x.png
deleted file mode 100644
index 4d2a744..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tab-dirty@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tab-highlight-inactive.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tab-highlight-inactive.png
deleted file mode 100644
index 4ca3607..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tab-highlight-inactive.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tab-highlight-inactive@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tab-highlight-inactive@2x.png
deleted file mode 100644
index 1e35e06..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tab-highlight-inactive@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tab-highlight.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tab-highlight.png
deleted file mode 100644
index 3425d31..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tab-highlight.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tab-highlight@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tab-highlight@2x.png
deleted file mode 100644
index 1896d71..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tab-highlight@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tab-hover.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tab-hover.png
deleted file mode 100644
index ce9f8ec..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tab-hover.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tab-hover@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tab-hover@2x.png
deleted file mode 100644
index 1aa6b28..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tab-hover@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tab-inactive.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tab-inactive.png
deleted file mode 100644
index 091dee5..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tab-inactive.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tab-inactive@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tab-inactive@2x.png
deleted file mode 100644
index df248b1..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tab-inactive@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tabset-background.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tabset-background.png
deleted file mode 100644
index c895cb9..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tabset-background.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tabset-background@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tabset-background@2x.png
deleted file mode 100644
index 21fa7c4..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tabset-background@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tabset-left-hover.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tabset-left-hover.png
deleted file mode 100644
index a990fc7..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tabset-left-hover.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tabset-left-hover@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tabset-left-hover@2x.png
deleted file mode 100644
index ab2433a..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tabset-left-hover@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tabset-left.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tabset-left.png
deleted file mode 100644
index 6c6a021..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tabset-left.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tabset-left@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tabset-left@2x.png
deleted file mode 100644
index 22d4d75..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tabset-left@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tabset-list-hover.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tabset-list-hover.png
deleted file mode 100644
index f55c06a..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tabset-list-hover.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tabset-list-hover@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tabset-list-hover@2x.png
deleted file mode 100644
index 0878115..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tabset-list-hover@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tabset-list.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tabset-list.png
deleted file mode 100644
index b97cac0..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tabset-list.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tabset-list@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tabset-list@2x.png
deleted file mode 100644
index 7610a76..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tabset-list@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tabset-right-hover.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tabset-right-hover.png
deleted file mode 100644
index 8081499..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tabset-right-hover.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tabset-right-hover@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tabset-right-hover@2x.png
deleted file mode 100644
index 03a2893..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tabset-right-hover@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tabset-right.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tabset-right.png
deleted file mode 100644
index b44e89c..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tabset-right.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tabset-right@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tabset-right@2x.png
deleted file mode 100644
index ac80fc0..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tabset-right@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/text-field-list-hover.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/text-field-list-hover.png
deleted file mode 100644
index ab8b8c6..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/text-field-list-hover.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/text-field-list-hover@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/text-field-list-hover@2x.png
deleted file mode 100644
index b398714..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/text-field-list-hover@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/text-field-list.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/text-field-list.png
deleted file mode 100644
index 53ec754..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/text-field-list.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/text-field-list@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/text-field-list@2x.png
deleted file mode 100644
index 55528d7..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/text-field-list@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/text-field.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/text-field.png
deleted file mode 100644
index b992a45..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/text-field.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/text-field@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/text-field@2x.png
deleted file mode 100644
index 045b666..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/text-field@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tooltip.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tooltip.png
deleted file mode 100644
index 63faab6..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tooltip.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tooltip@2x.png b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tooltip@2x.png
deleted file mode 100644
index 1cccaa6..0000000
Binary files a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/Soda Light/tooltip@2x.png and /dev/null differ
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/package-metadata.json b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/package-metadata.json
deleted file mode 100644
index 55e09df..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/Theme - Soda/package-metadata.json
+++ /dev/null
@@ -1 +0,0 @@
-{"url": "http://buymeasoda.github.com/soda-theme/", "version": "2013.08.02.02.42.26", "description": "Dark and light custom UI themes for Sublime Text"}
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/ZZZ.EthanBrown.SublimeKeyMap.Util/Default (OSX).sublime-keymap b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/ZZZ.EthanBrown.SublimeKeyMap.Util/Default (OSX).sublime-keymap
deleted file mode 100644
index 2e3cd54..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/ZZZ.EthanBrown.SublimeKeyMap.Util/Default (OSX).sublime-keymap
+++ /dev/null
@@ -1,31 +0,0 @@
-[
- //AdvancedNewFile - https://github.com/xobb1t/Sublime-AdvancedNewFile
- { "keys": ["ctrl+alt+n"], "command": "advanced_new_file"},
- //{ "keys": ["shift+ctrl+alt+n"], "command": "advanced_new_file", "args": {"is_python": true}},
- {
- "keys": ["tab"],
- "command": "insert_best_completion",
- "args": {"default": "", "exact": false},
- "context": [
- { "key": "advanced_new_file_completion"},
- { "key": "setting.tab_completion", "operator": "equal", "operand": true },
- { "key": "last_command", "operator": "not_equal", "operand": "insert_best_completion" },
- { "key": "auto_complete_visible" , "operator": "equal", "operand": false}
- ]
- },
-
- //Navigation History - https://github.com/timjrobinson/SublimeNavigationHistory
- { "keys": ["alt+left"], "command": "navigation_history_back"},
- { "keys": ["alt+right"], "command": "navigation_history_forward"},
-
- //SideBarEnhancements - https://github.com/titoBouzout/SideBarEnhancements/
- { "keys": ["super+t"], "command": "side_bar_new_file2" },
- { "keys": ["f12"], "command": "side_bar_open_in_browser" , "args":{"paths":[], "type":"testing" }},
- { "keys": ["alt+f12"], "command": "side_bar_open_in_browser", "args":{"paths":[], "type":"production" }},
- { "keys": ["f2"], "command": "side_bar_rename" },
- { "keys": ["ctrl+alt+f"], "command": "side_bar_find_files_path_containing" },
- { "keys": ["ctrl+shift+r"], "command": "side_bar_move" },
-
- //SublimeFiles - https://github.com/al63/SublimeFiles
- { "keys": ["shift+ctrl+alt+n"], "command": "sublime_files", "args": {"command":"navigate"}}
-]
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/ZZZ.EthanBrown.SublimeKeyMap.Util/Default (Windows).sublime-keymap b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/ZZZ.EthanBrown.SublimeKeyMap.Util/Default (Windows).sublime-keymap
deleted file mode 100644
index 9e76828..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/ZZZ.EthanBrown.SublimeKeyMap.Util/Default (Windows).sublime-keymap
+++ /dev/null
@@ -1,56 +0,0 @@
-[
- //AdvancedNewFile - https://github.com/xobb1t/Sublime-AdvancedNewFile
- { "keys": ["ctrl+alt+n"], "command": "advanced_new_file"},
- //{ "keys": ["shift+ctrl+alt+n"], "command": "advanced_new_file", "args": {"is_python": true}},
- {
- "keys": ["tab"],
- "command": "insert_best_completion",
- "args": {"default": "", "exact": false},
- "context": [
- { "key": "advanced_new_file_completion"},
- { "key": "setting.tab_completion", "operator": "equal", "operand": true },
- { "key": "last_command", "operator": "not_equal", "operand": "insert_best_completion" },
- { "key": "auto_complete_visible" , "operator": "equal", "operand": false}
- ]
- },
-
- //Navigation History - https://github.com/timjrobinson/SublimeNavigationHistory
- { "keys": ["alt+left"], "command": "navigation_history_back"},
- { "keys": ["alt+right"], "command": "navigation_history_forward"},
-
- //Recent Active Files - https://github.com/jugyo/SublimeRecentActiveFiles
- { "keys": ["ctrl+alt+shift+t"], "command": "recent_active_files" },
-
- //Keymap Manager - https://github.com/welefen/KeymapManager
- { "keys": ["ctrl+alt+k"],"command": "keymap_manager" },
-
- //MoveTab - https://github.com/SublimeText/MoveTab
- { "keys": ["ctrl+shift+end"], "command": "move_tab", "args": { "position": "999" }},
- { "keys": ["ctrl+shift+home"],"command": "move_tab","args": { "position": "0" }},
- { "keys": ["ctrl+shift+pageup"],"command": "move_tab","args": { "position": "-1" }},
- { "keys": ["ctrl+shift+pagedown"],"command": "move_tab","args": { "position": "+1" }},
-
- //OpenRecentFiles - https://github.com/spadgos/sublime-OpenRecentFiles
- { "keys": ["ctrl+shift+t"], "command": "open_recent_files" },
-
- //OpenSearchResult - https://github.com/abrookins/OpenSearchResult
- { "keys": ["ctrl+enter"], "command": "open_search_result", "context":
- [
- { "key": "selector", "operator": "equal", "operand": "text.find-in-files" }
- ]
- },
-
- //SideBarEnhancements - https://github.com/titoBouzout/SideBarEnhancements/
- { "keys": ["ctrl+t"], "command": "side_bar_new_file" },
- { "keys": ["f12"], "command": "side_bar_open_in_browser" , "args":{"paths":[], "type":"testing" }},
- { "keys": ["alt+f12"], "command": "side_bar_open_in_browser", "args":{"paths":[], "type":"production" }},
- { "keys": ["f2"], "command": "side_bar_rename" },
- { "keys": ["ctrl+alt+f"], "command": "side_bar_find_files_path_containing" },
- { "keys": ["ctrl+shift+r"], "command": "side_bar_move" },
-
- //SublimeFiles - https://github.com/al63/SublimeFiles
- { "keys": ["shift+ctrl+alt+n"], "command": "sublime_files", "args": {"command":"navigate"}},
-
- //Build system keybindings
- { "keys": ["f5"], "command": "build" }
-]
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/ZZZ.EthanBrown.SublimeKeyMap.Util/README.md b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/ZZZ.EthanBrown.SublimeKeyMap.Util/README.md
deleted file mode 100644
index 946ad8e..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/ZZZ.EthanBrown.SublimeKeyMap.Util/README.md
+++ /dev/null
@@ -1,36 +0,0 @@
-SublimeKeyMap.Util
-==================
-
-A simple repository used to host / share my customized Sublime Text 2 key bindings for Sublime utility plugins and themes
-
-Designed to be incorporated into `Package Control.sublime-settings` like:
-
-```json
-{
- "installed_packages":
- [
- "AdvancedNewFile",
- "ConsoleExec",
- "EncodingHelper",
- "KeymapManager",
- "MoveTab",
- "Navigation History",
- "Open Recent Files",
- "OpenSearchResult",
- "Package Control",
- "RecentActiveFiles",
- "Search Anywhere",
- "SideBarEnhancements",
- "Sublime Files",
- "Theme - Soda"
- ],
- "package_name_map": {
- "SublimeKeyMap.Util": "ZZZ.EthanBrown.SublimeKeyMap.Util"
- },
- "repositories":
- [
- "https://github.com/abrookins/OpenSearchResult",
- "https://github.com/Iristyle/SublimeKeyMap.Util"
- ]
-}
-```
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/ZZZ.EthanBrown.SublimeKeyMap.Util/package-metadata.json b/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/ZZZ.EthanBrown.SublimeKeyMap.Util/package-metadata.json
deleted file mode 100644
index 1f9554c..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/PackageCache/ZZZ.EthanBrown.SublimeKeyMap.Util/package-metadata.json
+++ /dev/null
@@ -1 +0,0 @@
-{"url": "https://github.com/Iristyle/SublimeKeyMap.Util", "version": "2013.09.17.01.16.26", "description": "A simple repository used to host / share my customized Sublime Text 2 key bindings for Sublime utility plugins"}
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/Preferences.sublime-settings b/EthanBrown.SublimeText2.UtilPackages/tools/Preferences.sublime-settings
deleted file mode 100644
index ab9f5e5..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/Preferences.sublime-settings
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "close_windows_when_empty": true,
- "highlight_modified_tabs": true,
- "ignored_packages":
- [
- "Caret History",
- "GotoRecent",
- "MultiTaskBuild",
- "Open Related",
- "QuickFileMove",
- "SublimeREPL"
- ],
- "theme": "Soda Dark.sublime-theme"
-}
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/SublimeFiles.sublime-settings b/EthanBrown.SublimeText2.UtilPackages/tools/SublimeFiles.sublime-settings
deleted file mode 100644
index e1e9278..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/SublimeFiles.sublime-settings
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "term_command": "{{term_command}}"
-}
diff --git a/EthanBrown.SublimeText2.UtilPackages/tools/chocolateyInstall.ps1 b/EthanBrown.SublimeText2.UtilPackages/tools/chocolateyInstall.ps1
deleted file mode 100644
index d19c911..0000000
--- a/EthanBrown.SublimeText2.UtilPackages/tools/chocolateyInstall.ps1
+++ /dev/null
@@ -1,61 +0,0 @@
-$package = 'EthanBrown.SublimeText2.UtilPackages'
-
-function Get-CurrentDirectory
-{
- $thisName = $MyInvocation.MyCommand.Name
- [IO.Path]::GetDirectoryName((Get-Content function:$thisName).File)
-}
-
-# simulate the unix command for finding things in path
-# http://stackoverflow.com/questions/63805/equivalent-of-nix-which-command-in-powershell
-function Which([string]$cmd)
-{
- Get-Command -ErrorAction "SilentlyContinue" $cmd |
- Select -ExpandProperty Definition
-}
-
-try {
- . (Join-Path (Get-CurrentDirectory) 'JsonHelpers.ps1')
- . (Join-Path (Get-CurrentDirectory) 'SublimeHelpers.ps1')
-
- $sublimeUserDataPath = Get-SublimeUserPath
- $sublimeFilesFileName = 'SublimeFiles.sublime-settings'
- $sublimeFiles = Join-Path (Get-CurrentDirectory) $sublimeFilesFileName
-
- # TODO: this doesn't actually work in the Sublime plugin right now, but might in the future
- $systemPath = [Environment]::GetFolderPath('System')
- $psDefault = Join-Path $systemPath 'WindowsPowerShell\v1.0\powershell.exe'
- $ps = (Which powershell),
- $psDefault |
- ? { Test-Path $_ } |
- Select -First 1
- if (!$ps)
- {
- Write-Warning "Could not find Powershell - using default $psDefault"
- $ps = $psDefault
- }
-
- $psRoot = Split-Path $ps
-
- $escapedPs = $ps -replace '\\', '\\'
- ([IO.File]::ReadAllText($sublimeFiles)) -replace '{{term_command}}', $escapedPs |
- Out-File -FilePath (Join-Path $sublimeUserDataPath $sublimeFilesFileName) -Force -Encoding ASCII
-
- $packageCache = Join-Path (Get-CurrentDirectory) 'PackageCache'
- Install-SublimePackagesFromCache -Directory $packageCache -Version 2
- Install-SublimePackageControl -PreRelease -Version 2
- $packageControl = (Join-Path (Get-CurrentDirectory) 'Package Control.sublime-settings')
- Merge-PackageControlSettings -FilePath $packageControl
-
- $preferences = (Join-Path (Get-CurrentDirectory) 'Preferences.sublime-settings')
- Merge-Preferences -FilePath $preferences
-
- if (Get-Process -Name sublime_text -ErrorAction SilentlyContinue)
- {
- Write-Warning 'Please close and re-open Sublime Text to force packages to update'
- }
- Write-ChocolateySuccess $package
-} catch {
- Write-ChocolateyFailure $package "$($_.Exception.Message)"
- throw
-}
diff --git a/EthanBrown.SublimeText2.WebPackages/EthanBrown.SublimeText2.WebPackages.nuspec b/EthanBrown.SublimeText2.WebPackages/EthanBrown.SublimeText2.WebPackages.nuspec
deleted file mode 100644
index 8b0289a..0000000
--- a/EthanBrown.SublimeText2.WebPackages/EthanBrown.SublimeText2.WebPackages.nuspec
+++ /dev/null
@@ -1,117 +0,0 @@
-
-
-
- EthanBrown.SublimeText2.WebPackages
- Sublime Text 2 - Web Development Packages
- 0.3.0
- Various
- Ethan Brown
- A number of packages helpful for auto-completion, snippets and syntax recognition of common web frameowrks and tools to increase editor productivity.
- Includes a number of very useful packages for Sublime Text 2.
-
- Included
- ===========================================================================
-
- - AngularJS (CoffeeScript)
- https://github.com/EastPoint/Sublime-AngularJS-Coffee-Completions
-
- - AutoFileName
- https://github.com/BoundInCode/AutoFileName
-
- - Chai Completions
- https://github.com/pensive612/sublime-chai-full-completions
-
- - CoffeeComplete Plus (Autocompletion)
- https://github.com/justinmahar/SublimeCSAutocompletePlus
-
- - DocBlockr
- https://github.com/spadgos/sublime-jsdocs
-
- - Emmet
- https://github.com/sergeche/emmet-sublime
-
- - Grunt
- https://github.com/tvooo/sublime-grunt
-
- - Hayaku - tools for writing CSS faster
- https://github.com/hayaku/hayaku
-
- - HTML5
- https://github.com/mrmartineau/HTML5
-
- - Http Requester
- https://github.com/braindamageinc/SublimeHttpRequester
-
- - jQuery
- https://github.com/SublimeText/jQuery
-
- - LESS
- https://github.com/danro/LESS-sublime
-
- - LiveReload
- https://github.com/dz0ny/LiveReload-sublimetext2
-
- - Pretty JSON
- https://github.com/dzhibas/SublimePrettyJson
-
- - sublime-better-coffeescript
- https://github.com/aponxi/sublime-better-coffeescript
-
- - SublimeLinter
- https://github.com/SublimeLinter/SublimeLinter
- Using customized version that includes CoffeeLint support from
- https://github.com/Iristyle/SublimeLinter
-
- - Tag
- https://github.com/SublimeText/Tag
-
- - Twitter Bootstrap Snippet
- https://github.com/devtellect/sublime-twitter-bootstrap-snippets/
-
- Disables
- ===========================================================================
- - CoffeeCompile
- - CoffeeScript
- - Live CSS
- - LESS-build
- - Sublime-HTMLPrettify
- - ZenCoding
-
- Customized Key Bindings
- ===========================================================================
- https://github.com/Iristyle/SublimeKeyMap.Web
-
- Additional Package Preferences
- ===========================================================================
- SublimeLinter - Path config
- SublimeGrunt - Path config
- CoffeeComplete Plus - AngularJS type definitions (work in progress)
-
- Additional User Preferences
- ===========================================================================
- Rules for
- - Autocompletion triggers, like . and $ in CoffeeScript
- - Autocompletion commit on TAB
- - ensuring 2 spaces for soft TAB indent
- - customized word_separators
-
- http://github.com/Iristyle/ChocolateyPackages/
- SublimeText package editor
-
- false
- https://raw.github.com/Iristyle/ChocolateyPackages/master/SublimeText2.app/Sublime_Text.png
- * Use a local package cache to prevent first-time package restore / load errors
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/CoffeeComplete Plus Custom Types.sublime-settings b/EthanBrown.SublimeText2.WebPackages/tools/CoffeeComplete Plus Custom Types.sublime-settings
deleted file mode 100644
index 1943275..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/CoffeeComplete Plus Custom Types.sublime-settings
+++ /dev/null
@@ -1,3412 +0,0 @@
-{
- "coffee_autocomplete_plus_custom_types":
- [
- {
- "name": "angular",
- "enabled": true,
- "constructors": [],
- "static_properties": [
- {"name": "version", "return": "String"}
- ],
- "static_methods": [
- // http://code.angularjs.org/1.1.4/docs/api/angular.bind
- {"name": "bind", "return": "Function", "args": [
- {"name": "self", "insertion": "context"},
- {"name": "fn", "insertion": "() -> boundFn"}
- ]},
- {"name": "bind", "return": "Function", "args": [
- {"name": "self", "insertion": "context"},
- {"name": "fn", "insertion": "() -> boundFn"},
- {"name": "args…"}
- ]},
- // http://code.angularjs.org/1.1.4/docs/api/angular.bootstrap
- // http://code.angularjs.org/1.1.4/docs/api/AUTO.$injector
- {"name": "bootstrap", "return": "$injector", "args": [
- {"name": "el"}
- ]},
- {"name": "bootstrap", "return": "$injector", "args": [
- {"name": "el"},
- {"name": "modules", "insertion": "['String'|() -> moduleFn]"}
- ]},
- // http://code.angularjs.org/1.1.4/docs/api/angular.copy
- // TODO: returns a copy of the original 'src' type or updated dest
- // TODO: could be Number|'String'|anything really
- {"name": "copy", "return": "Object", "args": [
- {"name": "src"}
- ]},
- {"name": "copy", "return": "Object", "args": [
- {"name": "src"},
- {"name": "dest", "insertion": "Object|Array"}
- ]},
- // http://code.angularjs.org/1.1.4/docs/api/angular.element
- // TODO: could also be a $ instead of jqLite
- {"name": "element", "return": "jqLite", "args": [
- {"name": "html", "insertion": "'htmlString'"}
- ]},
- {"name": "element", "return": "jqLite", "args": [
- {"name": "el", "insertion": "DOMElement|jqLite"}
- ]},
- // http://code.angularjs.org/1.1.4/docs/api/angular.equals
- {"name": "equals", "return": "Boolean", "args": [
- {"name": "object1"},
- {"name": "object2"}
- ]},
- // http://code.angularjs.org/1.1.4/docs/api/angular.extend
- // TODO: returns the original src object
- {"name": "extend", "return": "Object", "args": [
- {"name": "dst"},
- {"name": "src"}
- ]},
- // http://code.angularjs.org/1.1.4/docs/api/angular.forEach
- // TODO: returns reference to original Object|Array
- {"name": "forEach", "return": "Object", "args": [
- {"name": "obj", "insertion": "Object|Array"},
- {"name": "iter", "insertion": "(value, key) -> iteratorFn"}
- ]},
- {"name": "forEach", "return": "Object", "args": [
- {"name": "obj", "insertion": "Object|Array"},
- {"name": "iter", "insertion": "(value, key) -> iteratorFn"},
- {"name": "ctx", "insertion": "context"}
- ]},
- // http://code.angularjs.org/1.1.4/docs/api/angular.fromJson
- {"name": "fromJson", "return": "Object", "args": [
- {"name": "'jsonString'"}
- ]},
- // http://code.angularjs.org/1.1.4/docs/api/angular.identity
- // TODO: returns first argument
- {"name": "identity", "return": "Object", "args": []},
- {"name": "identity", "return": "Object", "args": [{"name": "args…"}]},
- // http://code.angularjs.org/1.1.4/docs/api/angular.injector
- {"name": "injector", "return": "$injector", "args": [
- {"name": "modules", "insertion": "['String'|() -> moduleFn]"}
- ]},
- // http://code.angularjs.org/1.1.4/docs/api/angular.isArray
- {"name": "isArray", "return": "Boolean", "args": [
- {"name": "value"}
- ]},
- // http://code.angularjs.org/1.1.4/docs/api/angular.isDate
- {"name": "isDate", "return": "Boolean", "args": [
- {"name": "value"}
- ]},
- // http://code.angularjs.org/1.1.4/docs/api/angular.isDefined
- {"name": "isDefined", "return": "Boolean", "args": [
- {"name": "value"}
- ]},
- // http://code.angularjs.org/1.1.4/docs/api/angular.isElement
- {"name": "isElement", "return": "Boolean", "args": [
- {"name": "value"}
- ]},
- // http://code.angularjs.org/1.1.4/docs/api/angular.isFunction
- {"name": "isFunction", "return": "Boolean", "args": [
- {"name": "value"}
- ]},
- // http://code.angularjs.org/1.1.4/docs/api/angular.isNumber
- {"name": "isNumber", "return": "Boolean", "args": [
- {"name": "value"}
- ]},
- // http://code.angularjs.org/1.1.4/docs/api/angular.isObject
- {"name": "isObject", "return": "Boolean", "args": [
- {"name": "value"}
- ]},
- // http://code.angularjs.org/1.1.4/docs/api/angular.isString
- {"name": "isString", "return": "Boolean", "args": [
- {"name": "value"}
- ]},
- // http://code.angularjs.org/1.1.4/docs/api/angular.isUndefined
- {"name": "isUndefined", "return": "Boolean", "args": [
- {"name": "value"}
- ]},
- // http://code.angularjs.org/1.1.4/docs/api/angular.lowercase
- {"name": "lowercase","return": "String", "args": [
- {"name": "string", "insertion": "'String'"}
- ]},
- // http://code.angularjs.org/1.1.4/docs/api/angular.mock.createMockWindow
- {"name": "mock.createMockWindow", "return": "", "args": []},
- // http://code.angularjs.org/1.1.4/docs/api/angular.mock.dump
- // TODO: typing angular.mock. automatically inserts this instead
- // of narrowing the list to the mock.* items
- {"name": "mock.dump", "return": "String", "args": [
- {"name": "object"}
- ]},
- // http://code.angularjs.org/1.1.4/docs/api/angular.mock.inject
- {"name": "mock.inject", "return": "", "args": [
- {"name": "fns"}
- ]},
- // http://code.angularjs.org/1.0.4/docs/api/angular.mock.module
- {"name": "mock.module", "return": "ngModule", "args": [
- {"name": "fns", "insertion": "'String'|() -> moduleFn"}
- ]},
- // http://code.angularjs.org/1.1.4/docs/api/angular.mock.TzDate
- {"name": "mock.TzDate", "return": "ngTzDate", "args": [
- {"name": "offset"},
- {"name": "timestamp", "insertion": "Number|'String'"}
- ]},
- // http://code.angularjs.org/1.1.4/docs/api/angular.module
- {"name": "module", "return": "ngModule", "args": [
- {"name": "name"}
- ]},
- // http://code.angularjs.org/1.1.4/docs/api/angular.Module#config
- {"name": "module", "return": "ngModule", "args": [
- {"name": "name"},
- {"name": "cfg", "insertion": "() -> configFn"}
- ]},
- {"name": "module", "return": "ngModule", "args": [
- {"name": "name"},
- {"name": "reqs", "insertion": "['module1', 'module2']"},
- {"name": "cfg", "insertion": "() -> configFn"}
- ]},
- // http://code.angularjs.org/1.1.4/docs/api/angular.noConflict
- {"name": "noconflict", "return": "Object", "args": []},
- // http://code.angularjs.org/1.1.4/docs/api/angular.noop
- {"name": "noop", "return": "", "args": []},
- // http://code.angularjs.org/1.1.4/docs/api/angular.toJson
- {"name": "toJson", "return": "String", "args": [
- {"name": "obj", "insertion": "Object|Array|Date|'String'|Number"}
- ]},
- {"name": "toJson", "return": "String", "args": [
- {"name": "obj", "insertion": "Object|Array|Date|'String'|Number"},
- {"name": "pretty", "insertion": "true|false"}
- ]},
- // http://code.angularjs.org/1.1.4/docs/api/angular.uppercase
- {"name": "uppercase", "return": "String", "args": [
- {"name": "string", "insertion": "'String'"}
- ]},
- // http://code.angularjs.org/1.1.4/docs/api/angular.version
- {"name": "version", "return": "ngVersion", "args": []}
- ],
- "instance_properties": [],
- "instance_methods": []
- },
- // HACK: not a real type
- // http://code.angularjs.org/1.1.4/docs/api/angular.version
- {
- "name": "ngVersion",
- "enabled": true,
- "constructors": [],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [
- {"name": "full", "return": "String"},
- {"name": "major", "return": "String"},
- {"name": "minor", "return": "String"},
- {"name": "dot", "return": "String"},
- {"name": "codeName", "return": "String"}
- ],
- "instance_methods": []
- },
- // HACK: not a real type, make believe, for completions
- // never use new ngTzDate(), always through angular.mock.TzDate
- // http://code.angularjs.org/1.1.4/docs/api/angular.mock.TzDate
- {
- "name": "ngTzDate",
- "enabled": true,
- "constructors": [],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [],
- "instance_methods": [
- {"name": "getTimezoneOffset", "return": "Number"},
- {"name": "getFullYear", "return": "Number"},
- {"name": "getMonth", "return": "Number"},
- {"name": "getDate", "return": "Number"},
- {"name": "getHours", "return": "Number"},
- {"name": "getMinutes", "return": "Number"}
- ]
- },
- // http://code.angularjs.org/1.1.4/docs/api/angular.Module
- // HACK: never use new ngModule(), always through angular.module
- // not sure if angular has an internal name for this type
- {
- "name": "ngModule",
- "enabled": true,
- "constructors": [],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [
- {"name": "name", "return": "String"},
- //TODO: Array of String
- {"name": "requires", "return": "Array"}
- ],
- "instance_methods": [
- // TODO: what is returned here?
- // http://code.angularjs.org/1.1.4/docs/api/ng.$animationProvider#register
- {"name": "animation", "return": "", "args": [
- {"name": "name", "insertion": "'name'"},
- // TODO: expand a snippet for the animationFactory? must return:
- // setup: function(Element):*
- // start: function(Element, doneFunction, *)
- {"name": "fn", "insertion": "() -> animationFactoryFn"}
- ]},
- {"name": "config", "return": "", "args": [
- {"name": "fn", "insertion": "() -> configFn"}
- ]},
- // http://code.angularjs.org/1.1.4/docs/api/AUTO.$provide#constant
- {"name": "constant", "return": "Object", "args": [
- {"name": "name", "insertion": "'name'"},
- {"name": "value"}
- ]},
- // http://code.angularjs.org/1.1.4/docs/api/ng.$controllerProvider#register
- {"name": "controller", "return": "$controller", "args": [
- {"name": "name", "insertion": "'name'"},
- {"name": "fn", "insertion": "() -> constructorFn|Array"}
- ]},
- // http://code.angularjs.org/1.1.4/docs/api/ng.$compileProvider#directive
- // http://docs.angularjs.org/guide/directive
- // # Registers a new directive with the compiler
- // #
- // ${1:moduleVariable}.directive '${2:directiveName}', (injectables) ->
- // directiveDefinitionObject =
- // priority: ${3:Number}
- // terminal: ${4:true|false}
- // scope: ${5:true|false|\{\} (object hash)}${6:
- // controller: () ->
- // ${7:#controller cn func, may access \$scope, \$element, \$attrs, \$transclude}}
- // ${8:require: '${9:controllerName|?controllerName|^controllerName}'}
- // restrict: '${11:E|A|C|M}'${12:
- // template: '${13:HTML}'}${14:
- // templateUrl: '${15:directive.html}'}
- // replace: ${16:true|false}
- // transclude: ${17:true|false|'element'}${18:
- // #only use to transform template DOM
- // compile: (tElement, tAttrs, transclude) ->
- // compiler =
- // pre: (scope, iElement, iAttrs, controller) ->
- // #not safe for DOM transformation
- // ${19:#}
- // post: (scope, iElement, iAttrs, controller) ->
- // #safe for DOM transformation
- // ${20:#}
- // return compiler
- // }${21:
- // #called IFF compile not defined
- // link: (scope, iElement, iAttrs) ->
- // #register DOM listeners or update DOM
- // ${22:#}
- // }
- // return directiveDefinitionObject
- //
- // Alternative
- //
- //
- // ${3:# Runs during compile}
- // return (scope, elm, attrs) ->
- // ${4:# Runs during render}]]>
- {"name": "directive", "return": "$compileProvider", "args": [
- {"name": "name", "insertion": "'name'"},
- {"name": "fn", "insertion": "() -> directiveFactoryFn"}
- ]},
- // http://code.angularjs.org/1.1.4/docs/api/AUTO.$provide#factory
- {"name": "factory", "return": "Object", "args": [
- {"name": "name", "insertion": "'name'"},
- {"name": "fn", "insertion": "() -> providerFactoryFn"}
- ]},
- // http://code.angularjs.org/1.1.4/docs/api/ng.$filterProvider#register
- {"name": "filter", "return": "ngFilterUserDefined", "args": [
- {"name": "name", "insertion": "'name'"},
- {"name": "fn", "insertion": "() -> filterFactoryFn"}
- ]},
- // http://code.angularjs.org/1.1.4/docs/api/AUTO.$provide#provider
- {"name": "provider", "return": "Object", "args": [
- {"name": "name", "insertion": "'name'"},
- {"name": "fn", "insertion": "Object with $get|() -> constructorFn"}
- ]},
- {"name": "run", "return": "", "args": [
- {"name": "fn", "insertion": "() -> initializationFn"}
- ]},
- // http://code.angularjs.org/1.1.4/docs/api/AUTO.$provide#service
- {"name": "service", "return": "Object", "args": [
- {"name": "name", "insertion": "'name'"},
- {"name": "fn", "insertion": "() -> constructorFn"}
- ]},
- // http://code.angularjs.org/1.1.4/docs/api/AUTO.$provide#value
- {"name": "value", "return": "Object", "args": [
- {"name": "name", "insertion": "'name'"},
- {"name": "value"}
- ]}
- ]
- },
- // http://code.angularjs.org/1.1.4/docs/api/ng.$compile.directive.Attributes
- {
- "name": "ngAttributes",
- "enabled": true,
- "constructors": [],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [
- {"name": "$attr", "return": "Object"}
- ],
- "instance_methods": [
- {"name": "$set", "args": [
- {"name": "name"},
- {"name": "value"}
- ]}
- ]
- },
- // http://code.angularjs.org/1.1.4/docs/api/ng.$rootScope.Scope#$on
- {
- "name": "ngEvent",
- "enabled": true,
- "constructors": [],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [
- {"name": "targetScope", "return": "ngScope"},
- {"name": "currentScope", "return": "ngScope"},
- {"name": "name", "return": "String"},
- {"name": "defaultPrevented", "return": "Boolean"}
- ],
- "instance_methods": [
- {"name": "stopPropagation", "return": "", "args": []},
- {"name": "preventDefault", "return": "", "args": []}
- ]
- },
- // http://code.angularjs.org/1.1.4/docs/api/ng.directive:form.FormController
- {
- "name": "ngFormController",
- "enabled": true,
- "constructors": [],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [
- // TODO: this is a hash of key names as strings, arrays / controls
- {"name": "$error", "return": "Object"},
- {"name": "$pristine", "return": "Boolean"},
- {"name": "$dirty", "return": "Boolean"},
- {"name": "$valid", "return": "Boolean"},
- {"name": "$invalid", "return": "Boolean"}
- ],
- "instance_methods": [
- {"name": "$setPristine", "return": "", "args": []}
- ]
- },
- // http://code.angularjs.org/1.1.4/docs/api/ng.$rootScope.Scope
- {
- "name": "ngScope",
- "enabled": true,
- // TODO: not sure where the Scope() function belongs??
- // https://github.com/angular/angular.js/blob/v1.0.x/src/ng/rootScope.js#L131
- // {"args": []},
- // {"args": [{"name": "providersMap"}]},
- // {"args": [{"name": "providersMap", "name": "instanceCache"}]}
- "constructors": [ ],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [
- {"name": "$id"}
- ],
- "instance_methods": [
- {"name": "$apply", "return": "Object", "args": []},
- {"name": "$apply", "return": "Object", "args": [
- {"name": "expr", "insertion": "'String'|(scope) -> expressionFn"}
- ]},
- {"name": "$broadcast", "return": "ngEvent", "args": [
- {"name": "name"}
- ]},
- {"name": "$broadcast", "return": "ngEvent", "args": [
- {"name": "name"}, {"name": "args…"}
- ]},
- {"name": "$destroy", "return": "", "args": []},
- {"name": "$digest", "return": "", "args": []},
- {"name": "$emit", "return": "ngEvent", "args": [
- {"name": "name"}
- ]},
- {"name": "$emit", "return": "ngEvent", "args": [
- {"name": "name"}, {"name": "args…"}
- ]},
- {"name": "$eval", "return": "Object", "args": [
- {"name": "expr", "insertion": "'String'|(scope) -> expressionFn"}
- ]},
- {"name": "$evalAsync", "return": "", "args": [
- {"name": "expr", "insertion": "'String'|(scope) -> expressionFn"}
- ]},
- {"name": "$new", "return": "ngScope", "args": [
- {"name": "isolate", "insertion": "true|false"}
- ]},
- {"name": "$on", "return": "Function", "args": [
- // http://code.angularjs.org/1.1.4/docs/api/ng.directive:ngInclude
- // http://code.angularjs.org/1.1.4/docs/api/ng.directive:ngView
- // http://code.angularjs.org/1.1.4/docs/api/ng.$route
- // http://code.angularjs.org/1.1.4/docs/api/ng.$rootScope.Scope#$destroy
- {"name": "name", "insertion": "'$destroy'|'$locationChangeStart'|'$locationChangeSuccess'|'$includeContentLoaded'|'$viewContentLoaded'|'$routeChangeError'|'$routeChangeStart'|'$routeChangeSuccess'|'$routeUpdate'"},
- // TODO: would like to specify event is an Event type here, maybe with inline Codo docs?
- {"name": "listener", "insertion": "(event, args) -> listenerFn"}
- ]},
- {"name": "$watch", "return": "Function", "args": [
- {"name": "expr", "insertion": "'String'|(scope) -> watchFn"}
- ]},
- {"name": "$watch", "return": "Function", "args": [
- {"name": "expr", "insertion": "'String'|(scope) -> watchFn"},
- {"name": "listener", "insertion": "'String'|(newValue, oldValue, scope) -> listenFn"}
- ]},
- {"name": "$watch", "return": "Function", "args": [
- {"name": "expr", "insertion": "'String'|(scope) -> watchFn"},
- {"name": "listener", "insertion": "'String'|(newValue, oldValue, scope) -> listenFn"},
- {"name": "eq", "insertion": "true:forEquality|false:forRef"}
- ]},
- {"name": "$watchCollection", "return": "Function", "args": [
- {"name": "expr", "insertion": "'String'|(scope) -> watchFn"},
- {"name": "listener", "insertion": "(newCollection, oldCollection, scope) -> listenFn"}
- ]}
- ]
- },
- // http://code.angularjs.org/1.1.4/docs/api/angular.element
- {
- "name": "jqLite",
- "enabled": true,
- "constructors": [],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [],
- "instance_methods": [
- // angular specific
- // TODO: $controller/NgModelController is not always the return type
- {"name": "controller", "return": "$controller", "args": [
- {"name": "name", "insertion": "'name'"}
- ]},
- {"name": "injector", "return": "$injector", "args": []},
- {"name": "scope", "return": "ngScope", "args": []},
- {"name": "inheritedData", "return": "jqLite", "args": []},
-
- // standard jQuery
- {"name": "addClass", "return": "jqLite", "args": [
- {"name": "className", "insertion": "'className(s) delimited with spaces'"}
- ]},
- {"name": "addClass", "return": "jqLite", "args": [
- {"name": "fn", "insertion": "(index, currentClass) ->"}
- ]},
- {"name": "after", "return": "jqLite", "args": [
- {"name": "content…", "insertion": "'htmlString'|Array|DOMElement|jqLite"}
- ]},
- {"name": "after", "return": "jqLite", "args": [
- {"name": "fn", "insertion": "(index) ->"}
- ]},
- {"name": "append", "return": "jqLite", "args": [
- {"name": "content…", "insertion": "'htmlString'|Array|DOMElement|jqLite"}
- ]},
- {"name": "append", "return": "jqLite", "args": [
- {"name": "fn", "insertion": "(index, html) ->"}
- ]},
- {"name": "attr", "return": "String", "args": [
- {"name": "name", "insertion": "'attributeName'"}
- ]},
- {"name": "attr", "return": "jqLite", "args": [
- {"name": "name", "insertion": "'attributeName'"},
- {"name": "value"}
- ]},
- {"name": "attr", "return": "jqLite", "args": [
- {"name": "attributes", "insertion": "attributeMapObject"}
- ]},
- {"name": "attr", "return": "jqLite", "args": [
- {"name": "name", "insertion": "'attributeName'"},
- {"name": "fn", "insertion": "(index, attr) ->"}
- ]},
- {"name": "bind", "return": "jqLite", "args": [
- {"name": "type", "insertion": "'eventType(s) delimited with spaces - namespaces not supported'"},
- {"name": "handler", "insertion": "(eventObject) ->"}
- ]},
- {"name": "bind", "return": "jqLite", "args": [
- {"name": "type", "insertion": "'eventType(s) delimited with spaces - namespaces not supported'"},
- {"name": "data", "insertion": "eventDataObject"},
- {"name": "handler", "insertion": "(eventObject) ->"}
- ]},
- {"name": "bind", "return": "jqLite", "args": [
- {"name": "type", "insertion": "'eventType'"},
- {"name": "preventBubble", "insertion": "true|false:preventDefaultAction"}
- ]},
- {"name": "bind", "return": "jqLite", "args": [
- {"name": "type", "insertion": "'eventType'"},
- {"name": "data", "insertion": "eventDataObject"},
- {"name": "preventBubble", "insertion": "true|false:preventDefaultAction"}
- ]},
- {"name": "bind", "return": "jqLite", "args": [
- {"name": "events", "insertion": "eventMapObject" }
- ]},
- {"name": "children", "return": "jqLite", "args": []},
- // this overload only be supported in unstable
- {"name": "children", "return": "jqLite", "args": [
- {"name": "selector", "insertion": "'selector'"}
- ]},
- {"name": "clone", "return": "jqLite", "args": []},
- {"name": "clone", "return": "jqLite", "args": [
- {"name": "data+Events", "insertion": "withDataAndEvents:true|false"}
- ]},
- {"name": "clone", "return": "jqLite", "args": [
- {"name": "data+Events", "insertion": "withDataAndEvents:true|false"},
- {"name": "deep", "insertion": "deepWithDataAndEvents:true|false"}
- ]},
- {"name": "contents", "return": "jqLite", "args": []},
- {"name": "css", "return": "String", "args": [
- {"name": "propName", "insertion": "'propertyName'"}
- ]},
- {"name": "css", "return": "jqLite", "args": [
- {"name": "propNames", "insertion": "['propName1','propName2']"}
- ]},
- {"name": "css", "return": "jqLite", "args": [
- {"name": "propName", "insertion": "'propertyName'"},
- {"name": "value", "insertion": "'String'|Number"}
- ]},
- {"name": "css", "return": "jqLite", "args": [
- {"name": "propName", "insertion": "'propertyName'"},
- {"name": "fn", "insertion": "(index, value) ->"}
- ]},
- {"name": "css", "return": "jqLite", "args": [
- {"name": "props", "insertion": "propertyMapObject"}
- ]},
- {"name": "data", "return": "jqLite", "args": [
- {"name": "key", "insertion": "'key'"},
- {"name": "value"}
- ]},
- {"name": "data", "return": "jqLite", "args": [
- {"name": "obj", "insertion": "keyValueObject"}
- ]},
- {"name": "data", "return": "Object", "args": [
- {"name": "key", "insertion": "'key'"}
- ]},
- {"name": "data", "return": "Object", "args": []},
- {"name": "eq", "return": "jqLite", "args": [
- {"name": "index"}
- ]},
- {"name": "eq", "return": "jqLite", "args": [
- {"name": "-index"}
- ]},
- {"name": "find", "return": "jqLite", "args": [
- {"name": "criteria", "insertion": "'tag name selector only'|DOMElement|jqLite"}
- ]},
- {"name": "hasClass", "return": "Boolean", "args": [
- {"name": "className", "insertion": "'className'"}
- ]},
- {"name": "html", "return": "String", "args": []},
- {"name": "html", "return": "jqLite", "args": [
- {"name": "string", "insertion": "'htmlString'"}
- ]},
- {"name": "html", "return": "jqLite", "args": [
- {"name": "fn", "insertion": "(index, oldhtml) ->"}
- ]},
- {"name": "next", "return": "jqLite", "args": []},
- // this overload only be supported in unstable
- {"name": "next", "return": "jqLite", "args": [
- {"name": "selector", "insertion": "'selector'"}
- ]},
- {"name": "parent", "return": "jqLite", "args": []},
- // this overload only be supported in unstable
- {"name": "parent", "return": "jqLite", "args": [
- {"name": "selector", "insertion": "'selector'"}
- ]},
- {"name": "prepend", "return": "jqLite", "args": [
- {"name": "content…", "insertion": "'htmlString'|Array|DOMElement|jqLite"}
- ]},
- {"name": "prepend", "return": "jqLite", "args": [
- {"name": "fn", "insertion": "(index, html) ->"}
- ]},
- {"name": "prop", "return": "String", "args": [
- {"name": "name", "insertion": "'propertyName'"}
- ]},
- {"name": "prop", "return": "jqLite", "args": [
- {"name": "name", "insertion": "'propertyName'"},
- {"name": "value", "insertion": "'String'|Number|Boolean"}
- ]},
- {"name": "prop", "return": "jqLite", "args": [
- {"name": "properties", "insertion": "propertyMapObject"}
- ]},
- {"name": "prop", "return": "jqLite", "args": [
- {"name": "name", "insertion": "'propertyName'"},
- {"name": "fn", "insertion": "(index, oldPropertyValue) ->"}
- ]},
- {"name": "ready", "return": "jqLite", "args": [
- {"name": "handler", "insertion": "() ->"}
- ]},
- {"name": "remove", "return": "jqLite", "args": []},
- {"name": "remove", "return": "jqLite", "args": [
- {"name": "selector", "insertion": "'selector'"}
- ]},
- {"name": "removeAttr", "return": "jqLite", "args": [
- {"name": "name", "insertion": "'attributeName(s) delimited with spaces'"}
- ]},
- {"name": "removeClass", "return": "jqLite", "args": []},
- {"name": "removeClass", "return": "jqLite", "args": [
- {"name": "className", "insertion": "'className(s) delimited with spaces'"}
- ]},
- {"name": "removeClass", "return": "jqLite", "args": [
- {"name": "fn", "insertion": "(index, class) ->"}
- ]},
- {"name": "removeData", "return": "jqLite", "args": []},
- {"name": "removeData", "return": "jqLite", "args": [
- {"name": "name", "insertion": "'name'"}
- ]},
- {"name": "removeData", "return": "jqLite", "args": [
- //TODO: Array of String
- {"name": "list", "insertion": "'name(s) delimited with spaces'|Array"}
- ]},
- {"name": "replaceWith", "return": "jqLite", "args": [
- {"name": "newContent", "insertion": "'htmlString'|DOMElement|jqLite"}
- ]},
- {"name": "replaceWith", "return": "jqLite", "args": [
- {"name": "fn", "insertion": "() ->"}
- ]},
- {"name": "text", "return": "String", "args": []},
- {"name": "text", "return": "jqLite", "args": [
- {"name": "text", "insertion": "'text'"}
- ]},
- {"name": "text", "return": "jqLite", "args": [
- {"name": "fn", "insertion": "(index, text) ->"}
- ]},
- {"name": "toggleClass", "return": "jqLite", "args": []},
- {"name": "toggleClass", "return": "jqLite", "args": [
- {"name": "name", "insertion": "'className(s) delimited with spaces'"}
- ]},
- {"name": "toggleClass", "return": "jqLite", "args": [
- {"name": "name", "insertion": "'className(s) delimited with spaces'"},
- {"name": "switch", "insertion": "true|false"}
- ]},
- {"name": "toggleClass", "return": "jqLite", "args": [
- {"name": "switch", "insertion": "true|false"}
- ]},
- {"name": "toggleClass", "return": "jqLite", "args": [
- {"name": "fn", "insertion": "(index, class, switch) ->"}
- ]},
- {"name": "toggleClass", "return": "jqLite", "args": [
- {"name": "fn", "insertion": "(index, class, switch) ->"},
- {"name": "switch", "insertion": "true|false"}
- ]},
- {"name": "triggerHandler", "return": "Object", "args": [
- {"name": "type", "insertion": "'eventType'"}
- ]},
- {"name": "triggerHandler", "return": "Object", "args": [
- {"name": "type", "insertion": "'eventType'"},
- {"name": "params", "insertion": "Array[extraParameters]"}
- ]},
- {"name": "unbind", "return": "jqLite", "args": []},
- {"name": "unbind", "return": "jqLite", "args": [
- {"name": "type", "insertion": "'eventType - namespaces not supported'"}
- ]},
- {"name": "unbind", "return": "jqLite", "args": [
- {"name": "handler", "insertion": "(eventObject) ->"}
- ]},
- {"name": "unbind", "return": "jqLite", "args": [
- {"name": "type", "insertion": "'eventType - namespaces not supported'"},
- {"name": "handler", "insertion": "(eventObject) ->"}
- ]},
- {"name": "unbind", "return": "jqLite", "args": [
- {"name": "type", "insertion": "'eventType - namespaces not supported'"},
- {"name": "false"}
- ]},
- {"name": "unbind", "return": "jqLite", "args": [
- {"name": "event" }
- ]},
- //TODO: can return String|Number|Array
- {"name": "val", "return": "Object", "args": []},
- {"name": "val", "return": "jqLite", "args": [
- {"name": "value", "insertion": "'value'|Array"}
- ]},
- {"name": "val", "return": "jqLite", "args": [
- {"name": "fn", "insertion": "(index, value) ->"}
- ]},
- {"name": "wrap", "return": "jqLite", "args": [
- {"name": "wrappingElement", "insertion": "'selector'|'htmlString'|DOMElement|jqLite"}
- ]},
- {"name": "wrap", "return": "jqLite", "args": [
- {"name": "fn", "insertion": "(index) ->"}
- ]}
- ]
- },
- // http://code.angularjs.org/1.1.4/docs/api/ng.$anchorScroll
- {
- "name": "$anchorScroll",
- "enabled": true,
- "constructors": [],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [],
- "instance_methods": []
- },
- // http://code.angularjs.org/1.1.4/docs/api/ng.$anchorScroll
- {
- "name": "$anchorScrollProvider",
- "enabled": true,
- "constructors": [],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [],
- "instance_methods": [
- {"name": "disableAutoScrolling", "return": "", "args": []}
- ]
- },
- // http://code.angularjs.org/1.1.4/docs/api/ng.$animation
- {
- "name": "$animation",
- "enabled": true,
- // TODO: don't use with 'new'
- "constructors": [
- {"args": [{"name": "name", "insertion": "'name'"}]}
- ],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [
- // TODO: setup: function(Element)
- // TODO: start: function(Element, doneFunction, *)
- {"name": "setup", "return": "Function"},
- {"name": "start", "return": "Function"}
- ],
- "instance_methods": []
- },
- // http://code.angularjs.org/1.1.4/docs/api/ng.$animationProvider
- {
- "name": "$animationProvider",
- "enabled": true,
- "constructors": [],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [],
- "instance_methods": [
- {"name": "register", "return": "$animation", "args": [
- {"name": "name", "insertion": "'name'"},
- {"name": "factory", "insertion": "() -> { setup: (element) -> (setupFn), start: (element, doneFn, args…) -> (startFn) }"}
- ]}
- ]
- },
- // http://code.angularjs.org/1.1.4/docs/api/ng.$animator
- {
- "name": "$animator",
- "enabled": true,
- // TODO: don't use with 'new'
- "constructors": [
- {"args": [
- {"name": "scope"},
- {"name": "attr", "insertion": "{attributesHash}"}
- ]}
- ],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [],
- "instance_methods": [
- {"name": "enter", "return": "", "args": [
- {"name": "el", "insertion": "jqLite element"},
- {"name": "parent", "insertion": "jqLite parent"},
- {"name": "after", "insertion": "jqLite after"}
- ]},
- {"name": "hide", "return": "", "args": [
- {"name": "el", "insertion": "jqLite element"}
- ]},
- {"name": "leave", "return": "", "args": [
- {"name": "el", "insertion": "jqLite element"},
- {"name": "parent", "insertion": "jqLite parent"}
- ]},
- {"name": "move", "return": "", "args": [
- {"name": "el", "insertion": "jqLite element"},
- {"name": "parent", "insertion": "jqLite parent"},
- {"name": "after", "insertion": "jqLite after"}
- ]},
- {"name": "show", "return": "", "args": [
- {"name": "el", "insertion": "jqLite element"}
- ]}
- ]
- },
- // private undocumented service, best to not use its API
- // http://code.angularjs.org/1.1.4/docs/api/ng.$browser
- {
- "name": "$browser",
- "enabled": true,
- "constructors": [],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [],
- "instance_methods": []
- },
- // http://code.angularjs.org/1.1.4/docs/api/ng.$cacheFactory
- {
- "name": "$cacheFactory",
- "enabled": true,
- "constructors": [
- {"args": [{"name": "cacheId", "insertion": "'cacheId'"}]},
- {"args": [
- {"name": "cacheId", "insertion": "'cacheId'"},
- {"name": "options", "insertion": "{capacity: Number}"}
- ]}
- ],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [],
- "instance_methods": [
- {"name": "info", "return": "ngCacheInfo", "args": []},
- {"name": "put", "return": "Object", "args": [
- {"name": "key", "insertion": "'key'"},
- {"name": "value"}
- ]},
- {"name": "get", "return": "Object", "args": [
- {"name": "key", "insertion": "'key'"}
- ]},
- {"name": "remove", "return": "", "args": [
- {"name": "key", "insertion": "'key'"}
- ]},
- {"name": "removeAll", "return": "", "args": []},
- {"name": "destroy", "return": "", "args": []}
- ]
- },
- // http://code.angularjs.org/1.1.4/docs/api/ng.$cacheFactory
- // HACK: this is an imaginary type
- {
- "name": "ngCacheInfo",
- "enabled": true,
- "constructors": [],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [
- {"name": "id", "return": "String", "args": []},
- {"name": "size", "return": "Number"},
- {"name": "options", "return": "Object"}
- ],
- "instance_methods": []
- },
- // http://code.angularjs.org/1.1.4/docs/api/ng.$compile
- {
- "name": "$compile",
- "enabled": true,
- "constructors": [
- // TODO: don't want these to apply to 'new'
- {"return": "ngLinkFunction", "args": [
- {"name": "el", "insertion": "'htmlString'|DOMElement|jqLite"}
- ]},
- {"return": "ngLinkFunction", "args": [
- {"name": "el", "insertion": "'htmlString'|DOMElement|jqLite"},
- {"name": "fn", "insertion": "(scope) -> transcludeFn"}
- ]},
- {"return": "ngLinkFunction", "args": [
- {"name": "el", "insertion": "'htmlString'|DOMElement|jqLite"},
- {"name": "fn", "insertion": "(scope) -> transcludeFn"},
- {"name": "maxPriority", "insertion": "Number"}]}
- ],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [],
- "instance_methods": []
- },
- // HACK: this type doesn't actually exist
- // TODO: won't work until we have "return" types
- {
- "name": "ngLinkFunction",
- "enabled": true,
- "constructors": [
- // TODO: shouldn't be available with 'new'
- {"return": "jqLite", "args": [
- {"name": "scope" }
- ]},
- {"return": "jqLite", "args": [
- {"name": "scope" },
- {"name": "fn", "insertion": "(clonedElement, scope) -> cloneAttachFn"}
- ]}
- ],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [],
- "instance_methods": []
- },
- // http://code.angularjs.org/1.1.4/docs/api/ng.$compileProvider
- {
- "name": "$compileProvider",
- "enabled": true,
- "constructors": [],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [],
- "instance_methods": [
- // http://code.angularjs.org/1.1.4/docs/api/ng.$compileProvider#directive
- // http://docs.angularjs.org/guide/directive
- {"name": "directive", "return": "$compileProvider", "args": [
- {"name": "name", "insertion": "'name'"},
- {"name": "fn", "insertion": "() -> directiveFactoryFn"}
- ]},
- {"name": "urlSanitizationWhitelist", "return": "RegExp", "args": []},
- {"name": "urlSanitizationWhitelist", "return": "$compileProvider", "args": [
- {"name": "regex", "insertion": "/RegExp/"}
- ]}
- ]
- },
- // http://code.angularjs.org/1.1.4/docs/api/ng.$controller
- // http://code.angularjs.org/1.1.4/docs/api/ng.directive:ngModel.NgModelController
- {
- //also refered to in docs as NgModelController
- "name": "$controller",
- "enabled": true,
- // TODO: this is really a specialized instance, but we have to duplicate for now
- // https://github.com/justinmahar/SublimeCSAutocompletePlus/issues/24
- "inherits": "ngFormController",
- "constructors": [
- {"args": [
- {"name": "ctor", "insertion": "'name'|'expression'|() -> constructorFn"}
- ]},
- {"args": [
- {"name": "ctor", "insertion": "'name'|'expression'|() -> constructorFn"},
- {"name": "locals"}
- ]}
- ],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [
- {"name": "$viewValue", "return": "String"},
- //TODO: not always Object, could be String|Number|Date, etc
- {"name": "$modelValue", "return": "Object"},
- //TODO: it's an Array of Function
- {"name": "$parsers", "return": "Array"},
- //TODO: it's an Array of Function
- {"name": "$formatters", "return": "Array"},
- // TODO: this is a hash of key names as strings, arrays / controls
- {"name": "$error", "return": "Object"},
- {"name": "$pristine", "return": "Boolean"},
- {"name": "$dirty", "return": "Boolean"},
- {"name": "$valid", "return": "Boolean"},
- {"name": "$invalid", "return": "Boolean"}
- ],
- "instance_methods": [
- {"name": "$render", "return": "", "args": []},
- {"name": "$setPristine", "return": "", "args": []},
- {"name": "$setValidity", "return": "", "args": [
- {"name": "key", "insertion": "'validationErrorKey'"},
- {"name": "isValid", "insertion": "true|false"}
- ]},
- {"name": "$setViewValue", "return": "", "args": [
- {"name": "value", "insertion": "'String'"}
- ]}
- ]
- },
- // http://code.angularjs.org/1.1.4/docs/api/ng.$controllerProvider
- {
- "name": "$controllerProvider",
- "enabled": true,
- "constructors": [],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [],
- "instance_methods": [
- {"name": "register", "return": "$controller", "args": [
- {"name": "name", "insertion": "'name'"},
- {"name": "ctor", "insertion": "Array|() -> constructorFn"}
- ]}
- ]
- },
- // http://code.angularjs.org/1.1.4/docs/api/ngCookies.$cookies
- {
- "name": "$cookies",
- "enabled": true,
- "constructors": [],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [],
- "instance_methods": []
- },
- // http://code.angularjs.org/1.1.4/docs/api/ngCookies.$cookieStore
- {
- "name": "$cookieStore",
- "enabled": true,
- "constructors": [],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [],
- "instance_methods": [
- {"name": "get", "return": "Object", "args": [
- {"name": "key", "insertion": "'key'"}
- ]},
- {"name": "put", "return": "", "args": [
- {"name": "key", "insertion": "'key'"},
- {"name": "value"}
- ]},
- {"name": "remove", "return": "", "args": [
- {"name": "key", "insertion": "'key'"}
- ]}
- ]
- },
- // http://code.angularjs.org/1.1.4/docs/api/ng.$document
- // http://code.angularjs.org/1.1.4/docs/api/angular.element
- {
- "name": "$document",
- "enabled": true,
- // TODO: this is really a jqLite instance, but we have to duplicate for now
- // https://github.com/justinmahar/SublimeCSAutocompletePlus/issues/24
- "inherits": "jqLite",
- "constructors": [],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [],
- "instance_methods": [
- // angular specific
- // TODO: $controller/NgModelController is not always the return type
- {"name": "controller", "return": "$controller", "args": [
- {"name": "name", "insertion": "'name'"}
- ]},
- {"name": "injector", "return": "$injector", "args": []},
- {"name": "scope", "return": "ngScope", "args": []},
- {"name": "inheritedData", "return": "jqLite", "args": []},
-
- // standard jQuery
- {"name": "addClass", "return": "jqLite", "args": [
- {"name": "className", "insertion": "'className(s) delimited with spaces'"}
- ]},
- {"name": "addClass", "return": "jqLite", "args": [
- {"name": "fn", "insertion": "(index, currentClass) ->"}
- ]},
- {"name": "after", "return": "jqLite", "args": [
- {"name": "content…", "insertion": "'htmlString'|Array|DOMElement|jqLite"}
- ]},
- {"name": "after", "return": "jqLite", "args": [
- {"name": "fn", "insertion": "(index) ->"}
- ]},
- {"name": "append", "return": "jqLite", "args": [
- {"name": "content…", "insertion": "'htmlString'|Array|DOMElement|jqLite"}
- ]},
- {"name": "append", "return": "jqLite", "args": [
- {"name": "fn", "insertion": "(index, html) ->"}
- ]},
- {"name": "attr", "return": "String", "args": [
- {"name": "name", "insertion": "'attributeName'"}
- ]},
- {"name": "attr", "return": "jqLite", "args": [
- {"name": "name", "insertion": "'attributeName'"},
- {"name": "value"}
- ]},
- {"name": "attr", "return": "jqLite", "args": [
- {"name": "attributes", "insertion": "attributeMapObject"}
- ]},
- {"name": "attr", "return": "jqLite", "args": [
- {"name": "name", "insertion": "'attributeName'"},
- {"name": "fn", "insertion": "(index, attr) ->"}
- ]},
- {"name": "bind", "return": "jqLite", "args": [
- {"name": "type", "insertion": "'eventType(s) delimited with spaces - namespaces not supported'"},
- {"name": "handler", "insertion": "(eventObject) ->"}
- ]},
- {"name": "bind", "return": "jqLite", "args": [
- {"name": "type", "insertion": "'eventType(s) delimited with spaces - namespaces not supported'"},
- {"name": "data", "insertion": "eventDataObject"},
- {"name": "handler", "insertion": "(eventObject) ->"}
- ]},
- {"name": "bind", "return": "jqLite", "args": [
- {"name": "type", "insertion": "'eventType'"},
- {"name": "preventBubble", "insertion": "true|false:preventDefaultAction"}
- ]},
- {"name": "bind", "return": "jqLite", "args": [
- {"name": "type", "insertion": "'eventType'"},
- {"name": "data", "insertion": "eventDataObject"},
- {"name": "preventBubble", "insertion": "true|false:preventDefaultAction"}
- ]},
- {"name": "bind", "return": "jqLite", "args": [
- {"name": "events", "insertion": "eventMapObject" }
- ]},
- {"name": "children", "return": "jqLite", "args": []},
- // this overload only be supported in unstable
- {"name": "children", "return": "jqLite", "args": [
- {"name": "selector", "insertion": "'selector'"}
- ]},
- {"name": "clone", "return": "jqLite", "args": []},
- {"name": "clone", "return": "jqLite", "args": [
- {"name": "data+Events", "insertion": "withDataAndEvents:true|false"}
- ]},
- {"name": "clone", "return": "jqLite", "args": [
- {"name": "data+Events", "insertion": "withDataAndEvents:true|false"},
- {"name": "deep", "insertion": "deepWithDataAndEvents:true|false"}
- ]},
- {"name": "contents", "return": "jqLite", "args": []},
- {"name": "css", "return": "String", "args": [
- {"name": "propName", "insertion": "'propertyName'"}
- ]},
- {"name": "css", "return": "jqLite", "args": [
- {"name": "propNames", "insertion": "['propName1','propName2']"}
- ]},
- {"name": "css", "return": "jqLite", "args": [
- {"name": "propName", "insertion": "'propertyName'"},
- {"name": "value", "insertion": "'String'|Number"}
- ]},
- {"name": "css", "return": "jqLite", "args": [
- {"name": "propName", "insertion": "'propertyName'"},
- {"name": "fn", "insertion": "(index, value) ->"}
- ]},
- {"name": "css", "return": "jqLite", "args": [
- {"name": "props", "insertion": "propertyMapObject"}
- ]},
- {"name": "data", "return": "jqLite", "args": [
- {"name": "key", "insertion": "'key'"},
- {"name": "value"}
- ]},
- {"name": "data", "return": "jqLite", "args": [
- {"name": "obj", "insertion": "keyValueObject"}
- ]},
- {"name": "data", "return": "Object", "args": [
- {"name": "key", "insertion": "'key'"}
- ]},
- {"name": "data", "return": "Object", "args": []},
- {"name": "eq", "return": "jqLite", "args": [
- {"name": "index"}
- ]},
- {"name": "eq", "return": "jqLite", "args": [
- {"name": "-index"}
- ]},
- {"name": "find", "return": "jqLite", "args": [
- {"name": "criteria", "insertion": "'tag name selector only'|DOMElement|jqLite"}
- ]},
- {"name": "hasClass", "return": "Boolean", "args": [
- {"name": "className", "insertion": "'className'"}
- ]},
- {"name": "html", "return": "String", "args": []},
- {"name": "html", "return": "jqLite", "args": [
- {"name": "string", "insertion": "'htmlString'"}
- ]},
- {"name": "html", "return": "jqLite", "args": [
- {"name": "fn", "insertion": "(index, oldhtml) ->"}
- ]},
- {"name": "next", "return": "jqLite", "args": []},
- // this overload only be supported in unstable
- {"name": "next", "return": "jqLite", "args": [
- {"name": "selector", "insertion": "'selector'"}
- ]},
- {"name": "parent", "return": "jqLite", "args": []},
- // this overload only be supported in unstable
- {"name": "parent", "return": "jqLite", "args": [
- {"name": "selector", "insertion": "'selector'"}
- ]},
- {"name": "prepend", "return": "jqLite", "args": [
- {"name": "content…", "insertion": "'htmlString'|Array|DOMElement|jqLite"}
- ]},
- {"name": "prepend", "return": "jqLite", "args": [
- {"name": "fn", "insertion": "(index, html) ->"}
- ]},
- {"name": "prop", "return": "String", "args": [
- {"name": "name", "insertion": "'propertyName'"}
- ]},
- {"name": "prop", "return": "jqLite", "args": [
- {"name": "name", "insertion": "'propertyName'"},
- {"name": "value", "insertion": "'String'|Number|Boolean"}
- ]},
- {"name": "prop", "return": "jqLite", "args": [
- {"name": "properties", "insertion": "propertyMapObject"}
- ]},
- {"name": "prop", "return": "jqLite", "args": [
- {"name": "name", "insertion": "'propertyName'"},
- {"name": "fn", "insertion": "(index, oldPropertyValue) ->"}
- ]},
- {"name": "ready", "return": "jqLite", "args": [
- {"name": "handler", "insertion": "() ->"}
- ]},
- {"name": "remove", "return": "jqLite", "args": []},
- {"name": "remove", "return": "jqLite", "args": [
- {"name": "selector", "insertion": "'selector'"}
- ]},
- {"name": "removeAttr", "return": "jqLite", "args": [
- {"name": "name", "insertion": "'attributeName(s) delimited with spaces'"}
- ]},
- {"name": "removeClass", "return": "jqLite", "args": []},
- {"name": "removeClass", "return": "jqLite", "args": [
- {"name": "className", "insertion": "'className(s) delimited with spaces'"}
- ]},
- {"name": "removeClass", "return": "jqLite", "args": [
- {"name": "fn", "insertion": "(index, class) ->"}
- ]},
- {"name": "removeData", "return": "jqLite", "args": []},
- {"name": "removeData", "return": "jqLite", "args": [
- {"name": "name", "insertion": "'name'"}
- ]},
- {"name": "removeData", "return": "jqLite", "args": [
- //TODO: Array of String
- {"name": "list", "insertion": "'name(s) delimited with spaces'|Array"}
- ]},
- {"name": "replaceWith", "return": "jqLite", "args": [
- {"name": "newContent", "insertion": "'htmlString'|DOMElement|jqLite"}
- ]},
- {"name": "replaceWith", "return": "jqLite", "args": [
- {"name": "fn", "insertion": "() ->"}
- ]},
- {"name": "text", "return": "String", "args": []},
- {"name": "text", "return": "jqLite", "args": [
- {"name": "text", "insertion": "'text'"}
- ]},
- {"name": "text", "return": "jqLite", "args": [
- {"name": "fn", "insertion": "(index, text) ->"}
- ]},
- {"name": "toggleClass", "return": "jqLite", "args": []},
- {"name": "toggleClass", "return": "jqLite", "args": [
- {"name": "name", "insertion": "'className(s) delimited with spaces'"}
- ]},
- {"name": "toggleClass", "return": "jqLite", "args": [
- {"name": "name", "insertion": "'className(s) delimited with spaces'"},
- {"name": "switch", "insertion": "true|false"}
- ]},
- {"name": "toggleClass", "return": "jqLite", "args": [
- {"name": "switch", "insertion": "true|false"}
- ]},
- {"name": "toggleClass", "return": "jqLite", "args": [
- {"name": "fn", "insertion": "(index, class, switch) ->"}
- ]},
- {"name": "toggleClass", "return": "jqLite", "args": [
- {"name": "fn", "insertion": "(index, class, switch) ->"},
- {"name": "switch", "insertion": "true|false"}
- ]},
- {"name": "triggerHandler", "return": "Object", "args": [
- {"name": "type", "insertion": "'eventType'"}
- ]},
- {"name": "triggerHandler", "return": "Object", "args": [
- {"name": "type", "insertion": "'eventType'"},
- {"name": "params", "insertion": "Array[extraParameters]"}
- ]},
- {"name": "unbind", "return": "jqLite", "args": []},
- {"name": "unbind", "return": "jqLite", "args": [
- {"name": "type", "insertion": "'eventType - namespaces not supported'"}
- ]},
- {"name": "unbind", "return": "jqLite", "args": [
- {"name": "handler", "insertion": "(eventObject) ->"}
- ]},
- {"name": "unbind", "return": "jqLite", "args": [
- {"name": "type", "insertion": "'eventType - namespaces not supported'"},
- {"name": "handler", "insertion": "(eventObject) ->"}
- ]},
- {"name": "unbind", "return": "jqLite", "args": [
- {"name": "type", "insertion": "'eventType - namespaces not supported'"},
- {"name": "false"}
- ]},
- {"name": "unbind", "return": "jqLite", "args": [
- {"name": "event" }
- ]},
- //TODO: can return String|Number|Array
- {"name": "val", "return": "Object", "args": []},
- {"name": "val", "return": "jqLite", "args": [
- {"name": "value", "insertion": "'value'|Array"}
- ]},
- {"name": "val", "return": "jqLite", "args": [
- {"name": "fn", "insertion": "(index, value) ->"}
- ]},
- {"name": "wrap", "return": "jqLite", "args": [
- {"name": "wrappingElement", "insertion": "'selector'|'htmlString'|DOMElement|jqLite"}
- ]},
- {"name": "wrap", "return": "jqLite", "args": [
- {"name": "fn", "insertion": "(index) ->"}
- ]}
- ]
- },
- // http://code.angularjs.org/1.1.4/docs/api/ng.$exceptionHandler
- {
- "name": "$exceptionHandler",
- "enabled": true,
- "constructors": [
- {"args": [
- {"name": "exception", "insertion": "Error"}
- ]},
- {"args": [
- {"name": "exception", "insertion": "Error"},
- {"name": "cause", "insertion": "'cause'"}
- ]}
- ],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [
- // TODO: support 'insertion' for property / method names
- // TODO: not sure if Array is the type we need to return here?
- {"name": "[ngMock] errors", "insertion": "errors", "return": "Array"}
- ],
- "instance_methods": []
- },
- // http://code.angularjs.org/1.1.4/docs/api/ngMock.$exceptionHandlerProvider
- {
- "name": "$exceptionHandlerProvider",
- "enabled": true,
- "constructors": [],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [],
- "instance_methods": [
- {"name": "[ngMock] mode", "insertion": "mode", "return": "", "args": [
- {"name": "name", "insertion": "'rethrow'|'log'"}
- ]}
- ]
- },
- // http://code.angularjs.org/1.1.4/docs/api/ng.$filter
- {
- "name": "$filter",
- "enabled": true,
- "constructors": [
- // TODO: this is one spot where it would be nice to specify a ctor return type
- // TODO: currently no autocomplete support here
- {"return": "ngFilterCurrency", "args": [
- {"name": "currency", "insertion": "'currency'"}
- ]},
- {"return": "ngFilterDate", "args": [
- {"name": "date", "insertion": "'date'"}
- ]},
- {"return": "ngFilterFilter", "args": [
- {"name": "filter", "insertion": "'filter'"}
- ]},
- {"return": "ngFilterJson", "args": [
- {"name": "json", "insertion": "'json'"}
- ]},
- {"return": "ngFilterLimitTo", "args": [
- {"name": "limitTo", "insertion": "'limitTo'"}
- ]},
- {"return": "ngFilterLinky", "args": [
- {"name": "linky", "insertion": "'linky'"}
- ]},
- {"return": "ngFilterLowercase", "args": [
- {"name": "lowercase", "insertion": "'lowercase'"}
- ]},
- {"return": "ngFilterNumber", "args": [
- {"name": "number", "insertion": "'number'"}
- ]},
- {"return": "ngFilterOrderBy", "args": [
- {"name": "orderBy", "insertion": "'orderBy'"}
- ]},
- {"return": "ngFilterUppercase", "args": [
- {"name": "uppercase", "insertion": "'uppercase'"}
- ]},
- {"return": "ngFilterUserDefined", "args": [
- {"name": "userDefined", "insertion": "'name'"}
- ]}
- ],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [],
- "instance_methods": []
- },
- // HACK: this type doesn't really exist, generic type returned by filter reg
- // TODO: can't use until ctor is supported and ctor can return types
- {
- "name": "ngFilterUserDefined",
- "enabled": true,
- "constructors": [
- {"return": "Object", "args": [
- {"name": "input"}
- ]},
- {"return": "Object", "args": [
- {"name": "input"},
- {"name": "args…"}
- ]}
- ],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [],
- "instance_methods": []
- },
- // HACK: this type doesn't really exist
- // TODO: can't use until ctor is supported and ctor can return types
- // http://code.angularjs.org/1.1.4/docs/api/ng.filter:currency
- {
- "name": "ngFilterCurrency",
- "enabled": true,
- "constructors": [
- {"return": "String", "args": [
- {"name": "input", "insertion": "Number"}
- ]},
- {"return": "String", "args": [
- {"name": "input", "insertion": "Number"},
- {"name": "symbol", "insertion": "'symbolString'"}
- ]}
- ],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [],
- "instance_methods": []
- },
- // HACK: this type doesn't really exist
- // TODO: can't use until ctor is supported and ctor can return types
- // http://code.angularjs.org/1.1.4/docs/api/ng.filter:date
- {
- "name": "ngFilterDate",
- "enabled": true,
- "constructors": [
- {"return": "String", "args": [
- {"name": "input", "insertion": "Date|Number|'string'"}
- ]},
- {"return": "String", "args": [
- {"name": "input", "insertion": "Date|Number|'string'"},
- {"name": "format", "insertion": "'medium'|'short'|'fullDate'|'longDate'|'mediumDate'|'shortDate'|'mediumTime'|'shortTime'|'formatString'"}
- ]}
- ],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [],
- "instance_methods": []
- },
- // HACK: this type doesn't really exist
- // TODO: can't use until ctor is supported and ctor can return types
- // http://code.angularjs.org/1.1.4/docs/api/ng.filter:filter
- {
- "name": "ngFilterFilter",
- "enabled": true,
- "constructors": [
- {"return": "Array", "args": [
- {"name": "array", "insertion": "Array"},
- {"name": "expr", "insertion": "'String'|Object|() ->"},
- {"name": "comparator", "insertion": "true|undefined|(expected, actual) -> "}
- ]}
- ],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [],
- "instance_methods": []
- },
- // HACK: this type doesn't really exist
- // TODO: can't use until ctor is supported and ctor can return types
- // http://code.angularjs.org/1.1.4/docs/api/ng.filter:json
- {
- "name": "ngFilterJson",
- "enabled": true,
- "constructors": [
- {"return": "String", "args": [
- {"name": "input", "insertion": "inputObject"}
- ]}
- ],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [],
- "instance_methods": []
- },
- // HACK: this type doesn't really exist
- // TODO: can't use until ctor is supported and ctor can return types
- // http://code.angularjs.org/1.1.4/docs/api/ng.filter:limitTo
- {
- "name": "ngFilterLimitTo",
- "enabled": true,
- "constructors": [
- {"return": "Array", "args": [
- {"name": "input", "insertion": "Array"},
- {"name": "limit", "insertion": "'String'|Number"}
- ]}
- ],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [],
- "instance_methods": []
- },
- // HACK: this type doesn't really exist
- // TODO: can't use until ctor is supported and ctor can return types
- // http://code.angularjs.org/1.1.4/docs/api/ngSanitize.filter:linky
- {
- "name": "ngFilterLinky",
- "enabled": true,
- "constructors": [
- {"return": "String", "args": [
- {"name": "text", "insertion": "'String'"}
- ]},
- {"return": "String", "args": [
- {"name": "text", "insertion": "'String'"},
- {"name": "target", "insertion": "'blank'|'self'|'parent'|'top'|'named frame'"}
- ]}
- ],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [],
- "instance_methods": []
- },
- // HACK: this type doesn't really exist
- // TODO: can't use until ctor is supported and ctor can return types
- // http://code.angularjs.org/1.1.4/docs/api/ng.filter:lowercase
- {
- "name": "ngFilterLowercase",
- "enabled": true,
- "constructors": [
- {"return": "String", "args": [
- {"name": "input", "insertion": "'String'"}
- ]}
- ],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [],
- "instance_methods": []
- },
- // HACK: this type doesn't really exist
- // TODO: can't use until ctor is supported and ctor can return types
- // http://code.angularjs.org/1.1.4/docs/api/ng.filter:number
- {
- "name": "ngFilterNumber",
- "enabled": true,
- "constructors": [
- {"return": "String", "args": [
- {"name": "number", "insertion": "Number|'String'"}
- ]},
- {"return": "String", "args": [
- {"name": "number", "insertion": "Number|'String'"},
- {"name": "fractionSize", "insertion": "Number|'String'"}
- ]}
- ],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [],
- "instance_methods": []
- },
- // HACK: this type doesn't really exist
- // TODO: can't use until ctor is supported and ctor can return types
- // http://code.angularjs.org/1.1.4/docs/api/ng.filter:orderBy
- {
- "name": "ngFilterOrderBy",
- "enabled": true,
- "constructors": [
- {"return": "Array", "args": [
- {"name": "array", "insertion": "Array"},
- {"name": "expr", "insertion": "() ->|'String'|Array[() ->]|Array['String']"}
- ]},
- {"return": "Array", "args": [
- {"name": "array", "insertion": "Array"},
- {"name": "expr", "insertion": "() ->|'String'|Array[() ->]|Array['String']"},
- {"name": "reverse", "insertion": "true|false"}
- ]}
- ],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [],
- "instance_methods": []
- },
- // HACK: this type doesn't really exist
- // TODO: can't use until ctor is supported and ctor can return types
- // http://code.angularjs.org/1.1.4/docs/api/ng.filter:uppercase
- {
- "name": "ngFilterUppercase",
- "enabled": true,
- "constructors": [
- {"return": "String", "args": [
- {"name": "input", "insertion": "'String'"}
- ]}
- ],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [],
- "instance_methods": []
- },
- // http://code.angularjs.org/1.1.4/docs/api/ng.$filterProvider
- {
- "name": "$filterProvider",
- "enabled": true,
- "constructors": [],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [],
- "instance_methods": [
- {"name": "register", "return": "ngFilterUserDefined", "args": [
- {"name": "name", "insertion": "'name'"},
- {"name": "fn", "insertion": "() -> filterFactoryFn"}
- ]}
- ]
- },
- // http://code.angularjs.org/1.1.4/docs/api/ng.$http
- {
- "name": "$http",
- "enabled": true,
- // TODO: update the snippet in snippet package yo...
- //
- // #return serialized version}${10:
- // transformResponse: (data, headersGetter) ->
- // #return serialized version}${11:
- // cache: ${12:true|false|Cache}}${13:
- // timeout: ${14:msTimeout}}${15:
- // withCredentials: ${16:true|false}}
- // \$http config
- "constructors": [
- // TODO: shouldn't be available with 'new'
- {"return": "ngHttpPromise", "args": [
- {"name": "config…", "insertion": "{ method: 'GET|HEAD|POST|PUT|DELETE|JSONP', url: 'String', params: {}, data: 'String'|{}, headers: {}, xsrfHeaderName: 'Name', xsrfCookieName: 'Name', transformRequest: (data, headersGetter) -> (), transformResponse: (data, headersGetter) -> (), cache: true|false|Cache, timeout: Number, withCredentials: true|false, responseType: 'String' }"}
- ]}
- ],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [
- // TODO: want to use this:
- {"name": "defaults", "return": "ngHttpDefault"},
- // HACK: stuck using this for now
- {"name": "defaults.cache"},
- {"name": "defaults.headers"},
- {"name": "defaults.headers.common"},
- {"name": "defaults.headers.post"},
- {"name": "defaults.headers.put"},
- {"name": "defaults.transformRequest"},
- {"name": "defaults.transformResponse"},
- {"name": "defaults.withCredentials"},
- {"name": "pendingRequests"}
- ],
- "instance_methods":
- [
- {"name": "delete", "return": "ngHttpPromise", "args": [
- {"name": "url", "insertion": "'url'"}
- ]},
- {"name": "delete", "return": "ngHttpPromise", "args": [
- {"name": "url", "insertion": "'url'"},
- {"name": "config", "insertion": "{ config }"}
- ]},
- {"name": "get", "return": "ngHttpPromise", "args": [
- {"name": "url", "insertion": "'url'"}
- ]},
- {"name": "get", "return": "ngHttpPromise", "args": [
- {"name": "url", "insertion": "'url'"},
- {"name": "config", "insertion": "{ config }"}
- ]},
- {"name": "head", "return": "ngHttpPromise", "args": [
- {"name": "url", "insertion": "'url'"}
- ]},
- {"name": "head", "return": "ngHttpPromise", "args": [
- {"name": "url", "insertion": "'url'"},
- {"name": "config", "insertion": "{ config }"}
- ]},
- {"name": "jsonp", "return": "ngHttpPromise", "args": [
- {"name": "url", "insertion": "'url'"}
- ]},
- {"name": "jsonp", "return": "ngHttpPromise", "args": [
- {"name": "url", "insertion": "'url'"},
- {"name": "config", "insertion": "{ config }"}
- ]},
- {"name": "post", "return": "ngHttpPromise", "args": [
- {"name": "url", "insertion": "'url'"},
- {"name": "data"}
- ]},
- {"name": "post", "return": "ngHttpPromise", "args": [
- {"name": "url", "insertion": "'url'"},
- {"name": "data"},
- {"name": "config", "insertion": "{ config }"}
- ]},
- {"name": "put", "return": "ngHttpPromise", "args": [
- {"name": "url", "insertion": "'url'"},
- {"name": "data"}
- ]},
- {"name": "put", "return": "ngHttpPromise", "args": [
- {"name": "url", "insertion": "'url'"},
- {"name": "data"},
- {"name": "config", "insertion": "{ config }"}
- ]}
- ]
- },
- // http://code.angularjs.org/1.1.4/docs/api/ng.$http
- {
-
- "name": "ngHttpPromise",
- "enabled": true,
- //TODO: would like to specify inheritance from ngPromise, with extras
- "inherits": "ngPromise",
- "constructors": [],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [],
- "instance_methods":
- [
- {"name": "then", "return": "ngHttpPromise", "args": [
- {"name": "success", "insertion": "() -> successCallbackFn"},
- {"name": "error", "insertion": "() -> errorCallbackFn"}
- ]},
- {"name": "success", "return": "ngHttpPromise", "args": [
- {"name": "handler", "insertion": "(data, status, headers, config) -> handlerFn"}
- ]},
- {"name": "error", "return": "ngHttpPromise", "args": [
- {"name": "handler", "insertion": "(data, status, headers, config) -> handlerFn"}
- ]}
- ]
- },
- // http://code.angularjs.org/1.1.4/docs/api/ng.$http
- {
- "name": "ngHttpResponse",
- "enabled": true,
- "constructors": [],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [
- {"name": "data", "return": "Object"},
- {"name": "status", "return": "Number"},
- {"name": "headers", "return": "Number"},
- {"name": "config", "return": "ngHttpConfig"}
- ],
- "instance_methods": []
- },
- // http://code.angularjs.org/1.1.4/docs/api/ng.$http
- {
- "name": "ngHttpConfig",
- "enabled": true,
- "constructors": [],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [
- {"name": "method", "return": "String"},
- {"name": "url", "return": "String"},
- // TODO: could be map of strings or map of objects
- {"name": "params", "return": "Object"},
- // TODO: could also be a string
- {"name": "data", "return": "Object"},
- {"name": "headers", "return": "Object"},
- {"name": "xsrfHeaderName", "return": "String"},
- {"name": "xsrfCookieName", "return": "String"},
- // TODO: next 2 could be (data, headersGetter) -> or Array of them
- {"name": "transformRequest", "return": "Function"},
- {"name": "transformResponse", "return": "Function"},
- // TODO: could be a $cacheFactory instance
- {"name": "cache", "return": "Boolean"},
- {"name": "timeout", "return": "Number"},
- {"name": "withCredentials", "return": "Boolean"},
- {"name": "responseType", "return": "String"}
- ],
- "instance_methods": []
- },
- // http://code.angularjs.org/1.1.4/docs/api/ng.$httpBackend
- // http://code.angularjs.org/1.1.4/docs/api/ngMock.$httpBackend
- // http://code.angularjs.org/1.1.4/docs/api/ngMockE2E.$httpBackend
- {
- "name": "$httpBackend",
- "enabled": true,
- "constructors": [],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [],
- "instance_methods": [
- {"name": "expect", "return": "ngHttpBackendResponse", "args": [
- {"name": "verb", "insertion": "'GET|POST|HEAD|JSONP|PUT|DELETE|PATCH'"},
- {"name": "url", "insertion": "'url'|/RegExp/"}
- ]},
- {"name": "expect", "return": "ngHttpBackendResponse", "args": [
- {"name": "verb", "insertion": "'GET|POST|HEAD|JSONP|PUT|DELETE|PATCH'"},
- {"name": "url", "insertion": "'url'|/RegExp/"},
- {"name": "data", "insertion": "'bodyString'|/RegExp/"}
- ]},
- {"name": "expect", "return": "ngHttpBackendResponse", "args": [
- {"name": "verb", "insertion": "'GET|POST|HEAD|JSONP|PUT|DELETE|PATCH'"},
- {"name": "url", "insertion": "'url'|/RegExp/"},
- {"name": "data", "insertion": "'bodyString'|/RegExp/"},
- {"name": "headers", "insertion": "Object|(headers) -> matchFn"}
- ]},
- {"name": "expectDELETE", "return": "ngHttpBackendResponse", "args": [
- {"name": "url", "insertion": "'url'|/RegExp/"}
- ]},
- {"name": "expectDELETE", "return": "ngHttpBackendResponse", "args": [
- {"name": "url", "insertion": "'url'|/RegExp/"},
- {"name": "headers", "insertion": "Object|(headers) -> matchFn"}
- ]},
- {"name": "expectGET", "return": "ngHttpBackendResponse", "args": [
- {"name": "url", "insertion": "'url'|/RegExp/"}
- ]},
- {"name": "expectGET", "return": "ngHttpBackendResponse", "args": [
- {"name": "url", "insertion": "'url'|/RegExp/"},
- {"name": "headers", "insertion": "Object|(headers) -> matchFn"}
- ]},
- {"name": "expectHEAD", "return": "ngHttpBackendResponse", "args": [
- {"name": "url", "insertion": "'url'|/RegExp/"}
- ]},
- {"name": "expectHEAD", "return": "ngHttpBackendResponse", "args": [
- {"name": "url", "insertion": "'url'|/RegExp/"},
- {"name": "headers", "insertion": "Object|(headers) -> matchFn"}
- ]},
- {"name": "expectJSONP", "return": "ngHttpBackendResponse", "args": [
- {"name": "url", "insertion": "'url'|/RegExp/"}
- ]},
- {"name": "expectPATCH", "return": "ngHttpBackendResponse", "args": [
- {"name": "url", "insertion": "'url'|/RegExp/"}
- ]},
- {"name": "expectPATCH", "return": "ngHttpBackendResponse", "args": [
- {"name": "url", "insertion": "'url'|/RegExp/"},
- {"name": "data", "insertion": "'bodyString'|/RegExp/"}
- ]},
- {"name": "expectPATCH", "return": "ngHttpBackendResponse", "args": [
- {"name": "url", "insertion": "'url'|/RegExp/"},
- {"name": "data", "insertion": "'bodyString'|/RegExp/"},
- {"name": "headers", "insertion": "Object|(headers) -> matchFn"}
- ]},
- {"name": "expectPOST", "return": "ngHttpBackendResponse", "args": [
- {"name": "url", "insertion": "'url'|/RegExp/"}
- ]},
- {"name": "expectPOST", "return": "ngHttpBackendResponse", "args": [
- {"name": "url", "insertion": "'url'|/RegExp/"},
- {"name": "data", "insertion": "'bodyString'|/RegExp/"}
- ]},
- {"name": "expectPOST", "return": "ngHttpBackendResponse", "args": [
- {"name": "url", "insertion": "'url'|/RegExp/"},
- {"name": "data", "insertion": "'bodyString'|/RegExp/"},
- {"name": "headers", "insertion": "Object|(headers) -> matchFn"}
- ]},
- {"name": "expectPUT", "return": "ngHttpBackendResponse", "args": [
- {"name": "url", "insertion": "'url'|/RegExp/"}
- ]},
- {"name": "expectPUT", "return": "ngHttpBackendResponse", "args": [
- {"name": "url", "insertion": "'url'|/RegExp/"},
- {"name": "data", "insertion": "'bodyString'|/RegExp/"}
- ]},
- {"name": "expectPUT", "return": "ngHttpBackendResponse", "args": [
- {"name": "url", "insertion": "'url'|/RegExp/"},
- {"name": "data", "insertion": "'bodyString'|/RegExp/"},
- {"name": "headers", "insertion": "Object|(headers) -> matchFn"}
- ]},
- {"name": "flush", "return": "", "args": []},
- {"name": "flush", "return": "", "args": [{"name": "count"}]},
- {"name": "resetExpectations", "return": "", "args": []},
- {"name": "verifyNoOutstandingExpectation", "return": "", "args": []},
- {"name": "verifyNoOutstandingRequest", "return": "", "args": []},
- {"name": "when", "args": [
- {"name": "verb", "insertion": "'GET|POST|HEAD|JSONP|PUT|DELETE|PATCH'"},
- {"name": "url", "insertion": "'url'|/RegExp/"}
- ]},
- {"name": "when", "return": "ngHttpBackendResponse", "args": [
- {"name": "verb", "insertion": "'GET|POST|HEAD|JSONP|PUT|DELETE|PATCH'"},
- {"name": "url", "insertion": "'url'|/RegExp/"},
- {"name": "data", "insertion": "'bodyString'|/RegExp/"}
- ]},
- {"name": "when", "return": "ngHttpBackendResponse", "args": [
- {"name": "verb", "insertion": "'GET|POST|HEAD|JSONP|PUT|DELETE|PATCH'"},
- {"name": "url", "insertion": "'url'|/RegExp/"},
- {"name": "data", "insertion": "'bodyString'|/RegExp/"},
- {"name": "headers", "insertion": "Object|(headers) -> matchFn"}
- ]},
- {"name": "whenDELETE", "return": "ngHttpBackendResponse", "args": [
- {"name": "url", "insertion": "'url'|/RegExp/"}
- ]},
- {"name": "whenDELETE", "return": "ngHttpBackendResponse", "args": [
- {"name": "url", "insertion": "'url'|/RegExp/"},
- {"name": "headers", "insertion": "Object|(headers) -> matchFn"}
- ]},
- {"name": "whenGET", "return": "ngHttpBackendResponse", "args": [
- {"name": "url", "insertion": "'url'|/RegExp/"}
- ]},
- {"name": "whenGET", "return": "ngHttpBackendResponse", "args": [
- {"name": "url", "insertion": "'url'|/RegExp/"},
- {"name": "headers", "insertion": "Object|(headers) -> matchFn"}
- ]},
- {"name": "whenHEAD", "return": "ngHttpBackendResponse", "args": [
- {"name": "url", "insertion": "'url'|/RegExp/"}
- ]},
- {"name": "whenHEAD", "return": "ngHttpBackendResponse", "args": [
- {"name": "url", "insertion": "'url'|/RegExp/"},
- {"name": "headers", "insertion": "Object|(headers) -> matchFn"}
- ]},
- {"name": "whenJSONP", "return": "ngHttpBackendResponse", "args": [
- {"name": "url", "insertion": "'url'|/RegExp/"}
- ]},
- {"name": "whenPATCH", "return": "ngHttpBackendResponse", "args": [
- {"name": "url", "insertion": "'url'|/RegExp/"}
- ]},
- {"name": "whenPATCH", "return": "ngHttpBackendResponse", "args": [
- {"name": "url", "insertion": "'url'|/RegExp/"},
- {"name": "data", "insertion": "'bodyString'|/RegExp/"}
- ]},
- {"name": "whenPATCH", "return": "ngHttpBackendResponse", "args": [
- {"name": "url", "insertion": "'url'|/RegExp/"},
- {"name": "data", "insertion": "'bodyString'|/RegExp/"},
- {"name": "headers", "insertion": "Object|(headers) -> matchFn"}
- ]},
- {"name": "whenPOST", "return": "ngHttpBackendResponse", "args": [
- {"name": "url", "insertion": "'url'|/RegExp/"}
- ]},
- {"name": "whenPOST", "return": "ngHttpBackendResponse", "args": [
- {"name": "url", "insertion": "'url'|/RegExp/"},
- {"name": "data", "insertion": "'bodyString'|/RegExp/"}
- ]},
- {"name": "whenPOST", "return": "ngHttpBackendResponse", "args": [
- {"name": "url", "insertion": "'url'|/RegExp/"},
- {"name": "data", "insertion": "'bodyString'|/RegExp/"},
- {"name": "headers", "insertion": "Object|(headers) -> matchFn"}
- ]},
- {"name": "whenPUT", "return": "ngHttpBackendResponse", "args": [
- {"name": "url", "insertion": "'url'|/RegExp/"}
- ]},
- {"name": "whenPUT", "return": "ngHttpBackendResponse", "args": [
- {"name": "url", "insertion": "'url'|/RegExp/"},
- {"name": "data", "insertion": "'bodyString'|/RegExp/"}
- ]},
- {"name": "whenPUT", "return": "ngHttpBackendResponse", "args": [
- {"name": "url", "insertion": "'url'|/RegExp/"},
- {"name": "data", "insertion": "'bodyString'|/RegExp/"},
- {"name": "headers", "insertion": "Object|(headers) -> matchFn"}
- ]}
- ]
- },
- // HACK: this type doesn't really exist
- {
- "name": "ngHttpBackendResponse",
- "enabled": true,
- "constructors": [],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [],
- "instance_methods": [
- {"name": "respond", "return": "", "args": [
- {"name": "data", "insertion": "'dataString'"}
- ]},
- {"name": "respond", "return": "", "args": [
- {"name": "code", "insertion": "statusCode"},
- {"name": "data", "insertion": "'dataString'"}
- ]},
- {"name": "respond", "return": "", "args": [
- {"name": "data", "insertion": "'dataString'"},
- {"name": "headers"}
- ]},
- {"name": "respond", "return": "", "args": [
- {"name": "code", "insertion": "statusCode"},
- {"name": "data", "insertion": "'dataString'"},
- {"name": "headers"}
- ]},
- {"name": "respond", "return": "", "args": [
- {"name": "fn", "insertion": "(method, url, data, headers) -> responseFn"}
- ]},
- // TODO: support 'insertion' for property / method names
- {"name": "[E2E] passThrough", "insertion": "passThrough", "return": "", "args": []}
- ]
- },
- // http://code.angularjs.org/1.1.4/docs/api/ng.$http
- {
- "name": "$httpProvider",
- "enabled": true,
- "constructors": [],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [
- // TODO: want to use this, but forced to use a hack temporarily
- // TODO: prefer to expose a single property that returns a ngHttpDefault
- {"name": "defaults", "return": "ngHttpDefault"},
- // HACK: do this junk for now
- {"name": "defaults.cache"},
- {"name": "defaults.headers"},
- {"name": "defaults.headers.common"},
- {"name": "defaults.headers.get"},
- {"name": "defaults.headers.head"},
- {"name": "defaults.headers.post"},
- {"name": "defaults.headers.put"},
- {"name": "defaults.headers.delete"},
- {"name": "defaults.headers.jsonp"},
- {"name": "defaults.transformRequest"},
- {"name": "defaults.transformResponse"},
- {"name": "defaults.withCredentials"},
- {"name": "interceptors", "return": "Array"}
- ],
- "instance_methods": []
- },
- // HACK: this type doesn't really exist
- // http://code.angularjs.org/1.1.4/docs/api/ng.$http
- {
- "name": "ngHttpDefault",
- "enabled": true,
- "constructors": [],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [
- //TODO: need "return" on properties
- {"name": "cache", "return": "Boolean"},
- {"name": "headers", "return": "ngHttpHeader"},
- {"name": "transformRequest", "return": "Array"},
- {"name": "transformResponse", "return": "Array"},
- {"name": "withCredentials", "return": "Boolean"}
- ],
- "instance_methods": []
- },
- // HACK: this type doesn't really exist
- // http://code.angularjs.org/1.1.4/docs/api/ng.$http
- {
- "name": "ngHttpHeader",
- "enabled": true,
- "constructors": [],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [
- {"name": "common", "return": "Object"},
- {"name": "get", "return": "Object"},
- {"name": "head", "return": "Object"},
- {"name": "post", "return": "Object"},
- {"name": "put", "return": "Object"},
- {"name": "delete", "return": "Object"},
- {"name": "jsonp", "return": "Object"}
- ],
- "instance_methods": []
- },
- // http://code.angularjs.org/1.1.4/docs/api/AUTO.$injector
- {
- "name": "$injector",
- "enabled": true,
- "constructors": [],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [],
- "instance_methods":
- [
- // TODO: Array of String
- {"name": "annotate", "return": "Array", "args": [
- {"name": "fn", "insertion": "() ->|['String'|() ->]"}
- ]},
- // TODO: this could be any service
- {"name": "get", "return": "Object", "args": [
- {"name": "name", "insertion": "'name'"}
- ]},
- // TODO: this could be any service
- {"name": "instantiate", "return": "Object", "args": [
- {"name": "type", "insertion": "() -> annotatedConstructorFn"}
- ]},
- {"name": "instantiate", "return": "Object", "args": [
- {"name": "type", "insertion": "() -> annotatedConstructorFn"},
- {"name": "locals"}
- ]},
- {"name": "invoke", "return": "Object", "args": [
- {"name": "fn", "insertion": "() -> someFn"}
- ]},
- {"name": "invoke", "return": "Object", "args": [
- {"name": "fn", "insertion": "() -> someFn"},
- {"name": "self"}
- ]},
- {"name": "invoke", "return": "Object", "args": [
- {"name": "fn", "insertion": "() -> someFn"},
- {"name": "self"},
- {"name": "locals"}
- ]}
- ]
- },
- // http://code.angularjs.org/1.1.4/docs/api/ng.$interpolate
- {
- "name": "$interpolate",
- "enabled": true,
- //TODO: prevent 'new'
- "constructors": [
- {"args": [
- {"name": "text"}
- ]},
- {"args": [
- {"name": "text"},
- {"name": "mustHaveExpression", "insertion": "true|false"}
- ]}
- ],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [],
- "instance_methods": [
- {"name": "endSymbol", "return": "String", "args": []},
- {"name": "startSymbol", "return": "String", "args": []}
- ]
- },
- // http://code.angularjs.org/1.1.4/docs/api/ng.$interpolateProvider
- {
- "name": "$interpolateProvider",
- "enabled": true,
- "constructors": [],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [],
- "instance_methods":
- [
- {"name": "endSymbol", "return": "String", "args": []},
- {"name": "endSymbol", "return": "$interpolateProvider", "args": [
- {"name": "value", "insertion": "'symbol'"}
- ]},
- {"name": "startSymbol", "return": "String", "args": []},
- {"name": "startSymbol", "return": "$interpolateProvider", "args": [
- {"name": "value", "insertion": "'symbol'"}
- ]}
- ]
- },
- // http://code.angularjs.org/1.1.4/docs/api/ng.$locale
- {
- "name": "$locale",
- "enabled": true,
- "constructors": [{"args": []}],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [
- {"name": "id", "return": "String"}
- ],
- "instance_methods": []
- },
- // http://code.angularjs.org/1.1.4/docs/api/ng.$location
- // http://docs.angularjs.org/guide/dev_guide.services.$location
- {
- "name": "$location",
- "enabled": true,
- "constructors": [{"args": []}],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [],
- "instance_methods": [
- {"name": "absUrl", "return": "String", "args": []},
- {"name": "hash", "return": "String", "args": []},
- {"name": "hash", "return": "String", "args": [
- {"name": "fragment", "insertion": "'hashFragment'"}
- ]},
- {"name": "host", "return": "String", "args": []},
- {"name": "path", "return": "String", "args": []},
- {"name": "path", "return": "String", "args": [
- {"name": "path", "insertion": "'newPath'"}
- ]},
- {"name": "port", "return": "Number", "args": []},
- {"name": "protocol", "return": "String", "args": []},
- {"name": "replace", "return": "", "args": []},
- {"name": "search", "return": "String", "args": []},
- {"name": "search", "return": "String", "args": [
- {"name": "search", "insertion": "'params'|{paramsHash}"}
- ]},
- {"name": "search", "return": "String", "args": [
- {"name": "search", "insertion": "'params'|{paramsHash}"},
- {"name": "param", "insertion": "'paramValue'"}
- ]},
- {"name": "url", "return": "String", "args": []},
- {"name": "url", "return": "String", "args": [
- {"name": "url", "insertion": "'urlWithoutBasePrefix'"}
- ]}
- ]
- },
- // http://code.angularjs.org/1.1.4/docs/api/ng.$locationProvider
- {
- "name": "$locationProvider",
- "enabled": true,
- "constructors": [],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [],
- "instance_methods":
- [
- {"name": "hashPrefix", "return": "String", "args": []},
- {"name": "hashPrefix", "return": "$locationProvider", "args": [
- {"name": "prefix", "insertion": "'prefix'"}
- ]},
- {"name": "html5Mode", "return": "Boolean", "args": []},
- {"name": "html5Mode", "return": "$locationProvider", "args": [
- {"name": "mode", "insertion": "true|false"}
- ]}
- ]
- },
- // http://code.angularjs.org/1.1.4/docs/api/ng.$log
- {
- "name": "$log",
- "enabled": true,
- "constructors": [],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [
- // http://code.angularjs.org/1.1.4/docs/api/ngMock.$log
- // TODO: support 'insertion' for property / method names
- {"name": "[ngMock] logs", "insertion": "logs", "return": "Array"}
- ],
- "instance_methods": [
- {"name": "error", "return": "", "args": [
- {"name": "message", "insertion": "'message'"}
- ]},
- {"name": "info", "return": "", "args": [
- {"name": "message", "insertion": "'message'"}
- ]},
- {"name": "log", "return": "", "args": [
- {"name": "message", "insertion": "'message'"}
- ]},
- {"name": "warn", "return": "", "args": [
- {"name": "message", "insertion": "'message'"}
- ]},
- {"name": "debug", "return": "", "args": [
- {"name": "message", "insertion": "'message'"}
- ]},
- // http://code.angularjs.org/1.1.4/docs/api/ngMock.$log
- // TODO: support 'insertion' for property / method names
- {"name": "[ngMock] assertEmpty", "insertion": "assertEmpty", "return": "", "args": []},
- {"name": "[ngMock] reset", "insertion": "reset", "return": "", "args": []}
- ]
- },
- // http://code.angularjs.org/1.1.4/docs/api/ng.$logProvider
- {
- "name": "$logProvider",
- "enabled": true,
- "constructors": [],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [],
- "instance_methods": [
- {"name": "debugEnabled", "return": "Boolean", "args": []},
- // TODO: verify this -- 'flag' doesn't really make sense
- // https://github.com/nlaplante/angular.js/commit/a488ab1c5b290c7825bd929ae5a5be47d41b8256
- {"name": "debugEnabled", "return": "$logProvider", "args": [
- {"name": "flag", "insertion": "true|false"}
- ]}
- ]
- },
- // http://code.angularjs.org/1.1.4/docs/api/ng.$parse
- {
- "name": "$parse",
- "enabled": true,
- "constructors": [
- {"return": "ngParseFunction", "args": [
- {"name": "expr", "insertion": "'expression'"}
- ]}
- ],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [],
- "instance_methods": []
- },
- // HACK: another imaginary type
- // http://code.angularjs.org/1.1.4/docs/api/ng.$parse
- {
- "name": "ngParseFunction",
- "enabled": true,
- "constructors": [
- //TODO: not for use with 'new'
- {"return": "String", "args": [
- {"name": "context", "insertion": "scope"},
- {"name": "locals", "insertion": "ObjectHash"}
- ]}
- ],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [
- {"name": "literal", "return": "Boolean"},
- {"name": "constant", "return": "Boolean"},
- // TODO: if expr assignable this is (context, value) ->
- {"name": "assign", "return": "Function"}
- ],
- "instance_methods": []
- },
- // http://code.angularjs.org/1.1.4/docs/api/AUTO.$provide
- {
- "name": "$provide",
- "enabled": true,
- "constructors": [
- {"args": [{"name": "expr"}]}
- ],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [],
- "instance_methods": [
- // TODO: all of these methods return the newly registered instance
- {"name": "constant", "return": "Object", "args": [
- {"name": "name", "insertion": "'name'"},
- {"name": "value"}
- ]},
- {"name": "decorator", "return": "Object", "args": [
- {"name": "message", "insertion": "'message'"},
- {"name": "fn", "insertion": "($delegate) -> decoratorFn"}
- ]},
- {"name": "factory", "return": "Object", "args": [
- {"name": "name", "insertion": "'name'"},
- {"name": "fn", "insertion": "() -> $getFn"}
- ]},
- {"name": "provider", "return": "Object", "args": [
- {"name": "name", "insertion": "'name'"},
- {"name": "provider", "insertion": "Object with $get|() -> constructorFn"}
- ]},
- {"name": "service", "return": "Object", "args": [
- {"name": "name", "insertion": "'name'"},
- {"name": "fn", "insertion": "() -> constructorFn"}
- ]},
- {"name": "value", "return": "Object", "args": [
- {"name": "name", "insertion": "'name'"},
- {"name": "value"}
- ]}
- ]
- },
- // http://code.angularjs.org/1.1.4/docs/api/ng.$q
- {
- "name": "$q",
- "enabled": true,
- "constructors": [],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [],
- "instance_methods": [
- {"name": "all", "return": "ngPromise", "args": [
- {"name": "promises", "insertion": "[promise]|{promiseHash}"}
- ]},
- {"name": "defer", "return": "ngDeferred", "args": []},
- {"name": "reject", "return": "ngPromise", "args": [
- {"name": "reason", "insertion": "constant|'reason'|Exception|Object"}
- ]},
- {"name": "when", "return": "ngPromise", "args": [
- {"name": "value", "insertion": "value|promise"}
- ]}
- ]
- },
- {
- "name": "ngDeferred",
- "enabled": true,
- "constructors": [],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [
- {"name": "promise", "return": "ngPromise"}
- ],
- "instance_methods": [
- // TODO: typically the return values of these aren't used
- {"name": "resolve", "return": "", "args": [
- {"name": "value"}
- ]},
- {"name": "reject", "return": "ngPromise", "args": [
- {"name": "reason", "insertion": "'reason'"}
- ]}
- ]
- },
- {
- "name": "ngPromise",
- "enabled": true,
- "constructors": [],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [],
- "instance_methods": [
- {"name": "then", "return": "ngPromise", "args": [
- {"name": "success", "insertion": "() -> successCallbackFn"},
- {"name": "error", "insertion": "() -> errorCallbackFn"}]}
- ]
- },
- // http://code.angularjs.org/1.1.4/docs/api/ngResource.$resource
- {
- "name": "$resource",
- "enabled": true,
- // TODO: this is really a specialized instance, but we have to duplicate for now
- // TODO: not sure that $http is what we want though.. hmmm
- // https://github.com/justinmahar/SublimeCSAutocompletePlus/issues/24
- "inherits": "$http",
- "constructors": [
- //
- //
- {"args": [{"name": "url"}]},
- {"args": [
- {"name": "url"},
- {"name": "paramDefaults", "insertion": "{paramDefaultsHash}"}
- ]},
- {"args": [
- {"name": "url"},
- {"name": "paramDefaults", "insertion": "{paramDefaultsHash}"},
- {"name": "actions", "insertion": "{ action: 'name', method: 'GET|HEAD|POST|PUT|DELETE|JSONP', params: {}, url: 'String', isArray: true|false, transformRequest: (data, headersGetter) -> (), transformResponse: (data, headersGetter) -> (), cache: true|false|Cache, timeout: Number, withCredentials: true|false, responseType: 'String' }"}
- ]}
- ],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [
- {"name": "$resolved", "return": "Boolean"}
- ],
- // TODO: handle $-prefixed actions
- // var user = User.get({userId:123}, function() {
- // user.abc = true;
- // user.$save();
- // });
- // non-GET instance actions: instance.$action([parameters], [success], [error])
- "instance_methods": [
- {"name": "delete", "args": [
- {"name": "data", "insertion": "postData"}
- ]},
- {"name": "delete", "args": [
- {"name": "params", "insertion": "{paramsHash}"},
- {"name": "data", "insertion": "postData"}
- ]},
- {"name": "delete", "args": [
- {"name": "params", "insertion": "{paramsHash}"},
- {"name": "data", "insertion": "postData"},
- {"name": "success", "insertion": "() -> successFn"}
- ]},
- {"name": "delete", "args": [
- {"name": "params", "insertion": "{paramsHash}"},
- {"name": "data", "insertion": "postData"},
- {"name": "success", "insertion": "() -> successFn"},
- {"name": "error", "insertion": "() -> errorFn"}
- ]},
- {"name": "get", "args": [
- {"name": "params", "insertion": "{paramsHash}"}
- ]},
- {"name": "get", "args": [
- {"name": "params", "insertion": "{paramsHash}"},
- {"name": "success", "insertion": "() -> successFn"}
- ]},
- {"name": "get", "args": [
- {"name": "params", "insertion": "{paramsHash}"},
- {"name": "success", "insertion": "() -> successFn"},
- {"name": "error", "insertion": "() -> errorFn"}
- ]},
- {"name": "query", "args": [
- {"name": "params", "insertion": "{paramsHash}"}
- ]},
- {"name": "query", "args": [
- {"name": "params", "insertion": "{paramsHash}"},
- {"name": "success", "insertion": "() -> successFn"}
- ]},
- {"name": "query", "args": [
- {"name": "params", "insertion": "{paramsHash}"},
- {"name": "success", "insertion": "() -> successFn"},
- {"name": "error", "insertion": "() -> errorFn"}
- ]},
- {"name": "remove", "args": [
- {"name": "data", "insertion": "postData"}
- ]},
- {"name": "remove", "args": [
- {"name": "params", "insertion": "{paramsHash}"},
- {"name": "data", "insertion": "postData"}
- ]},
- {"name": "remove", "args": [
- {"name": "params", "insertion": "{paramsHash}"},
- {"name": "data", "insertion": "postData"},
- {"name": "success", "insertion": "() -> successFn"}
- ]},
- {"name": "remove", "args": [
- {"name": "params", "insertion": "{paramsHash}"},
- {"name": "data", "insertion": "postData"},
- {"name": "success", "insertion": "() -> successFn"},
- {"name": "error", "insertion": "() -> errorFn"}
- ]},
- {"name": "save", "args": [
- {"name": "data", "insertion": "postData"}
- ]},
- {"name": "save", "args": [
- {"name": "params", "insertion": "{paramsHash}"},
- {"name": "data", "insertion": "postData"}
- ]},
- {"name": "save", "args": [
- {"name": "params", "insertion": "{paramsHash}"},
- {"name": "data", "insertion": "postData"},
- {"name": "success", "insertion": "() -> successFn"}
- ]},
- {"name": "save", "args": [
- {"name": "params", "insertion": "{paramsHash}"},
- {"name": "data", "insertion": "postData"},
- {"name": "success", "insertion": "() -> successFn"},
- {"name": "error", "insertion": "() -> errorFn"}
- ]},
- {"name": "$then", "return": "ngPromise", "args": [
- {"name": "success", "insertion": "() -> successCallbackFn"},
- {"name": "error", "insertion": "() -> errorCallbackFn"}]}
- // TODO: $promise and $response are next per
- // https://github.com/angular/angular.js/pull/2060
- ]
- },
- // http://code.angularjs.org/1.1.4/docs/api/ng.$rootElement
- {
- "name": "$rootElement",
- "enabled": true,
- // TODO: this is really a jqLite instance, but we have to duplicate for now
- // https://github.com/justinmahar/SublimeCSAutocompletePlus/issues/24
- "inherits": "jqLite",
- "constructors": [],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [],
- "instance_methods": [
- // angular specific
- // TODO: $controller/NgModelController is not always the return type
- {"name": "controller", "return": "$controller", "args": [
- {"name": "name", "insertion": "'name'"}
- ]},
- {"name": "injector", "return": "$injector", "args": []},
- {"name": "scope", "return": "ngScope", "args": []},
- {"name": "inheritedData", "return": "jqLite", "args": []},
-
- // standard jQuery
- {"name": "addClass", "return": "jqLite", "args": [
- {"name": "className", "insertion": "'className(s) delimited with spaces'"}
- ]},
- {"name": "addClass", "return": "jqLite", "args": [
- {"name": "fn", "insertion": "(index, currentClass) ->"}
- ]},
- {"name": "after", "return": "jqLite", "args": [
- {"name": "content…", "insertion": "'htmlString'|Array|DOMElement|jqLite"}
- ]},
- {"name": "after", "return": "jqLite", "args": [
- {"name": "fn", "insertion": "(index) ->"}
- ]},
- {"name": "append", "return": "jqLite", "args": [
- {"name": "content…", "insertion": "'htmlString'|Array|DOMElement|jqLite"}
- ]},
- {"name": "append", "return": "jqLite", "args": [
- {"name": "fn", "insertion": "(index, html) ->"}
- ]},
- {"name": "attr", "return": "String", "args": [
- {"name": "name", "insertion": "'attributeName'"}
- ]},
- {"name": "attr", "return": "jqLite", "args": [
- {"name": "name", "insertion": "'attributeName'"},
- {"name": "value"}
- ]},
- {"name": "attr", "return": "jqLite", "args": [
- {"name": "attributes", "insertion": "attributeMapObject"}
- ]},
- {"name": "attr", "return": "jqLite", "args": [
- {"name": "name", "insertion": "'attributeName'"},
- {"name": "fn", "insertion": "(index, attr) ->"}
- ]},
- {"name": "bind", "return": "jqLite", "args": [
- {"name": "type", "insertion": "'eventType(s) delimited with spaces - namespaces not supported'"},
- {"name": "handler", "insertion": "(eventObject) ->"}
- ]},
- {"name": "bind", "return": "jqLite", "args": [
- {"name": "type", "insertion": "'eventType(s) delimited with spaces - namespaces not supported'"},
- {"name": "data", "insertion": "eventDataObject"},
- {"name": "handler", "insertion": "(eventObject) ->"}
- ]},
- {"name": "bind", "return": "jqLite", "args": [
- {"name": "type", "insertion": "'eventType'"},
- {"name": "preventBubble", "insertion": "true|false:preventDefaultAction"}
- ]},
- {"name": "bind", "return": "jqLite", "args": [
- {"name": "type", "insertion": "'eventType'"},
- {"name": "data", "insertion": "eventDataObject"},
- {"name": "preventBubble", "insertion": "true|false:preventDefaultAction"}
- ]},
- {"name": "bind", "return": "jqLite", "args": [
- {"name": "events", "insertion": "eventMapObject" }
- ]},
- {"name": "children", "return": "jqLite", "args": []},
- // this overload only be supported in unstable
- {"name": "children", "return": "jqLite", "args": [
- {"name": "selector", "insertion": "'selector'"}
- ]},
- {"name": "clone", "return": "jqLite", "args": []},
- {"name": "clone", "return": "jqLite", "args": [
- {"name": "data+Events", "insertion": "withDataAndEvents:true|false"}
- ]},
- {"name": "clone", "return": "jqLite", "args": [
- {"name": "data+Events", "insertion": "withDataAndEvents:true|false"},
- {"name": "deep", "insertion": "deepWithDataAndEvents:true|false"}
- ]},
- {"name": "contents", "return": "jqLite", "args": []},
- {"name": "css", "return": "String", "args": [
- {"name": "propName", "insertion": "'propertyName'"}
- ]},
- {"name": "css", "return": "jqLite", "args": [
- {"name": "propNames", "insertion": "['propName1','propName2']"}
- ]},
- {"name": "css", "return": "jqLite", "args": [
- {"name": "propName", "insertion": "'propertyName'"},
- {"name": "value", "insertion": "'String'|Number"}
- ]},
- {"name": "css", "return": "jqLite", "args": [
- {"name": "propName", "insertion": "'propertyName'"},
- {"name": "fn", "insertion": "(index, value) ->"}
- ]},
- {"name": "css", "return": "jqLite", "args": [
- {"name": "props", "insertion": "propertyMapObject"}
- ]},
- {"name": "data", "return": "jqLite", "args": [
- {"name": "key", "insertion": "'key'"},
- {"name": "value"}
- ]},
- {"name": "data", "return": "jqLite", "args": [
- {"name": "obj", "insertion": "keyValueObject"}
- ]},
- {"name": "data", "return": "Object", "args": [
- {"name": "key", "insertion": "'key'"}
- ]},
- {"name": "data", "return": "Object", "args": []},
- {"name": "eq", "return": "jqLite", "args": [
- {"name": "index"}
- ]},
- {"name": "eq", "return": "jqLite", "args": [
- {"name": "-index"}
- ]},
- {"name": "find", "return": "jqLite", "args": [
- {"name": "criteria", "insertion": "'tag name selector only'|DOMElement|jqLite"}
- ]},
- {"name": "hasClass", "return": "Boolean", "args": [
- {"name": "className", "insertion": "'className'"}
- ]},
- {"name": "html", "return": "String", "args": []},
- {"name": "html", "return": "jqLite", "args": [
- {"name": "string", "insertion": "'htmlString'"}
- ]},
- {"name": "html", "return": "jqLite", "args": [
- {"name": "fn", "insertion": "(index, oldhtml) ->"}
- ]},
- {"name": "next", "return": "jqLite", "args": []},
- // this overload only be supported in unstable
- {"name": "next", "return": "jqLite", "args": [
- {"name": "selector", "insertion": "'selector'"}
- ]},
- {"name": "parent", "return": "jqLite", "args": []},
- // this overload only be supported in unstable
- {"name": "parent", "return": "jqLite", "args": [
- {"name": "selector", "insertion": "'selector'"}
- ]},
- {"name": "prepend", "return": "jqLite", "args": [
- {"name": "content…", "insertion": "'htmlString'|Array|DOMElement|jqLite"}
- ]},
- {"name": "prepend", "return": "jqLite", "args": [
- {"name": "fn", "insertion": "(index, html) ->"}
- ]},
- {"name": "prop", "return": "String", "args": [
- {"name": "name", "insertion": "'propertyName'"}
- ]},
- {"name": "prop", "return": "jqLite", "args": [
- {"name": "name", "insertion": "'propertyName'"},
- {"name": "value", "insertion": "'String'|Number|Boolean"}
- ]},
- {"name": "prop", "return": "jqLite", "args": [
- {"name": "properties", "insertion": "propertyMapObject"}
- ]},
- {"name": "prop", "return": "jqLite", "args": [
- {"name": "name", "insertion": "'propertyName'"},
- {"name": "fn", "insertion": "(index, oldPropertyValue) ->"}
- ]},
- {"name": "ready", "return": "jqLite", "args": [
- {"name": "handler", "insertion": "() ->"}
- ]},
- {"name": "remove", "return": "jqLite", "args": []},
- {"name": "remove", "return": "jqLite", "args": [
- {"name": "selector", "insertion": "'selector'"}
- ]},
- {"name": "removeAttr", "return": "jqLite", "args": [
- {"name": "name", "insertion": "'attributeName(s) delimited with spaces'"}
- ]},
- {"name": "removeClass", "return": "jqLite", "args": []},
- {"name": "removeClass", "return": "jqLite", "args": [
- {"name": "className", "insertion": "'className(s) delimited with spaces'"}
- ]},
- {"name": "removeClass", "return": "jqLite", "args": [
- {"name": "fn", "insertion": "(index, class) ->"}
- ]},
- {"name": "removeData", "return": "jqLite", "args": []},
- {"name": "removeData", "return": "jqLite", "args": [
- {"name": "name", "insertion": "'name'"}
- ]},
- {"name": "removeData", "return": "jqLite", "args": [
- //TODO: Array of String
- {"name": "list", "insertion": "'name(s) delimited with spaces'|Array"}
- ]},
- {"name": "replaceWith", "return": "jqLite", "args": [
- {"name": "newContent", "insertion": "'htmlString'|DOMElement|jqLite"}
- ]},
- {"name": "replaceWith", "return": "jqLite", "args": [
- {"name": "fn", "insertion": "() ->"}
- ]},
- {"name": "text", "return": "String", "args": []},
- {"name": "text", "return": "jqLite", "args": [
- {"name": "text", "insertion": "'text'"}
- ]},
- {"name": "text", "return": "jqLite", "args": [
- {"name": "fn", "insertion": "(index, text) ->"}
- ]},
- {"name": "toggleClass", "return": "jqLite", "args": []},
- {"name": "toggleClass", "return": "jqLite", "args": [
- {"name": "name", "insertion": "'className(s) delimited with spaces'"}
- ]},
- {"name": "toggleClass", "return": "jqLite", "args": [
- {"name": "name", "insertion": "'className(s) delimited with spaces'"},
- {"name": "switch", "insertion": "true|false"}
- ]},
- {"name": "toggleClass", "return": "jqLite", "args": [
- {"name": "switch", "insertion": "true|false"}
- ]},
- {"name": "toggleClass", "return": "jqLite", "args": [
- {"name": "fn", "insertion": "(index, class, switch) ->"}
- ]},
- {"name": "toggleClass", "return": "jqLite", "args": [
- {"name": "fn", "insertion": "(index, class, switch) ->"},
- {"name": "switch", "insertion": "true|false"}
- ]},
- {"name": "triggerHandler", "return": "Object", "args": [
- {"name": "type", "insertion": "'eventType'"}
- ]},
- {"name": "triggerHandler", "return": "Object", "args": [
- {"name": "type", "insertion": "'eventType'"},
- {"name": "params", "insertion": "Array[extraParameters]"}
- ]},
- {"name": "unbind", "return": "jqLite", "args": []},
- {"name": "unbind", "return": "jqLite", "args": [
- {"name": "type", "insertion": "'eventType - namespaces not supported'"}
- ]},
- {"name": "unbind", "return": "jqLite", "args": [
- {"name": "handler", "insertion": "(eventObject) ->"}
- ]},
- {"name": "unbind", "return": "jqLite", "args": [
- {"name": "type", "insertion": "'eventType - namespaces not supported'"},
- {"name": "handler", "insertion": "(eventObject) ->"}
- ]},
- {"name": "unbind", "return": "jqLite", "args": [
- {"name": "type", "insertion": "'eventType - namespaces not supported'"},
- {"name": "false"}
- ]},
- {"name": "unbind", "return": "jqLite", "args": [
- {"name": "event" }
- ]},
- //TODO: can return String|Number|Array
- {"name": "val", "return": "Object", "args": []},
- {"name": "val", "return": "jqLite", "args": [
- {"name": "value", "insertion": "'value'|Array"}
- ]},
- {"name": "val", "return": "jqLite", "args": [
- {"name": "fn", "insertion": "(index, value) ->"}
- ]},
- {"name": "wrap", "return": "jqLite", "args": [
- {"name": "wrappingElement", "insertion": "'selector'|'htmlString'|DOMElement|jqLite"}
- ]},
- {"name": "wrap", "return": "jqLite", "args": [
- {"name": "fn", "insertion": "(index) ->"}
- ]}
- ]
- },
- // http://code.angularjs.org/1.1.4/docs/api/ng.$rootScope
- // http://code.angularjs.org/1.1.4/docs/api/ng.$rootScope.Scope
- // $rootScope and $scope should just use Codo docs, until we have
- // aliases
- // https://github.com/justinmahar/SublimeCSAutocompletePlus/issues/23
- //
- // http://code.angularjs.org/1.1.4/docs/api/ng.$rootScopeProvider
- {
- "name": "$rootScopeProvider",
- "enabled": true,
- "constructors": [],
- "static_properties": [],
- "static_methods":[],
- "instance_properties": [],
- "instance_methods": [
- {"name": "digestTtl", "args": [{"name": "limitNumber"}]}
- ]
- },
- // http://code.angularjs.org/1.1.4/docs/api/ng.$rootScope
- {
- "name": "$rootScope",
- "enabled": true,
- // TODO: this needs to be a type alias to ngScope
- // TODO: right now, its a copy and paste job
- "inherits": "ngScope",
- "constructors": [],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [
- {"name": "$id"}
- ],
- // TODO: not sure where the Scope() function belongs??
- // https://github.com/angular/angular.js/blob/v1.0.x/src/ng/rootScope.js#L131
- // {"args": []},
- // {"args": [{"name": "providersMap"}]},
- // {"args": [{"name": "providersMap", "name": "instanceCache"}]}
- "instance_methods": [
- {"name": "$apply", "return": "Object", "args": []},
- {"name": "$apply", "return": "Object", "args": [
- {"name": "expr", "insertion": "'String'|(scope) -> expressionFn"}
- ]},
- {"name": "$broadcast", "return": "ngEvent", "args": [
- {"name": "name"}
- ]},
- {"name": "$broadcast", "return": "ngEvent", "args": [
- {"name": "name"}, {"name": "args…"}
- ]},
- {"name": "$destroy", "return": "", "args": []},
- {"name": "$digest", "return": "", "args": []},
- {"name": "$emit", "return": "ngEvent", "args": [
- {"name": "name"}
- ]},
- {"name": "$emit", "return": "ngEvent", "args": [
- {"name": "name"}, {"name": "args…"}
- ]},
- {"name": "$eval", "return": "Object", "args": [
- {"name": "expr", "insertion": "'String'|(scope) -> expressionFn"}
- ]},
- {"name": "$evalAsync", "return": "", "args": [
- {"name": "expr", "insertion": "'String'|(scope) -> expressionFn"}
- ]},
- {"name": "$new", "return": "ngScope", "args": [
- {"name": "isolate", "insertion": "true|false"}
- ]},
- {"name": "$on", "return": "Function", "args": [
- // http://code.angularjs.org/1.1.4/docs/api/ng.directive:ngInclude
- // http://code.angularjs.org/1.1.4/docs/api/ng.directive:ngView
- // http://code.angularjs.org/1.1.4/docs/api/ng.$route
- // http://code.angularjs.org/1.1.4/docs/api/ng.$rootScope.Scope#$destroy
- {"name": "name", "insertion": "'$destroy'|'$locationChangeStart'|'$locationChangeSuccess'|'$includeContentLoaded'|'$viewContentLoaded'|'$routeChangeError'|'$routeChangeStart'|'$routeChangeSuccess'|'$routeUpdate'"},
- // TODO: would like to specify event is an Event type here
- {"name": "listener", "insertion": "(event, args) -> listenerFn"}
- ]},
- {"name": "$watch", "return": "Function", "args": [
- {"name": "expr", "insertion": "'String'|(scope) -> watchFn"}
- ]},
- {"name": "$watch", "return": "Function", "args": [
- {"name": "expr", "insertion": "'String'|(scope) -> watchFn"},
- {"name": "listener", "insertion": "'String'|(newValue, oldValue, scope) -> listenFn"}
- ]},
- {"name": "$watch", "return": "Function", "args": [
- {"name": "expr", "insertion": "'String'|(scope) -> watchFn"},
- {"name": "listener", "insertion": "'String'|(newValue, oldValue, scope) -> listenFn"},
- {"name": "eq", "insertion": "true:forEquality|false:forRef"}
- ]},
- {"name": "$watchCollection", "return": "Function", "args": [
- {"name": "expr", "insertion": "'String'|(scope) -> watchFn"},
- {"name": "listener", "insertion": "(newCollection, oldCollection, scope) -> listenFn"}
- ]}
- ]
- },
- // http://code.angularjs.org/1.1.4/docs/api/ng.$route
- {
- "name": "$route",
- "enabled": true,
- //
- // #controller function${1:
- // template: '${2:string}'}${3:
- // templateUrl: '${4:url}'}${5:
- // resolve:
- // '${6:dependencyName}' : ${7:serviceName|factory-function}}${8:
- // redirectTo: ${9:path|function}}${10:
- // reloadOnSearch: ${11:true|false}}
- // \$routeProvider.when '${12:path}', route]]>
- "constructors": [{"args": []}],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [
- // TODO: prefer to expose a single property like this:
- {"name": "current", "return": "ngRoute"},
- // HACK: do this junk for now
- {"name": "current.controller"},
- {"name": "current.locals"},
- {"name": "current.templateUrl"},
- {"name": "current.params"},
- {"name": "current.scope.name"},
- {"name": "routes", "return": "Array"}
- ],
- "instance_methods": [
- {"name": "reload", "args": []}
- ]
- },
- // HACK: this type doesn't officially exist
- // http://code.angularjs.org/1.1.4/docs/api/ng.$route
- {
- "name": "ngRoute",
- "enabled": true,
- "constructors": [],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [
- {"name": "controller", "return": "$controller"},
- {"name": "locals", "return": "Object"},
- {"name": "templateUrl", "return": "String"},
- {"name": "params", "return": "Object"},
- // TODO: figure out if scope is an instance of ngScope ??
- {"name": "scope.name", "return": "String"}
- ],
- "instance_methods": []
- },
- // http://code.angularjs.org/1.1.4/docs/api/ng.$routeProvider
- {
- "name": "$routeProvider",
- "enabled": true,
- "constructors": [],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [],
- "instance_methods": [
- {"name": "otherwise", "return": "$routeProvider", "args": [
- {"name": "params", "insertion": "{paramsHash}"}
- ]},
- //route =
- // controller: () ->
- // #controller function${1:
- // template: '${2:string}'}${3:
- // templateUrl: '${4:url}'}${5:
- // resolve:
- // '${6:dependencyName}' : ${7:serviceName|factory-function}}${8:
- // redirectTo: ${9:path|function}}${10:
- // reloadOnSearch: ${11:true|false}}
- // \$routeProvider.when '${12:path}', route
- {"name": "when", "return": "$routeProvider", "args": [
- {"name": "path"},
- {"name": "route", "insertion": "{ controller: 'String'|() -> (constructorFn), template: 'String'|(routeParams) -> ('template'), templateUrl: 'String'|(routeParams) -> ('templateUrl'), resolve: {'key': 'String'|() -> (factoryFn)}, redirectTo: 'String'|(routeParams, path, search) -> (redirectFn), reloadOnSearch: true|false, caseInsensitiveMatch: true|false}"}
- ]}
- ]
- },
- // http://code.angularjs.org/1.1.4/docs/api/ng.$routeParams
- {
- "name": "$routeParams",
- "enabled": true,
- "constructors": [],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [],
- "instance_methods": []
- },
- // http://code.angularjs.org/1.1.4/docs/api/ngSanitize.$sanitize
- {
- "name": "$sanitize",
- "enabled": true,
- "constructors": [
- {"return": "String", "args": [
- {"name": "html", "insertion": "'html'"}
- ]}
- ],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [],
- "instance_methods": []
- },
- // http://code.angularjs.org/1.1.4/docs/api/ng.$sniffer
- {
- "name": "$sniffer",
- "enabled": true,
- "constructors": [],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [],
- "instance_methods": []
- },
- // http://code.angularjs.org/1.1.4/docs/api/ng.$templateCache
- {
- "name": "$templateCache",
- "enabled": true,
- // TODO: this is really a $cacheFactory instance, but we have to duplicate for now
- // https://github.com/justinmahar/SublimeCSAutocompletePlus/issues/24
- "inherits": "$cacheFactory",
- "constructors": [],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [],
- "instance_methods": [
- {"name": "put", "return": "Object", "args": [
- {"name": "key", "insertion": "'key'"},
- {"name": "html", "insertion": "'html'"}
- ]},
- {"name": "get", "return": "Object", "args": [
- {"name": "key", "insertion": "'key'"}
- ]},
- {"name": "remove", "return": "", "args": [
- {"name": "key", "insertion": "'key'"}
- ]},
- {"name": "removeAll", "return": "", "args": []},
- {"name": "destroy", "return": "", "args": []}
- ]
- },
- // http://code.angularjs.org/1.1.4/docs/api/ng.$timeout
- {
- "name": "$timeout",
- "enabled": true,
- "constructors": [
- {"args": [
- {"name": "fn", "insertion": "() -> someFn"}
- ]},
- {"args": [
- {"name": "fn", "insertion": "() -> someFn"},
- {"name": "delay", "insertion": "milliseconds"}
- ]},
- {"args": [
- {"name": "fn", "insertion": "() -> someFn"},
- {"name": "delay", "insertion": "milliseconds"},
- {"name": "invokeApply", "insertion": "true|false"}
- ]}
- ],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [],
- "instance_methods": [
- {"name": "cancel", "return": "Boolean", "args": []},
- {"name": "cancel", "return": "Boolean", "args": [
- {"name": "promise"}
- ]},
- // http://code.angularjs.org/1.1.4/docs/api/ngMock.$timeout
- // TODO: support 'insertion' for property / method names
- {"name": "[ngMock] flush", "insertion": "flush", "return": "", "args": []},
- {"name": "[ngMock] verifyNoPendingTasks", "insertion": "verifyNoPendingTasks", "return": "", "args": []}
- ]
- },
- // http://code.angularjs.org/1.1.4/docs/api/ng.$window
- // TODO: should we list the standard window methods here?
- // generally speaking, we shouldn't be using them anyhow
- // https://developer.mozilla.org/en-US/docs/DOM/window
- {
- "name": "$window",
- "enabled": true,
- "constructors": [],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [],
- "instance_methods": []
- },
- {
- "name": "$",
- "enabled": true,
- "constructors": [{"args": [{"name":"config"}]}],
- "static_properties":
- [
- {"name":"boxModel"},
- {"name":"browser"},
- {"name":"cssHooks"},
- {"name":"fx.interval"},
- {"name":"fx.off"},
- {"name":"support"}
- ],
- "static_methods":
- [
- {"name":"ajax", "args": [{"name": "url"}]},
- {"name":"ajax", "args": [{"name": "url"}, {"name": "settings"}]},
- {"name":"ajax", "args": []},
- {"name":"ajax", "args": [{"name": "settings"}]},
- {"name":"ajaxPrefilter", "args": [{"name": "handler(options, originalOptions, jqXHR)"}]},
- {"name":"ajaxPrefilter", "args": [{"name": "dataTypes"}, {"name": "handler(options, originalOptions, jqXHR)"}]},
- {"name":"ajaxSetup", "args": [{"name": "options"}]},
- {"name":"ajaxTransport", "args": [{"name": "handler(options, originalOptions, jqXHR)"}]},
- {"name":"ajaxTransport", "args": [{"name": "dataType"}, {"name": "handler(options, originalOptions, jqXHR)"}]},
- {"name":"Callbacks", "args": [{"name": "flags"}]},
- {"name":"contains", "args": [{"name": "container"}, {"name": "contained"}]},
- {"name":"data", "args": [{"name": "element"}]},
- {"name":"data", "args": [{"name": "element"}, {"name": "key"}]},
- {"name":"data", "args": [{"name": "element"}, {"name": "key"}, {"name": "value"}]},
- {"name":"Deferred", "args": []},
- {"name":"Deferred", "args": [{"name": "[beforeStart]"}]},
- {"name":"dequeue", "args": [{"name": "element"}]},
- {"name":"dequeue", "args": [{"name": "element"}, {"name": "queueName"}]},
- {"name":"each", "args": [{"name": "collection"}]},
- {"name":"each", "args": [{"name": "collection"}, {"name": "callback(indexInArray, valueOfElement)"}]},
- {"name":"error", "args": [{"name": "message"}]},
- {"name":"extend", "args": [{"name": "target"}, {"name": "object1"}]},
- {"name":"extend", "args": [{"name": "target"}, {"name": "object1"}, {"name": "obj2 .. objN"}]},
- {"name":"extend", "args": [{"name": "deep"}, {"name": "target"}, {"name": "obj1 .. objN"}]},
- {"name":"get", "args": [{"name": "url"}]},
- {"name":"get", "args": [{"name": "url"}, {"name": "data"}]},
- {"name":"get", "args": [{"name": "url"}, {"name": "data"}, {"name": "success(data, textStatus, jqXHR)"}]},
- {"name":"get", "args": [{"name": "url"}, {"name": "data"}, {"name": "success(data, textStatus, jqXHR)"}, {"name": "dataType"}]},
- {"name":"getJSON", "args": [{"name": "url"}]},
- {"name":"getJSON", "args": [{"name": "url"}, {"name": "data"}]},
- {"name":"getJSON", "args": [{"name": "url"}, {"name": "data"}, {"name": "success(data, textStatus, jqXHR)"}]},
- {"name":"getScript", "args": [{"name": "url"}]},
- {"name":"getScript", "args": [{"name": "url"}, {"name": "success(script, textStatus, jqXHR)"}]},
- {"name":"globalEval", "args": [{"name": "code"}]},
- {"name":"grep", "args": [{"name": "array"}, {"name": "function(elementOfArray, indexInArray)"}]},
- {"name":"grep", "args": [{"name": "array"}, {"name": "function(elementOfArray, indexInArray)"}, {"name": "invert"}]},
- {"name":"hasData", "args": [{"name": "element"}]},
- {"name":"holdReady", "args": [{"name": "hold"}]},
- {"name":"inArray", "args": [{"name": "valueE"}, {"name": "array"}]},
- {"name":"inArray", "args": [{"name": "valueE"}, {"name": "array"}, {"name": "fromIndex"}]},
- {"name":"isArray", "args": [{"name": "obj"}]},
- {"name":"isEmptyObject", "args": [{"name": "object"}]},
- {"name":"isFunction", "args": [{"name": "obj"}]},
- {"name":"isNumeric", "args": [{"name": "value"}]},
- {"name":"isPlainObject", "args": [{"name": "object"}]},
- {"name":"isWindow", "args": [{"name": "obj"}]},
- {"name":"isXMLDoc", "args": [{"name": "node"}]},
- {"name":"makeArray", "args": [{"name": "obj"}]},
- {"name":"map", "args": [{"name": "array"}, {"name": "callback(elementOfArray, indexInArray)"}]},
- {"name":"map", "args": [{"name": "arrayOrObject"}, {"name": "callback(value, indexOrKey)"}]},
- {"name":"merge", "args": [{"name": "first"}, {"name": "second"}]},
- {"name":"noConflict", "args": []},
- {"name":"noConflict", "args": [{"name": "removeAll"}]},
- {"name":"noop", "args": []},
- {"name":"now", "args": []},
- {"name":"param", "args": [{"name": "obj"}]},
- {"name":"param", "args": [{"name": "obj"}, {"name": "traditional"}]},
- {"name":"parseHTML", "args": [{"name": "data"}]},
- {"name":"parseHTML", "args": [{"name": "data"}, {"name": "context"}]},
- {"name":"parseHTML", "args": [{"name": "data"}, {"name": "context"}, {"name": "keepScripts"}]},
- {"name":"parseJSON", "args": [{"name": "json"}]},
- {"name":"parseXML", "args": [{"name": "data"}]},
- {"name":"post", "args": [{"name": "url"}]},
- {"name":"post", "args": [{"name": "url"}, {"name": "data"}]},
- {"name":"post", "args": [{"name": "url"}, {"name": "data"}, {"name": "success(data, textStatus, jqXHR)"}]},
- {"name":"post", "args": [{"name": "url"}, {"name": "data"}, {"name": "success(data, textStatus, jqXHR)"}, {"name": "dataType"}]},
- {"name":"proxy", "args": [{"name": "function"}, {"name": "context"}]},
- {"name":"proxy", "args": [{"name": "context"}, {"name": "name"}]},
- {"name":"proxy", "args": [{"name": "function"}, {"name": "context"}]},
- {"name":"proxy", "args": [{"name": "function"}, {"name": "context"}, {"name": "additionalArguments"}]},
- {"name":"proxy", "args": [{"name": "context"}, {"name": "name"}]},
- {"name":"proxy", "args": [{"name": "context"}, {"name": "name"}, {"name": "additionalArguments"}]},
- {"name":"queue", "args": [{"name": "element"}]},
- {"name":"queue", "args": [{"name": "element"}, {"name": "queueName"}]},
- {"name":"queue", "args": [{"name": "element"}, {"name": "queueName"}, {"name": "newQueue"}]},
- {"name":"queue", "args": [{"name": "element"}, {"name": "queueName"}, {"name": "callback()"}]},
- {"name":"removeData", "args": [{"name": "element"}]},
- {"name":"removeData", "args": [{"name": "element"}, {"name": "name"}]},
- {"name":"sub", "args": []},
- {"name":"trim", "args": [{"name": "str"}]},
- {"name":"type", "args": [{"name": "obj"}]},
- {"name":"unique", "args": [{"name": "array"}]},
- {"name":"when", "args": [{"name": "deferreds"}]}
- ],
- "instance_properties":
- [
- {"name":"context"},
- {"name":"jquery"},
- {"name":"length"},
- {"name":"selector"}
- ],
- "instance_methods":
- [
- {"name":"add", "args": [{"name": "selector"}]},
- {"name":"add", "args": [{"name": "elements"}]},
- {"name":"add", "args": [{"name": "html"}]},
- {"name":"add", "args": [{"name": "jQueryObject"}]},
- {"name":"add", "args": [{"name": "selector"}, {"name": "context"}]},
- {"name":"addBack", "args": []},
- {"name":"addBack", "args": [{"name": "selector"}]},
- {"name":"addClass", "args": [{"name": "className"}]},
- {"name":"addClass", "args": [{"name": "function(index, currentClass)"}]},
- {"name":"after", "args": [{"name": "content"}]},
- {"name":"after", "args": [{"name": "content"}, {"name": "additionalContent"}]},
- {"name":"after", "args": [{"name": "function(index)"}]},
- {"name":"ajaxComplete", "args": [{"name": "handler(event, XMLHttpRequest, ajaxOptions)"}]},
- {"name":"ajaxError", "args": [{"name": "handler(event, jqXHR, ajaxSettings, thrownError)"}]},
- {"name":"ajaxSend", "args": [{"name": "handler(event, jqXHR, ajaxOptions)"}]},
- {"name":"ajaxStart", "args": [{"name": "handler()"}]},
- {"name":"ajaxStop", "args": [{"name": "handler()", "insertion": "->"}]},
- {"name":"ajaxSuccess", "args": [{"name": "handler(event, XMLHttpRequest, ajaxOptions)"}]},
- {"name":"andSelf", "args": []},
- {"name":"animate", "args": [{"name": "properties"}, {"name": "[duration_default_400]"}, {"name": "[easing_default_swing]"}, {"name": "[complete()]"}]},
- {"name":"animate", "args": [{"name": "properties"}, {"name": "options"}]},
- {"name":"append", "args": [{"name": "content"}]},
- {"name":"append", "args": [{"name": "content"}, {"name": "additionalContent"}]},
- {"name":"append", "args": [{"name": "function(index, html)"}]},
- {"name":"appendTo", "args": [{"name": "target"}]},
- {"name":"attr", "args": [{"name": "attributeName"}]},
- {"name":"attr", "args": [{"name": "attributeName"}, {"name": "value"}]},
- {"name":"attr", "args": [{"name": "attributes"}]},
- {"name":"attr", "args": [{"name": "attributeName"}, {"name": "function(index, attr)"}]},
- {"name":"before", "args": [{"name": "content"}]},
- {"name":"before", "args": [{"name": "content"}, {"name": "additionalContent"}]},
- {"name":"bind", "args": [{"name": "eventType"}, {"name": "[eventData]"}, {"name": "[handler(eventObject)]"}]},
- {"name":"bind", "args": [{"name": "eventType"}, {"name": "[eventData]"}, {"name": "preventBubble"}]},
- {"name":"bind", "args": [{"name": "events"}]},
- {"name":"blur", "args": []},
- {"name":"blur", "args": [{"name": "handler(eventObject)"}]},
- {"name":"blur", "args": [{"name": "[eventData]"}, {"name": "handler(eventObject)"}]},
- {"name":"change", "args": [{"name": "handler(eventObject)"}]},
- {"name":"change", "args": [{"name": "[eventData]"}, {"name": "handler(eventObject)"}]},
- {"name":"change", "args": []},
- {"name":"children", "args": [{"name": "[selector]"}]},
- {"name":"clearQueue", "args": [{"name": "[queueName]"}]},
- {"name":"click", "args": [{"name": "handler(eventObject)"}]},
- {"name":"click", "args": [{"name": "[eventData]"}, {"name": "handler(eventObject)"}]},
- {"name":"click", "args": []},
- {"name":"clone", "args": [{"name": "withDataAndEvents"}]},
- {"name":"clone", "args": [{"name": "withDataAndEvents"}, {"name": "[deepWithDataAndEvents] "}]},
- {"name":"closest", "args": [{"name": "selector"}, {"name": "[context]"}]},
- {"name":"closest", "args": [{"name": "jQueryObject"}]},
- {"name":"closest", "args": [{"name": "element"}]},
- {"name":"contents", "args": []},
- {"name":"css", "args": [{"name": "propertyName"}]},
- {"name":"css", "args": [{"name": "propertyNames"}]},
- {"name":"css", "args": [{"name": "propertyName"}, {"name": "value"}]},
- {"name":"css", "args": [{"name": "propertyName"}, {"name": "function(index, value)"}]},
- {"name":"css", "args": [{"name": "properties"}]},
- {"name":"data", "args": [{"name": "key"}, {"name": "value"}]},
- {"name":"data", "args": [{"name": "obj"}]},
- {"name":"data", "args": [{"name": "key"}]},
- {"name":"data", "args": []},
- {"name":"dblclick", "args": [{"name": "handler(eventObject)"}]},
- {"name":"dblclick", "args": [{"name": "[eventData]"}, {"name": "handler(eventObject)"}]},
- {"name":"dblclick", "args": []},
- {"name":"delay", "args": [{"name": "duration"}, {"name": "[queueName]"}]},
- {"name":"delegate", "args": [{"name": "selector"}, {"name": "eventType"}, {"name": "handler(eventObject)"}]},
- {"name":"delegate", "args": [{"name": "selector"}, {"name": "eventType"}, {"name": "eventData"}, {"name": "handler(eventObject)"}]},
- {"name":"delegate", "args": [{"name": "selector"}, {"name": "events"}]},
- {"name":"dequeue", "args": [{"name": "[queueName]"}]},
- {"name":"detach", "args": [{"name": "[selector]"}]},
- {"name":"die", "args": []},
- {"name":"die", "args": [{"name": "eventType"}, {"name": "[handler]"}]},
- {"name":"die", "args": [{"name": "events"}]},
- {"name":"each", "args": [{"name": "function(index, Element)"}]},
- {"name":"empty", "args": []},
- {"name":"end", "args": []},
- {"name":"eq", "args": [{"name": "index"}]},
- {"name":"eq", "args": [{"name": "-index"}]},
- {"name":"error", "args": [{"name": "handler(eventObject)"}]},
- {"name":"error", "args": [{"name": "[eventData]"}, {"name": "handler(eventObject)"}]},
- {"name":"fadeIn", "args": [{"name": "[duration_default_400]"}, {"name": "[complete()]"}]},
- {"name":"fadeIn", "args": [{"name": "options"}]},
- {"name":"fadeIn", "args": [{"name": "[duration_default_400]"}, {"name": "[easing_default_swing]"}, {"name": "[complete()]"}]},
- {"name":"fadeOut", "args": [{"name": "[duration_default_400]"}, {"name": "[complete()]"}]},
- {"name":"fadeOut", "args": [{"name": "options"}]},
- {"name":"fadeOut", "args": [{"name": "[duration_default_400]"}, {"name": "[easing_default_swing]"}, {"name": "[complete()]"}]},
- {"name":"fadeTo", "args": [{"name": "duration"}, {"name": "opacity"}, {"name": "[complete]"}]},
- {"name":"fadeTo", "args": [{"name": "duration"}, {"name": "opacity"}, {"name": "[easing]"}, {"name": "[complete()]"}]},
- {"name":"fadeToggle", "args": [{"name": "[duration_default_400]"}, {"name": "[easing_default_swing]"}, {"name": "[complete()]"}]},
- {"name":"fadeToggle", "args": [{"name": "options"}]},
- {"name":"filter", "args": [{"name": "selector"}]},
- {"name":"filter", "args": [{"name": "function(index)"}]},
- {"name":"filter", "args": [{"name": "element"}]},
- {"name":"filter", "args": [{"name": "jQueryObject"}]},
- {"name":"find", "args": [{"name": "selector"}]},
- {"name":"find", "args": [{"name": "jQueryObject"}]},
- {"name":"find", "args": [{"name": "element"}]},
- {"name":"finish", "args": [{"name": "[queue]"}]},
- {"name":"first", "args": []},
- {"name":"focus", "args": [{"name": "handler(eventObject)"}]},
- {"name":"focus", "args": [{"name": "[eventData]"}, {"name": "handler(eventObject)"}]},
- {"name":"focus", "args": []},
- {"name":"focusin", "args": [{"name": "handler(eventObject)"}]},
- {"name":"focusin", "args": [{"name": "[eventData]"}, {"name": "handler(eventObject)"}]},
- {"name":"focusout", "args": [{"name": "handler(eventObject)"}]},
- {"name":"focusout", "args": [{"name": "[eventData]"}, {"name": "handler(eventObject)"}]},
- {"name":"get", "args": [{"name": "[index]"}]},
- {"name":"has", "args": [{"name": "selector"}]},
- {"name":"has", "args": [{"name": "contained"}]},
- {"name":"hasClass", "args": [{"name": "className"}]},
- {"name":"height", "args": []},
- {"name":"height", "args": [{"name": "value"}]},
- {"name":"height", "args": [{"name": "function(index, height)"}]},
- {"name":"hide", "args": []},
- {"name":"hide", "args": [{"name": "[duration_default_400]"}, {"name": "[complete]"}]},
- {"name":"hide", "args": [{"name": "options"}]},
- {"name":"hide", "args": [{"name": "[duration_default_400]"}, {"name": "[easing_default_swing]"}, {"name": "[complete()]"}]},
- {"name":"hover", "args": [{"name": "handlerIn(eventObject)"}, {"name": "handlerOut(eventObject)"}]},
- {"name":"html", "args": []},
- {"name":"html", "args": [{"name": "htmlString"}]},
- {"name":"html", "args": [{"name": "function(index, oldhtml)"}]},
- {"name":"index", "args": []},
- {"name":"index", "args": [{"name": "selector"}]},
- {"name":"index", "args": [{"name": "element"}]},
- {"name":"innerHeight", "args": []},
- {"name":"innerWidth", "args": []},
- {"name":"insertAfter", "args": [{"name": "target"}]},
- {"name":"insertBefore", "args": [{"name": "target"}]},
- {"name":"is", "args": [{"name": "selector"}]},
- {"name":"is", "args": [{"name": "function(index)"}]},
- {"name":"is", "args": [{"name": "jQueryObject"}]},
- {"name":"is", "args": [{"name": "element"}]},
- {"name":"keydown", "args": []},
- {"name":"keydown", "args": [{"name": "handler(eventObject)"}]},
- {"name":"keydown", "args": [{"name": "[eventData]"}, {"name": "handler(eventObject)"}]},
- {"name":"keypress", "args": []},
- {"name":"keypress", "args": [{"name": "handler(eventObject)"}]},
- {"name":"keypress", "args": [{"name": "[eventData]"}, {"name": "handler(eventObject)"}]},
- {"name":"keyup", "args": []},
- {"name":"keyup", "args": [{"name": "handler(eventObject)"}]},
- {"name":"keyup", "args": [{"name": "[eventData]"}, {"name": "handler(eventObject)"}]},
- {"name":"last", "args": []},
- {"name":"live", "args": [{"name": "events"}, {"name": "handler(eventObject)"}]},
- {"name":"live", "args": [{"name": "events"}, {"name": "data"}, {"name": "handler(eventObject)"}]},
- {"name":"live", "args": [{"name": "events"}]},
- {"name":"load", "args": [{"name": "url"}, {"name": "[data]"}, {"name": "[complete(responseText, textStatus, XMLHttpRequest)]"}]},
- {"name":"load", "args": [{"name": "handler(eventObject)"}]},
- {"name":"load", "args": [{"name": "[eventData]"}, {"name": "handler(eventObject)"}]},
- {"name":"map", "args": [{"name": "callback(index, domElement)"}]},
- {"name":"mousedown", "args": []},
- {"name":"mousedown", "args": [{"name": "handler(eventObject)"}]},
- {"name":"mousedown", "args": [{"name": "[eventData]"}, {"name": "handler(eventObject)"}]},
- {"name":"mouseenter", "args": []},
- {"name":"mouseenter", "args": [{"name": "handler(eventObject)"}]},
- {"name":"mouseenter", "args": [{"name": "[eventData]"}, {"name": "handler(eventObject)"}]},
- {"name":"mouseleave", "args": []},
- {"name":"mouseleave", "args": [{"name": "handler(eventObject)"}]},
- {"name":"mouseleave", "args": [{"name": "[eventData]"}, {"name": "handler(eventObject)"}]},
- {"name":"mousemove", "args": []},
- {"name":"mousemove", "args": [{"name": "handler(eventObject)"}]},
- {"name":"mousemove", "args": [{"name": "[eventData]"}, {"name": "handler(eventObject)"}]},
- {"name":"mouseout", "args": []},
- {"name":"mouseout", "args": [{"name": "handler(eventObject)"}]},
- {"name":"mouseout", "args": [{"name": "[eventData]"}, {"name": "handler(eventObject)"}]},
- {"name":"mouseover", "args": []},
- {"name":"mouseover", "args": [{"name": "handler(eventObject)"}]},
- {"name":"mouseover", "args": [{"name": "[eventData]"}, {"name": "handler(eventObject)"}]},
- {"name":"mouseup", "args": []},
- {"name":"mouseup", "args": [{"name": "handler(eventObject)"}]},
- {"name":"mouseup", "args": [{"name": "[eventData]"}, {"name": "handler(eventObject)"}]},
- {"name":"next", "args": [{"name": "[selector]"}]},
- {"name":"nextAll", "args": [{"name": "[selector]"}]},
- {"name":"nextUntil", "args": [{"name": "[selector]"}, {"name": "[filter]"}]},
- {"name":"nextUntil", "args": [{"name": "[element]"}, {"name": "[filter]"}]},
- {"name":"not", "args": [{"name": "selector"}]},
- {"name":"not", "args": [{"name": "elements"}]},
- {"name":"not", "args": [{"name": "function(index)"}]},
- {"name":"not", "args": [{"name": "jQueryObject"}]},
- {"name":"off", "args": [{"name": "events"}, {"name": "[selector]"}, {"name": "handler(eventObject)"}]},
- {"name":"off", "args": [{"name": "events"}, {"name": "[selector]"}]},
- {"name":"offset", "args": []},
- {"name":"offset", "args": [{"name": "coordinates"}]},
- {"name":"offset", "args": [{"name": "function(index, coords)"}]},
- {"name":"offsetParent", "args": []},
- {"name":"on", "args": [{"name": "events"}, {"name": "[selector]"}, {"name": "[data]"}, {"name": "handler(eventObject)"}]},
- {"name":"on", "args": [{"name": "events"}, {"name": "[selector]"}, {"name": "[data]"}]},
- {"name":"one", "args": [{"name": "events"}, {"name": "[data]"}, {"name": "handler(eventObject)"}]},
- {"name":"one", "args": [{"name": "events"}, {"name": "[selector]"}, {"name": "[data]"}, {"name": "handler(eventObject)"}]},
- {"name":"one", "args": [{"name": "events"}, {"name": "[selector]"}, {"name": "[data]"}]},
- {"name":"outerHeight", "args": [{"name": "[includeMargin]"}]},
- {"name":"outerWidth", "args": [{"name": "[includeMargin]"}]},
- {"name":"parent", "args": [{"name": "[selector]"}]},
- {"name":"parents", "args": [{"name": "[selector]"}]},
- {"name":"parentsUntil", "args": [{"name": "[selector]"}, {"name": "[filter]"}]},
- {"name":"parentsUntil", "args": [{"name": "[element]"}, {"name": "[filter]"}]},
- {"name":"position", "args": []},
- {"name":"prepend", "args": [{"name": "content"}, {"name": "[additionalContent]"}]},
- {"name":"prepend", "args": [{"name": "function(index, html)"}]},
- {"name":"prependTo", "args": [{"name": "target"}]},
- {"name":"prev", "args": [{"name": "[selector]"}]},
- {"name":"prevAll", "args": [{"name": "[selector]"}]},
- {"name":"prevUntil", "args": [{"name": "[selector]"}, {"name": "[filter]"}]},
- {"name":"prevUntil", "args": [{"name": "[element]"}, {"name": "[filter]"}]},
- {"name":"promise", "args": [{"name": "[type_default_fx]"}, {"name": "[target]"}]},
- {"name":"prop", "args": [{"name": "propertyName"}]},
- {"name":"prop", "args": [{"name": "propertyName"}, {"name": "value"}]},
- {"name":"prop", "args": [{"name": "properties"}]},
- {"name":"prop", "args": [{"name": "propertyName"}, {"name": "function(index, oldPropertyValue)"}]},
- {"name":"pushStack", "args": [{"name": "elements"}]},
- {"name":"pushStack", "args": [{"name": "elements"}, {"name": "name"}, {"name": "arguments"}]},
- {"name":"queue", "args": [{"name": "[queueName]"}]},
- {"name":"queue", "args": [{"name": "[queueName]"}, {"name": "newQueue"}]},
- {"name":"queue", "args": [{"name": "[queueName]"}, {"name": "callback(next)"}]},
- {"name":"ready", "args": [{"name": "handler"}]},
- {"name":"remove", "args": [{"name": "[selector]"}]},
- {"name":"removeAttr", "args": [{"name": "attributeName"}]},
- {"name":"removeClass", "args": [{"name": "[className]"}]},
- {"name":"removeClass", "args": [{"name": "function(index, class)"}]},
- {"name":"removeData", "args": [{"name": "[name]"}]},
- {"name":"removeData", "args": [{"name": "[list]"}]},
- {"name":"removeProp", "args": [{"name": "propertyName"}]},
- {"name":"replaceAll", "args": [{"name": "target"}]},
- {"name":"replaceWith", "args": [{"name": "newContent"}]},
- {"name":"replaceWith", "args": [{"name": "function"}]},
- {"name":"resize", "args": [{"name": "handler(eventObject)"}]},
- {"name":"resize", "args": [{"name": "[eventData]"}, {"name": "handler(eventObject)"}]},
- {"name":"resize", "args": []},
- {"name":"scroll", "args": [{"name": "handler(eventObject)"}]},
- {"name":"scroll", "args": [{"name": "[eventData]"}, {"name": "handler(eventObject)"}]},
- {"name":"scroll", "args": []},
- {"name":"scrollLeft", "args": [{"name": "value"}]},
- {"name":"scrollLeft", "args": []},
- {"name":"scrollTop", "args": [{"name": "value"}]},
- {"name":"scrollTop", "args": []},
- {"name":"select", "args": [{"name": "handler(eventObject)"}]},
- {"name":"select", "args": [{"name": "[eventData]"}, {"name": "handler(eventObject)"}]},
- {"name":"select", "args": []},
- {"name":"serialize", "args": []},
- {"name":"serializeArray", "args": []},
- {"name":"show", "args": []},
- {"name":"show", "args": [{"name": "[duration_default_400]"}, {"name": "[complete()]"}]},
- {"name":"show", "args": [{"name": "options"}]},
- {"name":"show", "args": [{"name": "[duration_default_400]"}, {"name": "[easing_default_swing]"}, {"name": "[complete()]"}]},
- {"name":"siblings", "args": [{"name": "[selector]"}]},
- {"name":"size", "args": []},
- {"name":"slice", "args": [{"name": "start"}, {"name": "[end]"}]},
- {"name":"slideDown", "args": [{"name": "[duration_default_400]"}, {"name": "[complete()]"}]},
- {"name":"slideDown", "args": [{"name": "options"}]},
- {"name":"slideDown", "args": [{"name": "[duration_default_400]"}, {"name": "[easing_default_swing]"}, {"name": "[complete()]"}]},
- {"name":"slideToggle", "args": [{"name": "[duration_default_400]"}, {"name": "[complete()]"}]},
- {"name":"slideToggle", "args": [{"name": "options"}]},
- {"name":"slideToggle", "args": [{"name": "[duration_default_400]"}, {"name": "[easing_default_swing]"}, {"name": "[complete()]"}]},
- {"name":"slideUp", "args": [{"name": "[duration_default_400]"}, {"name": "[complete()]"}]},
- {"name":"slideUp", "args": [{"name": "options"}]},
- {"name":"slideUp", "args": [{"name": "[duration_default_400]"}, {"name": "[easing_default_swing]"}, {"name": "[complete()]"}]},
- {"name":"stop", "args": [{"name": "[clearQueue]"}, {"name": "[jumpToEnd]"}]},
- {"name":"stop", "args": [{"name": "[queue]"}, {"name": "[clearQueue]"}, {"name": "[jumpToEnd]"}]},
- {"name":"submit", "args": [{"name": "handler(eventObject)"}]},
- {"name":"submit", "args": [{"name": "[eventData]"}, {"name": "handler(eventObject)"}]},
- {"name":"submit", "args": []},
- {"name":"text", "args": []},
- {"name":"text", "args": [{"name": "textString"}]},
- {"name":"text", "args": [{"name": "function(index, text)"}]},
- {"name":"toArray", "args": []},
- {"name":"toggle", "args": [{"name": "[duration_default_400]"}, {"name": "[complete()]"}]},
- {"name":"toggle", "args": [{"name": "options"}]},
- {"name":"toggle", "args": [{"name": "[duration_default_400]"}, {"name": "[easing_default_swing]"}, {"name": "[complete()]"}]},
- {"name":"toggle", "args": [{"name": "showOrHide"}]},
- {"name":"toggle", "args": [{"name": "evenHandler(eventObject)"}, {"name": "oddHandler(eventObject)"}, {"name": "handler(eventObject)"}]},
- {"name":"toggleClass", "args": [{"name": "className"}]},
- {"name":"toggleClass", "args": [{"name": "className"}, {"name": "switch"}]},
- {"name":"toggleClass", "args": [{"name": "[switch]"}]},
- {"name":"toggleClass", "args": [{"name": "function(index, class, switch)"}, {"name": "[switch]"}]},
- {"name":"trigger", "args": [{"name": "eventType"}, {"name": "[extraParameters]"}]},
- {"name":"trigger", "args": [{"name": "event"}]},
- {"name":"triggerHandler", "args": [{"name": "eventType"}, {"name": "[extraParameters]"}]},
- {"name":"unbind", "args": [{"name": "[eventType]"}, {"name": "[handler(eventObject)]"}]},
- {"name":"unbind", "args": [{"name": "eventType"}, {"name": "false"}]},
- {"name":"unbind", "args": [{"name": "event"}]},
- {"name":"undelegate", "args": []},
- {"name":"undelegate", "args": [{"name": "selector"}, {"name": "eventType"}]},
- {"name":"undelegate", "args": [{"name": "selector"}, {"name": "eventType"}, {"name": "handler(eventObject)"}]},
- {"name":"undelegate", "args": [{"name": "selector"}, {"name": "events"}]},
- {"name":"undelegate", "args": [{"name": "namespace"}]},
- {"name":"unload", "args": [{"name": "handler(eventObject)"}]},
- {"name":"unload", "args": [{"name": "[eventData]"}, {"name": "handler(eventObject)"}]},
- {"name":"unwrap", "args": []},
- {"name":"val", "args": []},
- {"name":"val", "args": [{"name": "value"}]},
- {"name":"val", "args": [{"name": "function(index, value)"}]},
- {"name":"width", "args": []},
- {"name":"width", "args": [{"name": "value"}]},
- {"name":"width", "args": [{"name": "function(index, width)"}]},
- {"name":"wrap", "args": [{"name": "wrappingElement"}]},
- {"name":"wrap", "args": [{"name": "function(index)"}]},
- {"name":"wrapAll", "args": [{"name": "wrappingElement"}]},
- {"name":"wrapInner", "args": [{"name": "wrappingElement"}]},
- {"name":"wrapInner", "args": [{"name": "function(index)"}]}
- ]
- }
- ]
-}
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/CoffeeComplete Plus.sublime-settings b/EthanBrown.SublimeText2.WebPackages/tools/CoffeeComplete Plus.sublime-settings
deleted file mode 100644
index 3cf1024..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/CoffeeComplete Plus.sublime-settings
+++ /dev/null
@@ -1,153 +0,0 @@
-{
- "coffee_autocomplete_plus_no_implicit_parens": true,
- // Map function names to types.
- "coffee_autocomplete_plus_function_return_types":
- [
- {
- "function_names": ["$", "jQuery"],
- "type_name": "$"
- },
- // HACK: need "class" + method name for correctness, prefer "return" in custom types
- // https://github.com/justinmahar/SublimeCSAutocompletePlus/issues/24
- {
- "function_names": ["$animation"],
- "type_name": "$animation"
- },
- {
- "function_names": ["$animator"],
- "type_name": "$animator"
- },
- {
- "function_names": ["$cacheFactory"],
- "type_name": "$cacheFactory"
- },
- {
- "function_names": ["$compile"],
- "type_name": "ngLinkFunction"
- },
- {
- "function_names": [
- "$controller",
- "controller", //Module.controller
- "register" //$controllerProvider.register
- ],
- "type_name": "$controller"
- },
- {
- "function_names": [
- "$exceptionHandler"
- ],
- "type_name": "$exceptionHandler"
- },
- {
- "function_names": [
- "$parse"
- ],
- "type_name": "ngParseFunction"
- },
- {
- "function_names": [
- "$http", // empty $http() is a special config fn
- "delete", // $http.delete
- "get", // $http.get
- "head", // $http.head
- "jsonp", // $http.jsonp
- "post", // $http.post
- "put" // $http.put
- ],
- "type_name": "ngHttpPromise"
- },
- {
- "function_names": [
- "expect", // $httpBackend.expect
- "expectDELETE", // $httpBackend.expectDELETE
- "expectGET", // $httpBackend.expectGET
- "expectHEAD", // $httpBackend.expectHEAD
- "expectJSONP", // $httpBackend.expectJSONP
- "expectPATCH", // $httpBackend.expectPATCH
- "expectPOST", // $httpBackend.expectPOST
- "expectPUT", // $httpBackend.expectPUT
- "when", // $httpBackend.when
- "whenDELETE", // $httpBackend.whenDELETE
- "whenGET", // $httpBackend.whenGET
- "whenHEAD", // $httpBackend.whenHEAD
- "whenJSONP", // $httpBackend.whenJSONP
- "whenPATCH", // $httpBackend.whenPATCH
- "whenPOST", // $httpBackend.whenPOST
- "whenPUT" // $httpBackend.whenPUT
- ],
- "type_name": "ngHttpBackendResponse"
- },
- {
- "function_names": [
- "all", // $q.all
- "reject", // $q.reject
- "promise", // deferred.promise
- "then" // promise.then
- //"when" // $q.when -- conflicts with above $httpBackend stuff
- ],
- "type_name": "ngPromise"
- },
- {
- "function_names": [
- "defer" // $q.defer
- ],
- "type_name": "ngDeferred"
- },
- {
- "function_names": [
- "element" // "angular.element"
- ],
- "type_name": "jqLite"
- },
- {
- "function_names": [
- "bootstrap", //angular.bootstrap
- "injector" //angular.injector
- //"$rootElement.injector"
- ],
- "type_name": "$injector"
- },
- {
- "function_names": [
- "TzDate" //"angular.mock.TzDate"
- ],
- "type_name": "ngTzDate"
- },
- {
- "function_names": [
- "directive", //"Module.directive"
- "urlSanitizationWhitelist" // $compileProvider.urlSanitizationWhitelist(regexp)
- ],
- "type_name": "$compileProvider"
- },
- {
- "function_names": [
- "module" //"angular.module", "angular.mock.module"
- ],
- "type_name": "ngModule"
- },
- {
- "function_names": [
- "$broadcast" // Scope.$broadcast / $rootscope.$broadcast
- ],
- "type_name": "ngEvent"
- },
- {
- "function_names": [
- "scope", //jqLite.scope / $document.scope
- //"Scope",
- "$new" // Scope.$new / $rootscope.$new
- ],
- "type_name": "ngScope"
- },
- {
- "function_names": ["$resource"],
- "type_name": "$resource"
- },
- {
- "function_names": ["$timeout"],
- "type_name": "$timeout"
- }
- ]
-}
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/CoffeeScript.sublime-settings b/EthanBrown.SublimeText2.WebPackages/tools/CoffeeScript.sublime-settings
deleted file mode 100644
index 02aba0b..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/CoffeeScript.sublime-settings
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "tab_size": 2,
- "translate_tabs_to_spaces": true,
- "watchOnSave": false,
- "compileOnSave": false
-}
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/Package Control.sublime-settings b/EthanBrown.SublimeText2.WebPackages/tools/Package Control.sublime-settings
deleted file mode 100644
index 7feb5be..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/Package Control.sublime-settings
+++ /dev/null
@@ -1,32 +0,0 @@
-{
- "installed_packages":
- [
- "AngularJS (CoffeeScript)",
- "AutoFileName",
- "Chai Completions",
- "CoffeeComplete Plus (Autocompletion)",
- "DocBlockr",
- "Emmet",
- "Grunt",
- "Hayaku - tools for writing CSS faster",
- "HTML5",
- "Http Requester",
- "jQuery",
- "LESS",
- "LiveReload",
- "Pretty JSON",
- "sublime-better-coffeescript",
- "SublimeLinter",
- "Tag",
- "Twitter Bootstrap Snippets",
- "ZZZ.EthanBrown.SublimeKeyMap.Web"
- ],
- "package_name_map": {
- "SublimeKeyMap.Web": "ZZZ.EthanBrown.SublimeKeyMap.Web"
- },
- "repositories":
- [
- "https://github.com/Iristyle/SublimeKeyMap.Web",
- "https://github.com/Iristyle/SublimeLinter"
- ]
-}
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Example.sublime-keymap b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Example.sublime-keymap
deleted file mode 100644
index 5a373d3..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Example.sublime-keymap
+++ /dev/null
@@ -1,4 +0,0 @@
-[
- { "keys": ["shift+f3"], "command": "show_overlay",
- "args": {"overlay": "command_palette", "text": "Angular"} }
-]
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/README.md b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/README.md
deleted file mode 100644
index 9acf2b5..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/README.md
+++ /dev/null
@@ -1,820 +0,0 @@
-![Logo](http://angularjs.org/img/AngularJS-small.png)
-# AngularJs Sublime Text 2 Bundle
-
-This package provides snippets for *all* the available AngularJS api calls.
-The snippets are activated both in HTML and CoffeeScript.
-
-Is this a major perversion of the snippet system? In a way, yes.
-
-Think of it more as a poor mans Intellisense, rather than a series of snippets.
-The snippets intentionally overlap with one another, so that only a few simple
-mnemonics require memorization, rather than hundreds.
-
-Using this approach, instead of providing a `xyz`,`TAB` style snippet expansion,
-`xyz`,`TAB` will load a context-sensitive Sublime completion overlay where the
-appropriate snippet can be picked with the arrow keys and an additional TAB. For
-example, `ng`,`TAB` in an HTML tag will show all the available ng-* attributes.
-This is a little slower approach than the one typically taken with snippets, but
-decreases the learning curve over the API surface. Note that Sublime appears to
-have different conditions for showing the completion overlay. Simply typing
-`ng` in a CoffeeScript document will show the completion menu, while the `TAB` is
-required in HTML. (This is potentially related to other installed packages)
-
-## Installation
-
-### Automatic
-
-Ensure that you have installed Sublime Package Control following [these instructions][SublimePackage]
-
-Open the Sublime command palette with `Ctrl + Shift + P`, type / select `Package Control: Install Package`,
-then from the package control list, type / select `AngularJS (CoffeeScript)`
-
-Note that packages are auto-updating, so as new modifications are made they will automatically be installed.
-
-[Sublime]: http://www.sublimetext.com/dev
-[SublimePackage]: http://wbond.net/sublime_packages/package_control/installation
-
-
-### Manual tweaking of Package Control
-
-This is not recommended, but Package control can be pointed directly at this
-GitHub repository rather than using the registry.
-Add to `Packages\User\Package Control.sublime-settings`, under the appropriate
-keys in the JSON config file.
-
-This file can be opened via the Sublime menu:
-`Preferences -> Package Settings -> Package Control -> Settings -- User`
-
-```javascript
-{
- "installed_packages":
- [
- "AngularJS (CoffeeScript)"
- ],
- "package_name_map":
- {
- "Sublime-AngularJS-Coffee-Completions": "AngularJS (CoffeeScript)"
- },
- "repositories":
- [
- "https://github.com/EastPoint/Sublime-AngularJS-Coffee-Completions"
- ]
-}
-```
-
-### Keybindings
-
-Snippet triggers in Sublime are effectively implicit key bindings, that are
-always mapped to a series of characters + TAB. Alternatively, they can be found
-on the `Ctrl + Shift + P` menu by typing `Ang` to filter the list.
-
-It is further recommended that a keybinding similar to the following is added
-to provide single key combo access to all the currently available snippets.
-
-```javascript
-[
- { "keys": ["shift+f3"], "command": "show_overlay",
- "args": {"overlay": "command_palette", "text": "Angular"} }
-]
-```
-
-To allow for the `$` character to trigger the menu automatically, the following
-must be added to the `Preferences.sublime-settings` file. This file can be opened
-by the `Preferences` -> `Settings -- User` menu item.
-
-```javascript
-{
- "auto_complete_triggers":
- [
- {
- "characters": "$",
- "selector": "source.coffee, source.js, source.js.embedded.html"
- }
- ]
-}
-```
-
-If you want to disable duplicate `$`s from showing up in the editor when completing,
-then you must change the default `word_separators` to the following, in the same user
-`Preferences.sublime-settings`
-
-```javascript
-{
- "word_separators": "./\\()\"'-:,.;<>~!@#%^&*|+=[]{}`~?"
-}
-```
-
-__NOTE:__ `auto_complete_triggers` and `word_separators` are siblings in the same JSON
-config object.
-
-
-#### CoffeeScript
-
-The bindings have been selected so that they don't interfere with the standard
-CoffeeScript bindings, namely `=`, `-`, `cla`, `log`, `elif`, `el`, `if`, `ifel`,
-`#`, `forof`, `forx`, `fori`, `forin`, `req`, `swi`, `ter`, `try` or `unl`
-
-### Sublime Bugs
-
-Unfortunately there are a couple of issues with Sublime at the moment preventing
-it from doing a couple of things that would help us out:
-
-* Filtering within the completions overlay doesn't work right when the `$`
-character is involved.
-
-* There is no way to add names to a completion like you can for a snippet, so
-the `Ctrl + Space` overlay only shows identifiers.
-
-* The tab trigger system in Sublime does not support regular expressions. So
-when dealing with a member function such as `scope.$watch`, there is no way to
-reduce the noise in the list when pressing `.$`. We see *all* completions
-starting with `$` rather than only those starting with `.$`, lengthening the list.
-
-* There is no way that I can find to limit the scope of the `ng-*` attributes to
-only the HTML tags that they are valid for (i.e. `ng-csp` only belong on `html`)
-The best we can do here is to segregate snippets that are attributes vs tags.
-
-* Sublime doesn't have a convention for optional parameters / blocks in snippets.
-This is faked by highlighting the block on the first `TAB` so that it may be
-deleted, and allowing subsequent `TAB`s to change specific values in the block
-if the block is kept. However, Sublime still honors the tabs inside the block
-after it's been deleted. In practical terms, this means it may require extra
-`TAB` presses to send the cursor to the next replacement point after an
-`optional` block has been deleted.
-
-__Please vote up issues [124225][124225] and [124217][124217] if you want to see
-these issues resolved!__
-
-[124225]: http://sublimetext.userecho.com/topic/124225-/
-[124217]: http://sublimetext.userecho.com/topic/124217-/
-
-Hopefully a future version of Sublime will address these issues, but for now
-there are some work-arounds.
-
-The solution at the moment is to provide placeholder snippets for top-level
-services such as `$filter`.
-
-A workflow for this would be the following:
-
-```plaintext
-`$`, `TAB`
- -> select Angular filter from the menu with `TAB`
- -> `$filter` is inserted into document
- -> `TAB` brings up completions against `$filter`
- -> select specific filter from the menu with `TAB` (such as currency)
- -> `$filter('currency') currency, 'symbol-eg-USD$'` is inserted into document
- and supports `TAB` completion (or chunk deletion)
-```
-
-[completions]: http://docs.sublimetext.info/en/latest/extensibility/completions.html
-
-## Tab Triggers
-
-The number of tab triggers is intentionally limited to increase discoverability.
-As a convention, most parameters have been stubbed with a value that indicates
-the value that should be replaced. Where functions take multiple possible
-parameters, the `|` has been used by convention - i.e. `true|false`
-
-#### tl;dr Version
-
-These are the only triggers used - `$`, `.$`, `ng`, `for`, `is`, `mod`, `dir`,
-`fil`, `mock`, `$cookieStore`, `$filter.`, `$http.`, `$httpBackend.`,
-`$injector.`, `$interpolate.`, `$location.`, `$log.`, `$provide.`, `$q.`,
-`$route.`, `$routeProvider.`, `.error`, `.expect`, `.other`, `.success` and
-`.when` ... PHEW
-
-
-### Directive
-
-All HTML based directives are keyed off the `ng`,`TAB` binding.
-
-| Directive | Binding | Context |
-| :------------------------------------- | ---------------: | --------------:|
-| [form][form] | `ng`,`TAB` | HTML Element |
-| [input][input] | `ng`,`TAB` | HTML Element |
-| [input \[checkbox\]][input-check] | `ng`,`TAB` | HTML Element |
-| [input \[email\]][input-email] | `ng`,`TAB` | HTML Element |
-| [input \[number\]][input-number] | `ng`,`TAB` | HTML Element |
-| [input \[radio\]][input-radio] | `ng`,`TAB` | HTML Element |
-| [input \[text\]][input-text] | `ng`,`TAB` | HTML Element |
-| [input \[url\]][input-url] | `ng`,`TAB` | HTML Element |
-| [input \[email\]][input-email] | `ng`,`TAB` | HTML Element |
-| [ngApp][ngApp] | `ng`,`TAB` | HTML Attribute |
-| [ngBind][ngBind] | `ng`,`TAB` | HTML Attribute |
-| [ngBindHtml][ngBindHtml] | `ng`,`TAB` | HTML Attribute |
-| [ngBindHtmlUnsafe][ngBindHtmlUnsafe] | `ng`,`TAB` | HTML Attribute |
-| [ngBindTemplate][ngBindTemplate] | `ng`,`TAB` | HTML Attribute |
-| [ngChange][ngChange] | `ng`,`TAB` | HTML Attribute |
-| [ngChecked][ngChecked] | `ng`,`TAB` | HTML Attribute |
-| [ngClass][ngClass] | `ng`,`TAB` | HTML Attribute |
-| [ngClassEven][ngClassEven] | `ng`,`TAB` | HTML Attribute |
-| [ngClassOdd][ngClassOdd] | `ng`,`TAB` | HTML Attribute |
-| [ngClick][ngClick] | `ng`,`TAB` | HTML Attribute |
-| [ngCloak][ngCloak] | `ng`,`TAB` | HTML Attribute |
-| [ngController][ngController] | `ng`,`TAB` | HTML Attribute |
-| [ngCsp][ngCsp] | `ng`,`TAB` | HTML Attribute |
-| [ngDblClick][ngDblClick] | `ng`,`TAB` | HTML Attribute |
-| [ngDisabled][ngDisabled] | `ng`,`TAB` | HTML Attribute |
-| [ngForm][ngForm] | `ng`,`TAB` | HTML Element |
-| [ngHide][ngHide] | `ng`,`TAB` | HTML Attribute |
-| [ngHref][ngHref] | `ng`,`TAB` | HTML Attribute |
-| [ngInclude][ngInclude] | `ng`,`TAB` | HTML Attribute |
-| [ngInclude][ngInclude] | `ng`,`TAB` | HTML Element |
-| [ngInit][ngInit] | `ng`,`TAB` | HTML Attribute |
-| [ngList][ngList] | `ng`,`TAB` | HTML Attribute |
-| [ngModel][ngModel] | `ng`,`TAB` | HTML Attribute |
-| [ngMousedown][ngMousedown] | `ng`,`TAB` | HTML Attribute |
-| [ngMouseenter][ngMouseenter] | `ng`,`TAB` | HTML Attribute |
-| [ngMouseleave][ngMouseleave] | `ng`,`TAB` | HTML Attribute |
-| [ngMousemove][ngMousemove] | `ng`,`TAB` | HTML Attribute |
-| [ngMouseover][ngMouseover] | `ng`,`TAB` | HTML Attribute |
-| [ngMouseup][ngMouseup] | `ng`,`TAB` | HTML Attribute |
-| [ngMultiple][ngMultiple] | `ng`,`TAB` | HTML Attribute |
-| [ngNonBindable][ngNonBindable] | `ng`,`TAB` | HTML Attribute |
-| [ngPluralize][ngPluralize] | `ng`,`TAB` | HTML Attribute |
-| [ngPluralize][ngPluralize] | `ng`,`TAB` | HTML Element |
-| [ngReadonly][ngReadonly] | `ng`,`TAB` | HTML Attribute |
-| [ngRepeat][ngRepeat] | `ng`,`TAB` | HTML Attribute |
-| [ngSelected][ngSelected] | `ng`,`TAB` | HTML Attribute |
-| [ngShow][ngShow] | `ng`,`TAB` | HTML Attribute |
-| [ngSrc][ngSrc] | `ng`,`TAB` | HTML Attribute |
-| [ngStyle][ngStyle] | `ng`,`TAB` | HTML Attribute |
-| [ngSubmit][ngSubmit] | `ng`,`TAB` | HTML Attribute |
-| [ngSwitch][ngSwitch] | `ng`,`TAB` | HTML Attribute |
-| [ngSwitch][ngSwitch] | `ng`,`TAB` | HTML Element |
-| [ngSwitch-default][ngSwitch] | `ng`,`TAB` | HTML Attribute |
-| [ngSwitch-when][ngSwitch] | `ng`,`TAB` | HTML Attribute |
-| [ngTransclude][ngTransclude] | `ng`,`TAB` | HTML Attribute |
-| [ngView][ngView] | `ng`,`TAB` | HTML Attribute |
-| [ngView][ngView] | `ng`,`TAB` | HTML Element |
-| [script][script] | `ng`,`TAB` | HTML Element |
-| [select][select] | `ng`,`TAB` | HTML Element |
-| [textarea][textarea] | `ng`,`TAB` | HTML Element |
-
-[form]: http://docs.angularjs.org/api/ng.directive:form
-[input]: http://docs.angularjs.org/api/ng.directive:input
-[input-check]: http://docs.angularjs.org/api/ng.directive:input.checkbox
-[input-email]: http://docs.angularjs.org/api/ng.directive:input.email
-[input-number]: http://docs.angularjs.org/api/ng.directive:input.number
-[input-radio]: http://docs.angularjs.org/api/ng.directive:input.radio
-[input-text]: http://docs.angularjs.org/api/ng.directive:input.text
-[input-url]: http://docs.angularjs.org/api/ng.directive:input.url
-[ngApp]: http://docs.angularjs.org/api/ng.directive:ngApp
-[ngBind]: http://docs.angularjs.org/api/ng.directive:ngBind
-[ngBindHtml]: http://docs.angularjs.org/api/ngSanitize.directive:ngBindHtml
-[ngBindHtmlUnsafe]: http://docs.angularjs.org/api/ng.directive:ngBindHtmlUnsafe
-[ngBindTemplate]: http://docs.angularjs.org/api/ng.directive:ngBindTemplate
-[ngChange]: http://docs.angularjs.org/api/ng.directive:ngChange
-[ngChecked]: http://docs.angularjs.org/api/ng.directive:ngChecked
-[ngClass]: http://docs.angularjs.org/api/ng.directive:ngClass
-[ngClassEven]: http://docs.angularjs.org/api/ng.directive:ngClassEven
-[ngClassOdd]: http://docs.angularjs.org/api/ng.directive:ngClassOdd
-[ngClick]: http://docs.angularjs.org/api/ng.directive:ngClick
-[ngCloak]: http://docs.angularjs.org/api/ng.directive:ngCloak
-[ngController]: http://docs.angularjs.org/api/ng.directive:ngController
-[ngCsp]: http://docs.angularjs.org/api/ng.directive:ngCsp
-[ngDblClick]: http://docs.angularjs.org/api/ng.directive:ngDblClick
-[ngDisabled]: http://docs.angularjs.org/api/ng.directive:ngDisabled
-[ngForm]: http://docs.angularjs.org/api/ng.directive:ngForm
-[ngHide]: http://docs.angularjs.org/api/ng.directive:ngHide
-[ngHref]: http://docs.angularjs.org/api/ng.directive:ngHref
-[ngInclude]: http://docs.angularjs.org/api/ng.directive:ngInclude
-[ngInit]: http://docs.angularjs.org/api/ng.directive:ngInit
-[ngList]: http://docs.angularjs.org/api/ng.directive:ngList
-[ngModel]: http://docs.angularjs.org/api/ng.directive:ngModel
-[ngMousedown]: http://docs.angularjs.org/api/ng.directive:ngMousedown
-[ngMouseenter]: http://docs.angularjs.org/api/ng.directive:ngMouseenter
-[ngMouseleave]: http://docs.angularjs.org/api/ng.directive:ngMouseleave
-[ngMousemove]: http://docs.angularjs.org/api/ng.directive:ngMousemove
-[ngMouseover]: http://docs.angularjs.org/api/ng.directive:ngMouseover
-[ngMouseup]: http://docs.angularjs.org/api/ng.directive:ngMouseup
-[ngMultiple]: http://docs.angularjs.org/api/ng.directive:ngMultiple
-[ngNonBindable]: http://docs.angularjs.org/api/ng.directive:ngNonBindable
-[ngPluralize]: http://docs.angularjs.org/api/ng.directive:ngPluralize
-[ngReadonly]: http://docs.angularjs.org/api/ng.directive:ngReadonly
-[ngRepeat]: http://docs.angularjs.org/api/ng.directive:ngRepeat
-[ngSelected]: http://docs.angularjs.org/api/ng.directive:ngSelected
-[ngShow]: http://docs.angularjs.org/api/ng.directive:ngShow
-[ngSrc]: http://docs.angularjs.org/api/ng.directive:ngSrc
-[ngStyle]: http://docs.angularjs.org/api/ng.directive:ngStyle
-[ngSubmit]: http://docs.angularjs.org/api/ng.directive:ngSubmit
-[ngSwitch]: http://docs.angularjs.org/api/ng.directive:ngSwitch
-[ngTransclude]: http://docs.angularjs.org/api/ng.directive:ngTransclude
-[ngView]: http://docs.angularjs.org/api/ng.directive:ngView
-[script]: http://docs.angularjs.org/api/ng.directive:script
-[select]: http://docs.angularjs.org/api/ng.directive:select
-[textarea]: http://docs.angularjs.org/api/ng.directive:textarea
-
-### Module
-
-| [Module][module] Method | Binding | Context |
-| :----------------------------------- | -----------------: | ------------:|
-| [config][m.config] | `mod`,`TAB` | CoffeeScript |
-| [constant][m.constant] | `mod`,`TAB` | CoffeeScript |
-| [controller][m.controller] | `mod`,`TAB` | CoffeeScript |
-| [directive][m.directive] (to chain) | `dir`,`TAB` | CoffeeScript |
-| [directive][dir-complete] (complete) | `dir`,`TAB` | CoffeeScript |
-| [factory][m.factory] | `mod`,`TAB` | CoffeeScript |
-| [filter][m.filter] | `mod`,`TAB` | CoffeeScript |
-| [provider][m.provider] | `mod`,`TAB` | CoffeeScript |
-| [run][m.run] | `mod`,`TAB` | CoffeeScript |
-| [service][m.service] | `mod`,`TAB` | CoffeeScript |
-| [value][m.value] | `mod`,`TAB` | CoffeeScript |
-
-[module]: http://docs.angularjs.org/api/angular.Module
-[m.config]: http://docs.angularjs.org/api/angular.Module#config
-[m.constant]: http://docs.angularjs.org/api/angular.Module#constant
-[m.controller]: http://docs.angularjs.org/api/angular.Module#controller
-[m.directive]: http://docs.angularjs.org/api/angular.Module#directive
-[dir-complete]: http://docs.angularjs.org/guide/directive
-[m.factory]: http://docs.angularjs.org/api/angular.Module#factory
-[m.filter]: http://docs.angularjs.org/api/angular.Module#filter
-[m.provider]: http://docs.angularjs.org/api/angular.Module#provider
-[m.run]: http://docs.angularjs.org/api/angular.Module#run
-[m.service]: http://docs.angularjs.org/api/angular.Module#service
-[m.value]: http://docs.angularjs.org/api/angular.Module#value
-
-### Scope
-
-| Scope Method | Binding | Context |
-| :----------------------------------- | --------------------: | ------------:|
-| [$rootScope][Scope] | `$`,`TAB` | CoffeeScript |
-| [$apply][$s.$apply] | `.$`,`TAB` | CoffeeScript |
-| [$broadcast][$s.$broadcast] | `.$`,`TAB` | CoffeeScript |
-| [$destroy][$s.$destroy] | `.$`,`TAB` | CoffeeScript |
-| [$digest][$s.$digest] | `.$`,`TAB` | CoffeeScript |
-| [$emit][$s.$emit] | `.$`,`TAB` | CoffeeScript |
-| [$eval][$s.$eval] | `.$`,`TAB` | CoffeeScript |
-| [$evalAsync][$s.$evalAsync] | `.$`,`TAB` | CoffeeScript |
-| [$id][$s.$id] | `.$`,`TAB` | CoffeeScript |
-| [$new][$s.$new] | `.$`,`TAB` | CoffeeScript |
-| [$on][$s.$on] | `.$`,`TAB` | CoffeeScript |
-| [$watch][$s.$watch] | `.$`,`TAB` | CoffeeScript |
-
-[$rootScope]: http://docs.angularjs.org/api/ng.$rootScope
-[Scope]: http://docs.angularjs.org/api/ng.$rootScope.Scope
-[$s.$apply]: http://docs.angularjs.org/api/ng.$rootScope.Scope#$apply
-[$s.$broadcast]: http://docs.angularjs.org/api/ng.$rootScope.Scope#$broadcast
-[$s.$destroy]: http://docs.angularjs.org/api/ng.$rootScope.Scope#$destroy
-[$s.$digest]: http://docs.angularjs.org/api/ng.$rootScope.Scope#$digest
-[$s.$emit]: http://docs.angularjs.org/api/ng.$rootScope.Scope#$emit
-[$s.$eval]: http://docs.angularjs.org/api/ng.$rootScope.Scope#$eval
-[$s.$evalAsync]: http://docs.angularjs.org/api/ng.$rootScope.Scope#$evalAsync
-[$s.$id]: http://docs.angularjs.org/api/ng.$rootScope.Scope#$id
-[$s.$new]: http://docs.angularjs.org/api/ng.$rootScope.Scope#$new
-[$s.$on]: http://docs.angularjs.org/api/ng.$rootScope.Scope#$on
-[$s.$watch]: http://docs.angularjs.org/api/ng.$rootScope.Scope#$watch
-
-### Controller
-
-Covers both [FormController][FormController] and [NgModelController][NgModelController]
-
-| Controller Method | Binding | Context |
-| :------------------------------------- | ------------------: | ------------:|
-| [$render][c.$render] | `.$`,`TAB` | CoffeeScript |
-| [$setValidity][c.$setValidity] | `.$`,`TAB` | CoffeeScript |
-| [$setViewValue][c.$setViewValue] | `.$`,`TAB` | CoffeeScript |
-| [$viewValue][c.$viewValue] | `.$`,`TAB` | CoffeeScript |
-| [$modelValue][c.$modelValue] | `.$`,`TAB` | CoffeeScript |
-| [$parsers][c.$parsers] | `.$`,`TAB` | CoffeeScript |
-| [$formatters][c.$formatters] | `.$`,`TAB` | CoffeeScript |
-| [$error][c.$error] | `.$`,`TAB` | CoffeeScript |
-| [$pristine][c.$pristine] | `.$`,`TAB` | CoffeeScript |
-| [$dirty][c.$dirty] | `.$`,`TAB` | CoffeeScript |
-| [$valid][c.$valid] | `.$`,`TAB` | CoffeeScript |
-| [$invalid][c.$invalid] | `.$`,`TAB` | CoffeeScript |
-
-[FormController]: http://docs.angularjs.org/api/ng.directive:form.FormController
-[NgModelController]: http://docs.angularjs.org/api/ng.directive:ngModel.NgModelController
-[c.$render]: http://docs.angularjs.org/api/ng.directive:ngModel.NgModelController#$render
-[c.$setValidity]: http://docs.angularjs.org/api/ng.directive:ngModel.NgModelController#$setValidity
-[c.$setViewValue]: http://docs.angularjs.org/api/ng.directive:ngModel.NgModelController#$setViewValue
-[c.$viewValue]: http://docs.angularjs.org/api/ng.directive:ngModel.NgModelController#$viewValue
-[c.$modelValue]: http://docs.angularjs.org/api/ng.directive:ngModel.NgModelController#$modelValue
-[c.$parsers]: http://docs.angularjs.org/api/ng.directive:ngModel.NgModelController#$parsers
-[c.$formatters]: http://docs.angularjs.org/api/ng.directive:ngModel.NgModelController#$formatters
-[c.$error]: http://docs.angularjs.org/api/ng.directive:ngModel.NgModelController#$error
-[c.$pristine]: http://docs.angularjs.org/api/ng.directive:ngModel.NgModelController#$pristine
-[c.$dirty]: http://docs.angularjs.org/api/ng.directive:ngModel.NgModelController#$dirty
-[c.$valid]: http://docs.angularjs.org/api/ng.directive:ngModel.NgModelController#$valid
-[c.$invalid]: http://docs.angularjs.org/api/ng.directive:ngModel.NgModelController#$invalid
-
-### Resource
-
-| Resource Methods | Binding | Context |
-| :----------------------------------------- | --------------: | ------------:|
-| [$resource][$resource] | `$`,`TAB` | CoffeeScript |
-| [$delete][$r.$methods] | `.$`,`TAB` | CoffeeScript |
-| [$get][$r.$methods] | `.$`,`TAB` | CoffeeScript |
-| [$query][$r.$methods] | `.$`,`TAB` | CoffeeScript |
-| [$remove][$r.$methods] | `.$`,`TAB` | CoffeeScript |
-| [$save][$r.$methods] | `.$`,`TAB` | CoffeeScript |
-
-[$resource]: http://docs.angularjs.org/api/ngResource.$resource
-[$r.$methods]: http://docs.angularjs.org/api/ngResource.$resource#Returns
-
-### Filter
-
-| Filter Method | Binding | Context |
-| :------------------------------------- | ------------------: | ------------:|
-| [$filter][$filter] | `$`,`TAB` | CoffeeScript |
-| [currency][currency] | `$filter`,`TAB` | CoffeeScript |
-| [currency][currency] | `fil`,`TAB` | HTML |
-| [date][date] | `$filter`,`TAB` | CoffeeScript |
-| [date][date] | `fil`,`TAB` | HTML |
-| [filter][filter] | `$filter`,`TAB` | CoffeeScript |
-| [filter][filter] | `fil`,`TAB` | HTML |
-| [json][json] | `$filter`,`TAB` | CoffeeScript |
-| [json][json] | `fil`,`TAB` | HTML |
-| [limitTo][limitTo] | `$filter`,`TAB` | CoffeeScript |
-| [limitTo][limitTo] | `fil`,`TAB` | HTML |
-| [linky][linky] | `$filter`,`TAB` | CoffeeScript |
-| [linky][linky] | `fil`,`TAB` | HTML |
-| [lowercase][lowercase] | `$filter`,`TAB` | CoffeeScript |
-| [lowercase][lowercase] | `fil`,`TAB` | HTML |
-| [number][number] | `$filter`,`TAB` | CoffeeScript |
-| [number][number] | `fil`,`TAB` | HTML |
-| [orderBy][orderBy] | `$filter`,`TAB` | CoffeeScript |
-| [orderBy][orderBy] | `fil`,`TAB` | HTML |
-| [uppercase][uppercase] | `$filter`,`TAB` | CoffeeScript |
-| [uppercase][uppercase] | `fil`,`TAB` | HTML |
-
-[$filter]: http://docs.angularjs.org/api/ng.$filter
-[currency]: http://docs.angularjs.org/api/ng.filter:currency
-[date]: http://docs.angularjs.org/api/ng.filter:date
-[filter]: http://docs.angularjs.org/api/ng.filter:filter
-[json]: http://docs.angularjs.org/api/ng.filter:json
-[limitTo]: http://docs.angularjs.org/api/ng.filter:limitTo
-[linky]: http://docs.angularjs.org/api/ngSanitize.filter:linky
-[lowercase]: http://docs.angularjs.org/api/ng.filter:lowercase
-[number]: http://docs.angularjs.org/api/ng.filter:number
-[orderBy]: http://docs.angularjs.org/api/ng.filter:orderBy
-[uppercase]: http://docs.angularjs.org/api/ng.filter:uppercase
-
-### Global API
-
-| Global API | Binding | Context |
-| :----------------------------------------- | --------------: | ------------:|
-| [angular.bind][angular.bind] | `ng`,`TAB` | CoffeeScript |
-| [angular.bootstrap][angular.bootstrap] | `ng`,`TAB` | CoffeeScript |
-| [angular.copy][angular.copy] | `ng`,`TAB` | CoffeeScript |
-| [angular.element][angular.element] | `ng`,`TAB` | CoffeeScript |
-| [angular.equals][angular.equals] | `ng`,`TAB` | CoffeeScript |
-| [angular.extend][angular.extend] | `ng`,`TAB` | CoffeeScript |
-| [angular.foreach][angular.foreach] | `for`,`TAB` | CoffeeScript |
-| [angular.fromJson][angular.fromJson] | `ng`,`TAB` | CoffeeScript |
-| [angular.identity][angular.identity] | `ng`,`TAB` | CoffeeScript |
-| [angular.injector][angular.injector] | `ng`,`TAB` | CoffeeScript |
-| [angular.isArray][angular.isArray] | `is`,`TAB` | CoffeeScript |
-| [angular.isDate][angular.isDate] | `is`,`TAB` | CoffeeScript |
-| [angular.isDefined][angular.isDefined] | `is`,`TAB` | CoffeeScript |
-| [angular.isElement][angular.isElement] | `is`,`TAB` | CoffeeScript |
-| [angular.isFunction][angular.isFunction] | `is`,`TAB` | CoffeeScript |
-| [angular.isNumber][angular.isNumber] | `is`,`TAB` | CoffeeScript |
-| [angular.isObject][angular.isObject] | `is`,`TAB` | CoffeeScript |
-| [angular.isString][angular.isString] | `is`,`TAB` | CoffeeScript |
-| [angular.isUndefined][angular.isUndefined] | `is`,`TAB` | CoffeeScript |
-| [angular.lowercase][angular.lowercase] | `ng`,`TAB` | CoffeeScript |
-| [angular.module][angular.module] | `mod`,`TAB` | CoffeeScript |
-| [angular.noop][angular.noop] | `ng`,`TAB` | CoffeeScript |
-| [angular.toJson][angular.toJson] | `ng`,`TAB` | CoffeeScript |
-| [angular.uppercase][angular.uppercase] | `ng`,`TAB` | CoffeeScript |
-| [angular.version][angular.version] | `ng`,`TAB` | CoffeeScript |
-
-[angular.bind]: http://docs.angularjs.org/api/angular.bind
-[angular.bootstrap]: http://docs.angularjs.org/api/angular.bootstrap
-[angular.copy]: http://docs.angularjs.org/api/angular.copy
-[angular.element]: http://docs.angularjs.org/api/angular.element
-[angular.equals]: http://docs.angularjs.org/api/angular.equals
-[angular.extend]: http://docs.angularjs.org/api/angular.extend
-[angular.forEach]: http://docs.angularjs.org/api/angular.forEach
-[angular.fromJson]: http://docs.angularjs.org/api/angular.fromJson
-[angular.identity]: http://docs.angularjs.org/api/angular.identity
-[angular.injector]: http://docs.angularjs.org/api/angular.injector
-[angular.isArray]: http://docs.angularjs.org/api/angular.isArray
-[angular.isDate]: http://docs.angularjs.org/api/angular.isDate
-[angular.isDefined]: http://docs.angularjs.org/api/angular.isDefined
-[angular.isElement]: http://docs.angularjs.org/api/angular.isElement
-[angular.isFunction]: http://docs.angularjs.org/api/angular.isFunction
-[angular.isNumber]: http://docs.angularjs.org/api/angular.isNumber
-[angular.isObject]: http://docs.angularjs.org/api/angular.isObject
-[angular.isString]: http://docs.angularjs.org/api/angular.isString
-[angular.isUndefined]: http://docs.angularjs.org/api/angular.isUndefined
-[angular.lowercase]: http://docs.angularjs.org/api/angular.lowercase
-[angular.module]: http://docs.angularjs.org/api/angular.module
-[angular.noop]: http://docs.angularjs.org/api/angular.noop
-[angular.toJson]: http://docs.angularjs.org/api/angular.toJson
-[angular.uppercase]: http://docs.angularjs.org/api/angular.uppercase
-[angular.version]: http://docs.angularjs.org/api/angular.version
-
-### Http
-
-| Http Methods | Binding | Context |
-| :--------------------------------------- | ----------------: | ------------:|
-| [$http][$http] | `$`,`TAB` | CoffeeScript |
-| [$http (configured)][$http.usage] | `$`,`TAB` | CoffeeScript |
-| [delete][$http.delete] | `$http.`,`TAB` | CoffeeScript |
-| [get][$http.get] | `$http.`,`TAB` | CoffeeScript |
-| [head][$http.head] | `$http.`,`TAB` | CoffeeScript |
-| [jsonp][$http.jsonp] | `$http.`,`TAB` | CoffeeScript |
-| [post][$http.post] | `$http.`,`TAB` | CoffeeScript |
-| [put][$http.put] | `$http.`,`TAB` | CoffeeScript |
-| [defaults][$http.defaults] | `$http.`,`TAB` | CoffeeScript |
-| [pendingRequests][$http.pendingRequests] | `$http.`,`TAB` | CoffeeScript |
-| [.error][$http.Returns] | `.error`,`TAB` | CoffeeScript |
-| [.success][$http.Returns] | `.success`,`TAB` | CoffeeScript |
-
-[$http]: http://docs.angularjs.org/api/ng.$http
-[$http.usage]: http://docs.angularjs.org/api/ng.$http#Usage
-[$http.delete]: http://docs.angularjs.org/api/ng.$http#delete
-[$http.get]: http://docs.angularjs.org/api/ng.$http#get
-[$http.head]: http://docs.angularjs.org/api/ng.$http#head
-[$http.jsonp]: http://docs.angularjs.org/api/ng.$http#jsonp
-[$http.post]: http://docs.angularjs.org/api/ng.$http#post
-[$http.put]: http://docs.angularjs.org/api/ng.$http#put
-[$http.defaults]: http://docs.angularjs.org/api/ng.$http#defaults
-[$http.pendingRequests]: http://docs.angularjs.org/api/ng.$http#defaults
-[$http.Returns]: http://docs.angularjs.org/api/ng.$http#Returns
-
-### HttpBackend
-
-Note that `.expect` and `.when` are designed to chain, so we don't bind to
-`$httpBackend`
-
-| HttpBackend Methods | Binding | Context |
-| :------------------------------------------- | --------------------: | ------------:|
-| [$httpBackend][$httpBackend] | `$`,`TAB` | CoffeeScript |
-| [expect][$h.expect] | `.expect`,`TAB` | CoffeeScript |
-| [expectDELETE][$h.expectDELETE] | `.expect`,`TAB` | CoffeeScript |
-| [expectGET][$h.expectGET] | `.expect`,`TAB` | CoffeeScript |
-| [expectHEAD][$h.expectHEAD] | `.expect`,`TAB` | CoffeeScript |
-| [expectJSONP][$h.expectJSONP] | `.expect`,`TAB` | CoffeeScript |
-| [expectPATCH][$h.expectPATCH] | `.expect`,`TAB` | CoffeeScript |
-| [expectPOST][$h.expectPOST] | `.expect`,`TAB` | CoffeeScript |
-| [expectPUT][$h.expectPUT] | `.expect`,`TAB` | CoffeeScript |
-| [flush][$h.flush] | `$httpBackend.`,`TAB` | CoffeeScript |
-| [resetExpectations][$h.reset] | `$httpBackend.`,`TAB` | CoffeeScript |
-| [verifyNoOutstandingExceptions][$h.verifyEx] | `$httpBackend.`,`TAB` | CoffeeScript |
-| [verifyNoOutstandingRequests][$h.verifyReqs] | `$httpBackend.`,`TAB` | CoffeeScript |
-| [when][$h.when] | `.when`,`TAB` | CoffeeScript |
-| [whenDELETE][$h.whenDELETE] | `.when`,`TAB` | CoffeeScript |
-| [whenGET][$h.whenGET] | `.when`,`TAB` | CoffeeScript |
-| [whenHEAD][$h.whenHEAD] | `.when`,`TAB` | CoffeeScript |
-| [whenJSONP][$h.whenJSONP] | `.when`,`TAB` | CoffeeScript |
-| [whenPATCH][$h.whenPATCH] | `.when`,`TAB` | CoffeeScript |
-| [whenPOST][$h.whenPOST] | `.when`,`TAB` | CoffeeScript |
-| [whenPUT][$h.whenPUT] | `.when`,`TAB` | CoffeeScript |
-
-[$httpBackend]: http://docs.angularjs.org/api/ngMock.$httpBackend
-[$h.expect]: http://docs.angularjs.org/api/ngMock.$httpBackend#expect
-[$h.expectDELETE]: http://docs.angularjs.org/api/ngMock.$httpBackend#expectDELETE
-[$h.expectGET]: http://docs.angularjs.org/api/ngMock.$httpBackend#expectGET
-[$h.expectHEAD]: http://docs.angularjs.org/api/ngMock.$httpBackend#expectHEAD
-[$h.expectJSONP]: http://docs.angularjs.org/api/ngMock.$httpBackend#expectJSONP
-[$h.expectPATCH]: http://docs.angularjs.org/api/ngMock.$httpBackend#expectPATCH
-[$h.expectPOST]: http://docs.angularjs.org/api/ngMock.$httpBackend#expectPOST
-[$h.expectPUT]: http://docs.angularjs.org/api/ngMock.$httpBackend#expectPUT
-[$h.flush]: http://docs.angularjs.org/api/ngMock.$httpBackend#flush
-[$h.reset]: http://docs.angularjs.org/api/ngMock.$httpBackend#resetExpectations
-[$h.verifyEx]: http://docs.angularjs.org/api/ngMock.$httpBackend#verifyNoOutstandingExceptions
-[$h.verifyReqs]: http://docs.angularjs.org/api/ngMock.$httpBackend#verifyNoOutstandingRequests
-[$h.when]: http://docs.angularjs.org/api/ngMock.$httpBackend#when
-[$h.whenDELETE]: http://docs.angularjs.org/api/ngMock.$httpBackend#whenDELETE
-[$h.whenGET]: http://docs.angularjs.org/api/ngMock.$httpBackend#whenGET
-[$h.whenHEAD]: http://docs.angularjs.org/api/ngMock.$httpBackend#whenHEAD
-[$h.whenJSONP]: http://docs.angularjs.org/api/ngMock.$httpBackend#whenJSONP
-[$h.whenPATCH]: http://docs.angularjs.org/api/ngMock.$httpBackend#whenPATCH
-[$h.whenPOST]: http://docs.angularjs.org/api/ngMock.$httpBackend#whenPOST
-[$h.whenPUT]: http://docs.angularjs.org/api/ngMock.$httpBackend#whenPUT
-
-### Q
-
-| Provider Method | Binding | Context |
-| :------------------------------------- | ------------------: | ------------:|
-| [$q][$q] | `$`,`TAB` | CoffeeScript |
-| [all][$q.all] | `$q.`,`TAB` | CoffeeScript |
-| [defer][$q.defer] | `$q.`,`TAB` | CoffeeScript |
-| [reject][$q.reject] | `$q.`,`TAB` | CoffeeScript |
-| [when][$q.when] | `$q.`,`TAB` | CoffeeScript |
-
-[$q]: http://docs.angularjs.org/api/ng.$q
-[$q.all]: http://docs.angularjs.org/api/ng.$q#all
-[$q.defer]: http://docs.angularjs.org/api/ng.$q#defer
-[$q.reject]: http://docs.angularjs.org/api/ng.$q#reject
-[$q.when]: http://docs.angularjs.org/api/ng.$q#when
-
-### Route
-
-| Route Method | Binding | Context |
-| :----------------------------------| ----------------------: | ------------:|
-| [$route][$route] | `$`,`TAB` | CoffeeScript |
-| [current][$route.current] | `$route.`,`TAB` | CoffeeScript |
-| [reload][$route.reload] | `$route.`,`TAB` | CoffeeScript |
-| [routes][$route.routes] | `$route.`,`TAB` | CoffeeScript |
-| [$routeChangeError][$route.$rce] | `.$`,`TAB` | CoffeeScript |
-| [$routeChangeStart][$route.$rcst] | `.$`,`TAB` | CoffeeScript |
-| [$routeChangeSuccess][$route.$rcs] | `.$`,`TAB` | CoffeeScript |
-| [$routeUpdate][$route.$ru] | `.$`,`TAB` | CoffeeScript |
-| [$routeParams][$routeParams] | `$`,`TAB` | CoffeeScript |
-| [$routeProvider][$routeProvider] | `$`,`TAB` | CoffeeScript |
-| [when][$rp.when] | `$routeprovider.`,`TAB` | CoffeeScript |
-| [otherwise][$rp.other] | `.other`,`TAB` | CoffeeScript |
-
-[$route]: http://docs.angularjs.org/api/ng.$route
-[$route.current]: http://docs.angularjs.org/api/ng.$route#current
-[$route.reload]: http://docs.angularjs.org/api/ng.$route#reload
-[$route.routes]: http://docs.angularjs.org/api/ng.$route#routes
-[$route.$rce]: http://docs.angularjs.org/api/ng.$route#$routeChangeError
-[$route.$rcst]: http://docs.angularjs.org/api/ng.$route#$routeChangeStart
-[$route.$rcs]: http://docs.angularjs.org/api/ng.$route#$routeChangeSuccess
-[$route.$ru]: http://docs.angularjs.org/api/ng.$route#$routeUpdate
-[$routeParams]: http://docs.angularjs.org/api/ng.$routeParams
-[$routeProvider]: http://docs.angularjs.org/api/ng.$routeProvider
-[$rp.when]: http://docs.angularjs.org/api/ng.$routeProvider#when
-[$rp.other]: http://docs.angularjs.org/api/ng.$routeProvider#otherwise
-
-### Cookie
-
-| Cookie Method | Binding | Context |
-| :----------------------------------- | --------------------: | ------------:|
-| [$cookies][$cookies] | `$`,`TAB` | CoffeeScript |
-| [$cookieStore][$cookieStore] | `$`,`TAB` | CoffeeScript |
-| [get][$c.get] | `$cookiestore.`,`TAB` | CoffeeScript |
-| [put][$c.put] | `$cookiestore.`,`TAB` | CoffeeScript |
-| [remove][$c.remove] | `$cookiestore.`,`TAB` | CoffeeScript |
-
-[$cookies]: http://docs.angularjs.org/api/ngCookies.$cookies
-[$cookieStore]: http://docs.angularjs.org/api/ngCookies.$cookieStore
-[$c.get]: http://docs.angularjs.org/api/ngCookies.$cookieStore#get
-[$c.put]: http://docs.angularjs.org/api/ngCookies.$cookieStore#put
-[$c.remove]: http://docs.angularjs.org/api/ngCookies.$cookieStore#remove
-
-### Location
-
-| Location Method | Binding | Context |
-| :----------------------------------- | -----------------: | ------------:|
-| [$injector][$injector] | `$`,`TAB` | CoffeeScript |
-| [absUrl][$l.absUrl] | `$location.`,`TAB` | CoffeeScript |
-| [hash][$l.hash] (get & set) | `$location.`,`TAB` | CoffeeScript |
-| [host][$l.host] | `$location.`,`TAB` | CoffeeScript |
-| [path][$l.path] (get & set) | `$location.`,`TAB` | CoffeeScript |
-| [port][$l.port] | `$location.`,`TAB` | CoffeeScript |
-| [protocol][$l.protocol] | `$location.`,`TAB` | CoffeeScript |
-| [replace][$l.replace] | `$location.`,`TAB` | CoffeeScript |
-| [search][$l.search] (get & set) | `$location.`,`TAB` | CoffeeScript |
-| [url][$l.url] (get & set) | `$location.`,`TAB` | CoffeeScript |
-
-[$location]: http://docs.angularjs.org/api/ng.$location
-[$l.absUrl]: http://docs.angularjs.org/api/ng.$location#absUrl
-[$l.hash]: http://docs.angularjs.org/api/ng.$location#hash
-[$l.host]: http://docs.angularjs.org/api/ng.$location#host
-[$l.path]: http://docs.angularjs.org/api/ng.$location#path
-[$l.port]: http://docs.angularjs.org/api/ng.$location#port
-[$l.protocol]: http://docs.angularjs.org/api/ng.$location#protocol
-[$l.replace]: http://docs.angularjs.org/api/ng.$location#replace
-[$l.search]: http://docs.angularjs.org/api/ng.$location#search
-[$l.url]: http://docs.angularjs.org/api/ng.$location#url
-
-### Log
-
-| Log Method | Binding | Context |
-| :----------------------------------- | --------------: | ------------:|
-| [$log][$log] | `$`,`TAB` | CoffeeScript |
-| [error][$log.error] | `$log.`,`TAB` | CoffeeScript |
-| [info][$log.info] | `$log.`,`TAB` | CoffeeScript |
-| [log][$log.log] | `$log.`,`TAB` | CoffeeScript |
-| [warn][$log.warn] | `$log.`,`TAB` | CoffeeScript |
-
-[$log]: http://docs.angularjs.org/api/ng.$log
-[$log.error]: http://docs.angularjs.org/api/ng.$log#error
-[$log.info]: http://docs.angularjs.org/api/ng.$log#info
-[$log.log]: http://docs.angularjs.org/api/ng.$log#log
-[$log.warn]: http://docs.angularjs.org/api/ng.$log#warn
-
-### Mock
-
-| Mock Method | Binding | Context |
-| :------------------------------------- | ------------------: | ------------:|
-| [angular.mock.debug][mock.debug] | `mock`,`TAB` | CoffeeScript |
-| [angular.mock.inject][mock.inject] | `mock`,`TAB` | CoffeeScript |
-| [angular.mock.module][mock.module] | `mock`,`TAB` | CoffeeScript |
-| [angular.mock.TzDate][mock.TzDate] | `mock`,`TAB` | CoffeeScript |
-| [$log.assertEmpty][$log.assertEmpty] | `$log.`,`TAB` | CoffeeScript |
-| [$log.reset][$log.reset] | `$log.`,`TAB` | CoffeeScript |
-| [$log.logs][$log.logs] | `$log.`,`TAB` | CoffeeScript |
-| [$timeout.flush][$timeout.flush] | `$timeout.`,`TAB` | CoffeeScript |
-
-[mock.debug]: http://docs.angularjs.org/api/angular.mock.debug
-[mock.inject]: http://docs.angularjs.org/api/angular.mock.inject
-[mock.module]: http://docs.angularjs.org/api/angular.mock.module
-[mock.TzDate]: http://docs.angularjs.org/api/angular.mock.debug
-[$log.assertEmpty]: http://docs.angularjs.org/api/ngMock.$log#assertEmpty
-[$log.reset]: http://docs.angularjs.org/api/ngMock.$log#reset
-[$log.logs]: http://docs.angularjs.org/api/ngMock.$log#logs
-[$timeout.flush]: http://docs.angularjs.org/api/ngMock.$timeout#flush
-
-### Injector
-
-| Injector Method | Binding | Context |
-| :----------------------------------- | -----------------: | ------------:|
-| [$injector][$injector] | `$`,`TAB` | CoffeeScript |
-| [annotate][$i.annotate] | `$injector.`,`TAB` | CoffeeScript |
-| [get][$i.get] | `$injector.`,`TAB` | CoffeeScript |
-| [instantiate][$i.instantiate] | `$injector.`,`TAB` | CoffeeScript |
-| [invoke][$i.invoke] | `$injector.`,`TAB` | CoffeeScript |
-
-[$injector]: http://docs.angularjs.org/api/AUTO.$injector
-[$i.annotate]: http://docs.angularjs.org/api/AUTO.$injector#annotate
-[$i.get]: http://docs.angularjs.org/api/AUTO.$injector#get
-[$i.instantiate]: http://docs.angularjs.org/api/AUTO.$injector#instantiate
-[$i.invoke]: http://docs.angularjs.org/api/AUTO.$injector#invoke
-
-### Interpolate
-
-| Injector Method | Binding | Context |
-| :----------------------------------- | --------------------: | ------------:|
-| [$interpolate][$interpolate] | `$`,`TAB` | CoffeeScript |
-| [endSymbol][$in.endSymbol] | `$interpolate.`,`TAB` | CoffeeScript |
-| [startsymbol][$in.startsymbol] | `$interpolate.`,`TAB` | CoffeeScript |
-
-[$interpolate]: http://docs.angularjs.org/api/ng.$interpolate
-[$in.endSymbol]: http://docs.angularjs.org/api/ng.$interpolate#endSymbol
-[$in.startSymbol]: http://docs.angularjs.org/api/ng.$interpolate#startSymbol
-
-### Provide
-
-| Provider Method | Binding | Context |
-| :------------------------------------- | ------------------: | ------------:|
-| [$provide][$provide] | `$`,`TAB` | CoffeeScript |
-| [constant][$p.constant] | `$provide.`,`TAB` | CoffeeScript |
-| [decorator][$p.decorator] | `$provide.`,`TAB` | CoffeeScript |
-| [factory][$p.factory] | `$provide.`,`TAB` | CoffeeScript |
-| [provider][$p.provider] | `$provide.`,`TAB` | CoffeeScript |
-| [service][$p.service] | `$provide.`,`TAB` | CoffeeScript |
-| [value][$p.value] | `$provide.`,`TAB` | CoffeeScript |
-
-[$provide]: http://docs.angularjs.org/api/AUTO.$provide
-[$p.constant]: http://docs.angularjs.org/api/AUTO.$provide#constant
-[$p.decorator]: http://docs.angularjs.org/api/AUTO.$provide#decorator
-[$p.factory]: http://docs.angularjs.org/api/AUTO.$provide#factory
-[$p.provider]: http://docs.angularjs.org/api/AUTO.$provide#provider
-[$p.service]: http://docs.angularjs.org/api/AUTO.$provide#service
-[$p.value]: http://docs.angularjs.org/api/AUTO.$provide#value
-
-### Other Services
-
-| Service | Binding | Context |
-| :------------------------------------- | ----------: |-------------:|
-| [$anchorScroll][$anchorScroll] | `$`,`TAB` | CoffeeScript |
-| [$cacheFactory][$cacheFactory] | `$`,`TAB` | CoffeeScript |
-| [$compile][$compile] | `$`,`TAB` | CoffeeScript |
-| [$controller][$controller] | `$`,`TAB` | CoffeeScript |
-| [$document][$document] | `$`,`TAB` | CoffeeScript |
-| [$exceptionHandler][$exceptionHandler] | `$`,`TAB` | CoffeeScript |
-| [$locale][$locale] | `$`,`TAB` | CoffeeScript |
-| [$parse][$parse] | `$`,`TAB` | CoffeeScript |
-| [$rootElement][$rootElement] | `$`,`TAB` | CoffeeScript |
-| [$templateCache][$templateCache] | `$`,`TAB` | CoffeeScript |
-| [$timeout][$timeout] | `$`,`TAB` | CoffeeScript |
-| [$window][$window] | `$`,`TAB` | CoffeeScript |
-
-[$anchorScroll]: http://docs.angularjs.org/api/ng.$anchorScroll
-[$cacheFactory]: http://docs.angularjs.org/api/ng.$cacheFactory
-[$compile]: http://docs.angularjs.org/api/ng.$compile
-[$controller]: http://docs.angularjs.org/api/ng.$controller
-[$document]: http://docs.angularjs.org/api/ng.$document
-[$exceptionHandler]: http://docs.angularjs.org/api/ng.$exceptionHandler
-[$locale]: http://docs.angularjs.org/api/ng.$locale
-[$parse]: http://docs.angularjs.org/api/ng.$parse
-[$rootElement]: http://docs.angularjs.org/api/ng.$rootElement
-[$templateCache]: http://docs.angularjs.org/api/ng.$templateCache
-[$timeout]: http://docs.angularjs.org/api/ng.$timeout
-[$window]: http://docs.angularjs.org/api/ng.$window
-
-## Future Improvements
-
-* It would be nice to provide inline docs through SublimeCodeIntel in a vein
-similar to the [ones provided for jQuery][jQuery].
-
-* [SublimeErl][SublimeErl] also provides some pretty fancy features which would
-be nice to integrate
-
-[jQuery]: https://github.com/Kronuz/SublimeCodeIntel/blob/master/libs/codeintel2/catalogs/jquery.cix
-[SublimeErl]: https://github.com/ostinelli/SublimErl
-
-## Making Contributions
-
-* When editing `.sublime-snippets` files, __always__ use real tab characters for
-indentation on a newline following a crlf/lf. Sublime will automatically insert
-spaces if your user settings specify spacing for indentation.
-
-* Write CoffeeScript that will pass coffeelint
-
-
-## Thanks
-
-Original inspiration was from the [AngularJS tmbundle][tmbundle], which was
-targeted at JavaScript and a small set of mnemonics for common operations. This
-is designed to be more comprehensive.
-
-[tmbundle]: github.com/ProLoser/AngularJs.tmbundle.git
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Controller/dirty.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Controller/dirty.sublime-snippet
deleted file mode 100644
index 4f7dab0..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Controller/dirty.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- .$
- source.coffee
- Angular Controller $dirty
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Controller/error.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Controller/error.sublime-snippet
deleted file mode 100644
index 1d312f3..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Controller/error.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- .$
- source.coffee
- Angular Controller $error
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Controller/formatters.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Controller/formatters.sublime-snippet
deleted file mode 100644
index bc202e7..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Controller/formatters.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- .$
- source.coffee
- Angular Controller $formatters
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Controller/invalid.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Controller/invalid.sublime-snippet
deleted file mode 100644
index 25f447c..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Controller/invalid.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- .$
- source.coffee
- Angular Controller $invalid
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Controller/modelValue.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Controller/modelValue.sublime-snippet
deleted file mode 100644
index d7cb0c8..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Controller/modelValue.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- .$
- source.coffee
- Angular Controller $modelValue
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Controller/parsers.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Controller/parsers.sublime-snippet
deleted file mode 100644
index fc92c0a..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Controller/parsers.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- .$
- source.coffee
- Angular Controller $parsers
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Controller/pristine.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Controller/pristine.sublime-snippet
deleted file mode 100644
index 0429fce..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Controller/pristine.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- .$
- source.coffee
- Angular Controller $pristine
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Controller/render.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Controller/render.sublime-snippet
deleted file mode 100644
index 3d2bde8..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Controller/render.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- .$
- source.coffee
- Angular Controller $render
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Controller/setValidity.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Controller/setValidity.sublime-snippet
deleted file mode 100644
index 82c0297..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Controller/setValidity.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- .$
- source.coffee
- Angular Controller $setValidity
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Controller/setViewValue.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Controller/setViewValue.sublime-snippet
deleted file mode 100644
index 2090347..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Controller/setViewValue.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- .$
- source.coffee
- Angular Controller $setViewValue
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Controller/valid.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Controller/valid.sublime-snippet
deleted file mode 100644
index c5422ff..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Controller/valid.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- .$
- source.coffee
- Angular Controller $valid
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Controller/viewValue.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Controller/viewValue.sublime-snippet
deleted file mode 100644
index e5248f2..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Controller/viewValue.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- .$
- source.coffee
- Angular Controller $viewValue
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Cookies/$cookieStore.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Cookies/$cookieStore.sublime-snippet
deleted file mode 100644
index 15c4e40..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Cookies/$cookieStore.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $
- source.coffee
- Angular $cookieStore
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Cookies/$cookies.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Cookies/$cookies.sublime-snippet
deleted file mode 100644
index a1d3216..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Cookies/$cookies.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $
- source.coffee
- Angular $cookies
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Cookies/get.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Cookies/get.sublime-snippet
deleted file mode 100644
index cb0228e..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Cookies/get.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $cookieStore.
- source.coffee
- Angular $cookieStore get
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Cookies/put.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Cookies/put.sublime-snippet
deleted file mode 100644
index dd5e512..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Cookies/put.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $cookieStore.
- source.coffee
- Angular $cookieStore put
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Cookies/remove.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Cookies/remove.sublime-snippet
deleted file mode 100644
index 2f711f5..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Cookies/remove.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $cookieStore.
- source.coffee
- Angular $cookieStore remove
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/input.checkbox.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/input.checkbox.sublime-snippet
deleted file mode 100644
index f636141..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/input.checkbox.sublime-snippet
+++ /dev/null
@@ -1,11 +0,0 @@
-
- ]]>
- ng
- text.html -source -meta.tag, punctuation.definition.tag.begin
- Angular input [checkbox]
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/input.number.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/input.number.sublime-snippet
deleted file mode 100644
index 9bf3934..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/input.number.sublime-snippet
+++ /dev/null
@@ -1,13 +0,0 @@
-
- ]]>
- ng
- text.html -source -meta.tag, punctuation.definition.tag.begin
- Angular input [number]
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/input.radio.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/input.radio.sublime-snippet
deleted file mode 100644
index 2dfb121..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/input.radio.sublime-snippet
+++ /dev/null
@@ -1,10 +0,0 @@
-
- ]]>
- ng
- text.html -source -meta.tag, punctuation.definition.tag.begin
- Angular input [radio]
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/input.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/input.sublime-snippet
deleted file mode 100644
index 00b5f5a..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/input.sublime-snippet
+++ /dev/null
@@ -1,13 +0,0 @@
-
- ]]>
- ng
- text.html -source -meta.tag, punctuation.definition.tag.begin
- Angular input [text|email|url]
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngApp.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngApp.sublime-snippet
deleted file mode 100644
index 714cbe0..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngApp.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- ng
- text.html meta.tag
- Angular ngApp
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngBind.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngBind.sublime-snippet
deleted file mode 100644
index ee3bdfc..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngBind.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- ng
- text.html meta.tag
- Angular ngBind
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngBindHtml.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngBindHtml.sublime-snippet
deleted file mode 100644
index 39828d5..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngBindHtml.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- ng
- text.html meta.tag
- Angular ngBindHtmlUnsafe
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngBindHtmlUnsafe.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngBindHtmlUnsafe.sublime-snippet
deleted file mode 100644
index 0f4e5ff..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngBindHtmlUnsafe.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- ng
- text.html meta.tag
- Angular ngBindHtmlUnsafe
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngBindTemplate.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngBindTemplate.sublime-snippet
deleted file mode 100644
index 248fdcd..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngBindTemplate.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- ng
- text.html meta.tag
- Angular ngBindTemplate
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngChange.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngChange.sublime-snippet
deleted file mode 100644
index 9f2c442..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngChange.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- ng
- text.html meta.tag
- Angular ngChange
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngChecked.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngChecked.sublime-snippet
deleted file mode 100644
index e48333a..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngChecked.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- ng
- text.html meta.tag
- Angular ngChecked
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngClass.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngClass.sublime-snippet
deleted file mode 100644
index ab21150..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngClass.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- ng
- text.html meta.tag
- Angular ngClass
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngClassEven.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngClassEven.sublime-snippet
deleted file mode 100644
index 1a4a49a..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngClassEven.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- ng
- text.html meta.tag
- Angular ngClassEven
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngClassOdd.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngClassOdd.sublime-snippet
deleted file mode 100644
index 6df7643..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngClassOdd.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- ng
- text.html meta.tag
- Angular ngClassOdd
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngClick.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngClick.sublime-snippet
deleted file mode 100644
index 7d42b95..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngClick.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- ng
- text.html meta.tag
- Angular ngClick
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngCloak.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngCloak.sublime-snippet
deleted file mode 100644
index c270bb5..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngCloak.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- ng
- text.html meta.tag
- Angular ngCloak
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngController.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngController.sublime-snippet
deleted file mode 100644
index 6a918c4..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngController.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- ng
- text.html meta.tag
- Angular ngController
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngCsp.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngCsp.sublime-snippet
deleted file mode 100644
index bb47202..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngCsp.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- ng
- text.html meta.tag
- Angular ngCsp (Content Security Policy)
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngDblClick.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngDblClick.sublime-snippet
deleted file mode 100644
index eac3d1f..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngDblClick.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- ng
- text.html meta.tag
- Angular ngDblclick
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngDisabled.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngDisabled.sublime-snippet
deleted file mode 100644
index bb1bfdd..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngDisabled.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- ng
- text.html meta.tag
- Angular ngDisabled
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngForm.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngForm.sublime-snippet
deleted file mode 100644
index e101b27..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngForm.sublime-snippet
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- $0
-]]>
- ng
- text.html -source -meta.tag, punctuation.definition.tag.begin
- Angular form
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngHide.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngHide.sublime-snippet
deleted file mode 100644
index ef40b27..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngHide.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- ng
- text.html meta.tag
- Angular ngHide
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngHref.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngHref.sublime-snippet
deleted file mode 100644
index fcf2de6..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngHref.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- ng
- text.html meta.tag
- Angular ngHref
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngInclude.attribute.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngInclude.attribute.sublime-snippet
deleted file mode 100644
index cc76d8c..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngInclude.attribute.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- ng
- text.html meta.tag
- Angular ngInclude (attribute)
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngInclude.element.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngInclude.element.sublime-snippet
deleted file mode 100644
index 875a00d..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngInclude.element.sublime-snippet
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- $0
-]]>
- ng
- text.html -source -meta.tag, punctuation.definition.tag.begin
- Angular ngInclude (element)
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngInit.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngInit.sublime-snippet
deleted file mode 100644
index 16b5280..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngInit.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- ng
- text.html meta.tag
- Angular ngInit
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngList.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngList.sublime-snippet
deleted file mode 100644
index 6eaa528..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngList.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- ng
- text.html meta.tag
- Angular ngList
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngMousedown.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngMousedown.sublime-snippet
deleted file mode 100644
index ea1e255..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngMousedown.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- ng
- text.html meta.tag
- Angular ngMousedown
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngMouseenter.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngMouseenter.sublime-snippet
deleted file mode 100644
index 07c7921..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngMouseenter.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- ng
- text.html meta.tag
- Angular ngMouseenter
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngMouseleave.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngMouseleave.sublime-snippet
deleted file mode 100644
index 9b761a3..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngMouseleave.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- ng
- text.html meta.tag
- Angular ngMouseleave
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngMousemove.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngMousemove.sublime-snippet
deleted file mode 100644
index 4ad694d..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngMousemove.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- ng
- text.html meta.tag
- Angular ngMousemove
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngMouseover.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngMouseover.sublime-snippet
deleted file mode 100644
index 39e894b..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngMouseover.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- ng
- text.html meta.tag
- Angular ngMouseover
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngMouseup.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngMouseup.sublime-snippet
deleted file mode 100644
index 5fb454d..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngMouseup.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- ng
- text.html meta.tag
- Angular ngMouseup
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngMultiple.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngMultiple.sublime-snippet
deleted file mode 100644
index fa27c0a..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngMultiple.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- ng
- text.html meta.tag
- Angular ngMultiple
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngNonBindable.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngNonBindable.sublime-snippet
deleted file mode 100644
index 0a6af7f..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngNonBindable.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- ng
- text.html meta.tag
- Angular ngNonBindable
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngPluralize.attribute.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngPluralize.attribute.sublime-snippet
deleted file mode 100644
index 4ad5935..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngPluralize.attribute.sublime-snippet
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
- ng
- text.html meta.tag
- Angular ngPluralize
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngPluralize.element.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngPluralize.element.sublime-snippet
deleted file mode 100644
index e115984..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngPluralize.element.sublime-snippet
+++ /dev/null
@@ -1,11 +0,0 @@
-
- ]]>
- ng
- text.html -source -meta.tag, punctuation.definition.tag.begin
- Angular ngPluralize
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngReadonly.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngReadonly.sublime-snippet
deleted file mode 100644
index b81d783..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngReadonly.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- ng
- text.html meta.tag
- Angular ngReadonly
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngRepeat.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngRepeat.sublime-snippet
deleted file mode 100644
index d89d36d..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngRepeat.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- ng
- text.html meta.tag
- Angular ngRepeat
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngSelected.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngSelected.sublime-snippet
deleted file mode 100644
index a076ce1..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngSelected.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- ng
- text.html meta.tag
- Angular ngSelected
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngShow.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngShow.sublime-snippet
deleted file mode 100644
index e1537f7..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngShow.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- ng
- text.html meta.tag
- Angular ngShow
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngSrc.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngSrc.sublime-snippet
deleted file mode 100644
index e8f1b76..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngSrc.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- ng
- text.html meta.tag
- Angular ngSrc
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngStyle.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngStyle.sublime-snippet
deleted file mode 100644
index 7e05c30..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngStyle.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- ng
- text.html meta.tag
- Angular ngStyle
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngSubmit.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngSubmit.sublime-snippet
deleted file mode 100644
index 460278e..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngSubmit.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- ng
- text.html meta.tag
- Angular ngSubmit
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngSwitch.attribute.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngSwitch.attribute.sublime-snippet
deleted file mode 100644
index cab23ba..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngSwitch.attribute.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- ng
- text.html meta.tag
- Angular ngSwitch
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngSwitch.element.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngSwitch.element.sublime-snippet
deleted file mode 100644
index 15b5928..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngSwitch.element.sublime-snippet
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
- ${3:
-
- }${5:
-
- }
-]]>
- ng
- text.html -source -meta.tag, punctuation.definition.tag.begin
- Angular ngSwitch
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngSwitchDefault.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngSwitchDefault.sublime-snippet
deleted file mode 100644
index 0392355..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngSwitchDefault.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- ng
- text.html meta.tag
- Angular ngSwitchDefault
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngSwitchWhen.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngSwitchWhen.sublime-snippet
deleted file mode 100644
index d2642aa..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngSwitchWhen.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- ng
- text.html meta.tag
- Angular ngSwitchWhen
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngTransclude.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngTransclude.sublime-snippet
deleted file mode 100644
index be995b5..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngTransclude.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- ng
- text.html meta.tag
- Angular ngTransclude
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngView.attribute.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngView.attribute.sublime-snippet
deleted file mode 100644
index 641b6cb..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngView.attribute.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- ng
- text.html meta.tag
- Angular ngView
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngView.element.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngView.element.sublime-snippet
deleted file mode 100644
index 6f4438f..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/ngView.element.sublime-snippet
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-$0
-]]>
- ng
- text.html -source -meta.tag, punctuation.definition.tag.begin
- Angular ngView
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/script.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/script.sublime-snippet
deleted file mode 100644
index 2d7f3b4..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/script.sublime-snippet
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-${1:inline-template}
-]]>
- ng
- text.html -source -meta.tag, punctuation.definition.tag.begin
- Angular Script (inline template)
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/select.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/select.sublime-snippet
deleted file mode 100644
index 4ec1581..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/select.sublime-snippet
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
- $0
-]]>
- ng
- text.html -source -meta.tag, punctuation.definition.tag.begin
- Angular select
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/textarea.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/textarea.sublime-snippet
deleted file mode 100644
index ce4ab43..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Directive/textarea.sublime-snippet
+++ /dev/null
@@ -1,13 +0,0 @@
-
- ]]>
- ng
- text.html -source -meta.tag, punctuation.definition.tag.begin
- Angular textarea
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Filter/$filter.generic.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Filter/$filter.generic.sublime-snippet
deleted file mode 100644
index a76dd63..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Filter/$filter.generic.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $filter
- source.coffee
- Angular generic filter
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Filter/$filter.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Filter/$filter.sublime-snippet
deleted file mode 100644
index 34e8f33..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Filter/$filter.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $
- source.coffee
- Angular filter
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Filter/currency.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Filter/currency.sublime-snippet
deleted file mode 100644
index 4576d87..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Filter/currency.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $filter
- source.coffee
- Angular currency filter
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Filter/currency.template.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Filter/currency.template.sublime-snippet
deleted file mode 100644
index 06f2eb8..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Filter/currency.template.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- fil
- text.html
- Angular currency filter
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Filter/date.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Filter/date.sublime-snippet
deleted file mode 100644
index 952eeb3..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Filter/date.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $filter
- source.coffee
- Angular date filter
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Filter/date.template.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Filter/date.template.sublime-snippet
deleted file mode 100644
index 8830624..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Filter/date.template.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- fil
- text.html
- Angular date filter
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Filter/filter.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Filter/filter.sublime-snippet
deleted file mode 100644
index 9dd4860..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Filter/filter.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
- }}}]]>
- $filter
- source.coffee
- Angular filter filter
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Filter/filter.template.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Filter/filter.template.sublime-snippet
deleted file mode 100644
index 1a9ef8b..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Filter/filter.template.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
- } }}]]>
- fil
- text.html
- Angular filter filter
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Filter/json.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Filter/json.sublime-snippet
deleted file mode 100644
index 9090b1b..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Filter/json.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $filter
- source.coffee
- Angular json filter
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Filter/json.template.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Filter/json.template.sublime-snippet
deleted file mode 100644
index 6b47ecb..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Filter/json.template.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- fil
- text.html
- Angular json filter
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Filter/limitTo.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Filter/limitTo.sublime-snippet
deleted file mode 100644
index ce8b113..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Filter/limitTo.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $filter
- source.coffee
- Angular limitTo filter
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Filter/limitTo.template.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Filter/limitTo.template.sublime-snippet
deleted file mode 100644
index 6367092..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Filter/limitTo.template.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- fil
- text.html
- Angular limitTo filter
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Filter/linky.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Filter/linky.sublime-snippet
deleted file mode 100644
index af387d0..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Filter/linky.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $filter
- source.coffee
- Angular linky filter
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Filter/linky.template.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Filter/linky.template.sublime-snippet
deleted file mode 100644
index a5d8515..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Filter/linky.template.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- fil
- text.html
- Angular linky filter
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Filter/lowercase.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Filter/lowercase.sublime-snippet
deleted file mode 100644
index a246f79..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Filter/lowercase.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $filter
- source.coffee
- Angular lowercase filter
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Filter/lowercase.template.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Filter/lowercase.template.sublime-snippet
deleted file mode 100644
index 8d7d351..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Filter/lowercase.template.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- fil
- text.html
- Angular lowercase filter
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Filter/number.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Filter/number.sublime-snippet
deleted file mode 100644
index 65fc953..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Filter/number.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $filter
- source.coffee
- Angular number filter
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Filter/number.template.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Filter/number.template.sublime-snippet
deleted file mode 100644
index c7bdbc9..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Filter/number.template.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- fil
- text.html
- Angular number filter
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Filter/orderBy.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Filter/orderBy.sublime-snippet
deleted file mode 100644
index aeec603..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Filter/orderBy.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $filter
- source.coffee
- Angular orderBy filter
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Filter/orderBy.template.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Filter/orderBy.template.sublime-snippet
deleted file mode 100644
index ba3056b..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Filter/orderBy.template.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- fil
- text.html
- Angular orderBy filter
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Filter/uppercase.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Filter/uppercase.sublime-snippet
deleted file mode 100644
index 1429cf9..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Filter/uppercase.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $filter
- source.coffee
- Angular uppercase filter
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Filter/uppercase.template.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Filter/uppercase.template.sublime-snippet
deleted file mode 100644
index 78fa238..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Filter/uppercase.template.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- fil
- text.html
- Angular uppercase filter
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/bind.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/bind.sublime-snippet
deleted file mode 100644
index bd05ecd..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/bind.sublime-snippet
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
- # bind stuff
- $0
-angular.bind ${3:self|context}, ${1}${4:, ${5:optional-args}}]]>
- ng
- source.coffee
- Angular bind
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/bootstrap.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/bootstrap.sublime-snippet
deleted file mode 100644
index 0df6606..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/bootstrap.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- ng
- source.coffee
- Angular bootstrap
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/copy.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/copy.sublime-snippet
deleted file mode 100644
index 4da006f..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/copy.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- ng
- source.coffee
- Angular copy
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/element.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/element.sublime-snippet
deleted file mode 100644
index c312f73..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/element.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- ng
- source.coffee
- Angular element
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/equals.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/equals.sublime-snippet
deleted file mode 100644
index 4be7dbc..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/equals.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- ng
- source.coffee
- Angular equal
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/extend.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/extend.sublime-snippet
deleted file mode 100644
index d658569..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/extend.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- ng
- source.coffee
- Angular extend
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/forEach.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/forEach.sublime-snippet
deleted file mode 100644
index 1e6a773..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/forEach.sublime-snippet
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
- ${4:# ...}]]>
- for
- source.coffee
- Angular forEach
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/fromJson.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/fromJson.sublime-snippet
deleted file mode 100644
index f7b6cb0..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/fromJson.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- ng
- source.coffee
- Angular fromJson
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/identity.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/identity.sublime-snippet
deleted file mode 100644
index f1c0ba5..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/identity.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- ng
- source.coffee
- Angular identity
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/injector.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/injector.sublime-snippet
deleted file mode 100644
index 0f72cac..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/injector.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- ng
- source.coffee
- Angular injector
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/isArray.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/isArray.sublime-snippet
deleted file mode 100644
index c16bb07..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/isArray.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- is
- source.coffee
- Angular isArray
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/isDate.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/isDate.sublime-snippet
deleted file mode 100644
index ac42381..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/isDate.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- is
- source.coffee
- Angular isDate
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/isDefined.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/isDefined.sublime-snippet
deleted file mode 100644
index 09969bd..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/isDefined.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- is
- source.coffee
- Angular isDefined
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/isElement.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/isElement.sublime-snippet
deleted file mode 100644
index 1d4a649..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/isElement.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- is
- source.coffee
- Angular isElement
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/isFunction.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/isFunction.sublime-snippet
deleted file mode 100644
index 94d17b1..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/isFunction.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- is
- source.coffee
- Angular isFunction
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/isNumber.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/isNumber.sublime-snippet
deleted file mode 100644
index 5db2421..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/isNumber.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- is
- source.coffee
- Angular isNumber
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/isObject.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/isObject.sublime-snippet
deleted file mode 100644
index 3f40d94..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/isObject.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- is
- source.coffee
- Angular isObject
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/isString.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/isString.sublime-snippet
deleted file mode 100644
index c2a1aa7..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/isString.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- is
- source.coffee
- Angular isString
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/isUndefined.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/isUndefined.sublime-snippet
deleted file mode 100644
index 536d3fa..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/isUndefined.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- is
- source.coffee
- Angular isUndefined
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/lowercase.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/lowercase.sublime-snippet
deleted file mode 100644
index c7be3bd..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/lowercase.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- ng
- source.coffee
- Angular lowercase
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/module.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/module.sublime-snippet
deleted file mode 100644
index c306085..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/module.sublime-snippet
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
- ${7:# configuration handler}]]>
- mod
- source.coffee
- Angular module
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/noop.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/noop.sublime-snippet
deleted file mode 100644
index e4d28c2..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/noop.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- ng
- source.coffee
- Angular noop
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/toJson.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/toJson.sublime-snippet
deleted file mode 100644
index 734dbdd..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/toJson.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- ng
- source.coffee
- Angular toJson
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/uppercase.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/uppercase.sublime-snippet
deleted file mode 100644
index 923eae9..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/uppercase.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- ng
- source.coffee
- Angular uppercase
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/version.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/version.sublime-snippet
deleted file mode 100644
index 8d4e3d0..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Global/version.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- ng
- source.coffee
- Angular version
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Http/$http.simple.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Http/$http.simple.sublime-snippet
deleted file mode 100644
index faa94bf..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Http/$http.simple.sublime-snippet
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
- ${5:success handler}
-.Error (status, response) ->
- ${6:error handler}
-]]>
- $
- source.coffee
- Angular $http simple
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Http/$http.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Http/$http.sublime-snippet
deleted file mode 100644
index 8854d07..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Http/$http.sublime-snippet
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
- #return serialized version}${10:
- transformResponse: (data, headersGetter) ->
- #return serialized version}${11:
- cache: ${12:true|false|Cache}}${13:
- timeout: ${14:msTimeout}}${15:
- withCredentials: ${16:true|false}}
-\$http config]]>
- $
- source.coffee
- Angular $http (w/ config)
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Http/defaults.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Http/defaults.sublime-snippet
deleted file mode 100644
index ffaca01..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Http/defaults.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $http.
- source.coffee
- Angular $http defaults
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Http/delete.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Http/delete.sublime-snippet
deleted file mode 100644
index 79fa6e8..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Http/delete.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $http.
- source.coffee
- Angular $http delete
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Http/error.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Http/error.sublime-snippet
deleted file mode 100644
index 77edbfe..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Http/error.sublime-snippet
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
- ${1:error function}]]>
- .error
- source.coffee
- Angular $http error
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Http/get.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Http/get.sublime-snippet
deleted file mode 100644
index 79fa6e8..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Http/get.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $http.
- source.coffee
- Angular $http delete
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Http/head.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Http/head.sublime-snippet
deleted file mode 100644
index 493808b..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Http/head.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $http.
- source.coffee
- Angular $http head
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Http/jsonp.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Http/jsonp.sublime-snippet
deleted file mode 100644
index 918f837..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Http/jsonp.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $http.
- source.coffee
- Angular $http jsonp
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Http/pendingRequests.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Http/pendingRequests.sublime-snippet
deleted file mode 100644
index 6133f00..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Http/pendingRequests.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $http.
- source.coffee
- Angular $http pendingRequests
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Http/post.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Http/post.sublime-snippet
deleted file mode 100644
index a9d2ef7..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Http/post.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $http.
- source.coffee
- Angular $http post
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Http/put.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Http/put.sublime-snippet
deleted file mode 100644
index 2fc9095..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Http/put.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $http.
- source.coffee
- Angular $http put
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Http/success.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Http/success.sublime-snippet
deleted file mode 100644
index 36ed5fc..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Http/success.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- .success
- source.coffee
- Angular $http success
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/HttpBackend/expect.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/HttpBackend/expect.sublime-snippet
deleted file mode 100644
index 5f7c30c..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/HttpBackend/expect.sublime-snippet
+++ /dev/null
@@ -1,8 +0,0 @@
-
- }}]]>
- .expect
- source.coffee
- Angular $httpBackend expect
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/HttpBackend/expectDELETE.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/HttpBackend/expectDELETE.sublime-snippet
deleted file mode 100644
index 7539de8..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/HttpBackend/expectDELETE.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
- }}]]>
- .expect
- source.coffee
- Angular $httpBackend expectDELETE
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/HttpBackend/expectGET.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/HttpBackend/expectGET.sublime-snippet
deleted file mode 100644
index a1d6096..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/HttpBackend/expectGET.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
- }}]]>
- .expect
- source.coffee
- Angular $httpBackend expectGET
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/HttpBackend/expectHEAD.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/HttpBackend/expectHEAD.sublime-snippet
deleted file mode 100644
index e93c55e..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/HttpBackend/expectHEAD.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
- }}]]>
- .expect
- source.coffee
- Angular $httpBackend expectHEAD
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/HttpBackend/expectJSONP.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/HttpBackend/expectJSONP.sublime-snippet
deleted file mode 100644
index d0fbdbe..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/HttpBackend/expectJSONP.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- .expect
- source.coffee
- Angular $httpBackend expectJSONP
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/HttpBackend/expectPATCH.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/HttpBackend/expectPATCH.sublime-snippet
deleted file mode 100644
index c864954..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/HttpBackend/expectPATCH.sublime-snippet
+++ /dev/null
@@ -1,8 +0,0 @@
-
- }}]]>
- .expect
- source.coffee
- Angular $httpBackend expectPATCH
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/HttpBackend/expectPOST.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/HttpBackend/expectPOST.sublime-snippet
deleted file mode 100644
index 5f0c90f..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/HttpBackend/expectPOST.sublime-snippet
+++ /dev/null
@@ -1,8 +0,0 @@
-
- }}]]>
- .expect
- source.coffee
- Angular $httpBackend expectPOST
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/HttpBackend/expectPUT.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/HttpBackend/expectPUT.sublime-snippet
deleted file mode 100644
index ee17ba9..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/HttpBackend/expectPUT.sublime-snippet
+++ /dev/null
@@ -1,8 +0,0 @@
-
- }}]]>
- .expect
- source.coffee
- Angular $httpBackend expectPUT
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/HttpBackend/flush.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/HttpBackend/flush.sublime-snippet
deleted file mode 100644
index 262753e..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/HttpBackend/flush.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $httpBackend.
- source.coffee
- Angular $httpBackend flush
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/HttpBackend/httpBackend.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/HttpBackend/httpBackend.sublime-snippet
deleted file mode 100644
index 52158f5..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/HttpBackend/httpBackend.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $
- source.coffee
- Angular $httpBackend
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/HttpBackend/resetExpectations.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/HttpBackend/resetExpectations.sublime-snippet
deleted file mode 100644
index fa25ac2..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/HttpBackend/resetExpectations.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $httpBackend.
- source.coffee
- Angular $httpBackend resetExpectations
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/HttpBackend/verifyNoOutstandingExpectation.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/HttpBackend/verifyNoOutstandingExpectation.sublime-snippet
deleted file mode 100644
index 5e0ca62..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/HttpBackend/verifyNoOutstandingExpectation.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $httpBackend.
- source.coffee
- Angular $httpBackend verifyNoOutstandingExpectation
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/HttpBackend/verifyNoOutstandingRequest.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/HttpBackend/verifyNoOutstandingRequest.sublime-snippet
deleted file mode 100644
index 59b7415..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/HttpBackend/verifyNoOutstandingRequest.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $httpBackend.
- source.coffee
- Angular $httpBackend verifyNoOutstandingRequest
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/HttpBackend/when.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/HttpBackend/when.sublime-snippet
deleted file mode 100644
index 343850e..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/HttpBackend/when.sublime-snippet
+++ /dev/null
@@ -1,8 +0,0 @@
-
- }}]]>
- .when
- source.coffee
- Angular $httpBackend when
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/HttpBackend/whenDELETE.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/HttpBackend/whenDELETE.sublime-snippet
deleted file mode 100644
index 4fdc0ef..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/HttpBackend/whenDELETE.sublime-snippet
+++ /dev/null
@@ -1,7 +0,0 @@
-
- }}]]>
- .when
- source.coffee
- Angular $httpBackend whenDELETE
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/HttpBackend/whenGET.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/HttpBackend/whenGET.sublime-snippet
deleted file mode 100644
index e6c9d7b..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/HttpBackend/whenGET.sublime-snippet
+++ /dev/null
@@ -1,7 +0,0 @@
-
- }}]]>
- .when
- source.coffee
- Angular $httpBackend whenGET
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/HttpBackend/whenHEAD.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/HttpBackend/whenHEAD.sublime-snippet
deleted file mode 100644
index bff8373..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/HttpBackend/whenHEAD.sublime-snippet
+++ /dev/null
@@ -1,7 +0,0 @@
-
- }}]]>
- .when
- source.coffee
- Angular $httpBackend whenHEAD
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/HttpBackend/whenPATCH.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/HttpBackend/whenPATCH.sublime-snippet
deleted file mode 100644
index 5f27f2d..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/HttpBackend/whenPATCH.sublime-snippet
+++ /dev/null
@@ -1,8 +0,0 @@
-
- }}]]>
- .when
- source.coffee
- Angular $httpBackend whenPATCH
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/HttpBackend/whenPOST.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/HttpBackend/whenPOST.sublime-snippet
deleted file mode 100644
index 1c0eddc..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/HttpBackend/whenPOST.sublime-snippet
+++ /dev/null
@@ -1,8 +0,0 @@
-
- }}]]>
- .when
- source.coffee
- Angular $httpBackend whenPOST
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/HttpBackend/whenPUT.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/HttpBackend/whenPUT.sublime-snippet
deleted file mode 100644
index b92784b..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/HttpBackend/whenPUT.sublime-snippet
+++ /dev/null
@@ -1,8 +0,0 @@
-
- }}]]>
- .when
- source.coffee
- Angular $httpBackend whenPUT
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Injector/$injector.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Injector/$injector.sublime-snippet
deleted file mode 100644
index 5e18d6d..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Injector/$injector.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $
- source.coffee
- Angular $injector
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Injector/annotate.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Injector/annotate.sublime-snippet
deleted file mode 100644
index f0a7dc3..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Injector/annotate.sublime-snippet
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- ${1:#a function to annotate}
-]]>
- $injector.
- source.coffee
- Angular $injector annotate
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Injector/get.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Injector/get.sublime-snippet
deleted file mode 100644
index 785eded..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Injector/get.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $injector.
- source.coffee
- Angular $injector get
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Injector/instantiate.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Injector/instantiate.sublime-snippet
deleted file mode 100644
index 2dee8eb..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Injector/instantiate.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $injector.
- source.coffee
- Angular $injector instantiate
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Injector/invoke.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Injector/invoke.sublime-snippet
deleted file mode 100644
index 1469d2e..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Injector/invoke.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $injector.
- source.coffee
- Angular $injector invoke
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Interpolate/$interpolate.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Interpolate/$interpolate.sublime-snippet
deleted file mode 100644
index e18b7f6..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Interpolate/$interpolate.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $
- source.coffee
- Angular $interpolate
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Interpolate/endSymbol.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Interpolate/endSymbol.sublime-snippet
deleted file mode 100644
index 2343023..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Interpolate/endSymbol.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $interpolate.
- source.coffee
- Angular $interpolate endSymbol
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Interpolate/startSymbol.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Interpolate/startSymbol.sublime-snippet
deleted file mode 100644
index c41d3d9..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Interpolate/startSymbol.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $interpolate.
- source.coffee
- Angular $interpolate startSymbol
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Location/$location.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Location/$location.sublime-snippet
deleted file mode 100644
index c0e595c..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Location/$location.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $
- source.coffee
- Angular $location
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Location/absUrl.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Location/absUrl.sublime-snippet
deleted file mode 100644
index 4bd6c73..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Location/absUrl.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $location.
- source.coffee
- Angular $location absUrl
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Location/hash.get.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Location/hash.get.sublime-snippet
deleted file mode 100644
index 237e512..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Location/hash.get.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $location.
- source.coffee
- Angular $location hash get
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Location/hash.set.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Location/hash.set.sublime-snippet
deleted file mode 100644
index 6678cb4..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Location/hash.set.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $location.
- source.coffee
- Angular $location hash set
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Location/host.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Location/host.sublime-snippet
deleted file mode 100644
index 214c3c4..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Location/host.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $location.
- source.coffee
- Angular $location host
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Location/path.get.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Location/path.get.sublime-snippet
deleted file mode 100644
index 0c7f4a3..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Location/path.get.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $location.
- source.coffee
- Angular $location path get
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Location/path.set.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Location/path.set.sublime-snippet
deleted file mode 100644
index f6c0b93..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Location/path.set.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $location.
- source.coffee
- Angular $location path set
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Location/port.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Location/port.sublime-snippet
deleted file mode 100644
index 1e34440..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Location/port.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $location.
- source.coffee
- Angular $location port
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Location/protocol.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Location/protocol.sublime-snippet
deleted file mode 100644
index 7da27c3..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Location/protocol.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $location.
- source.coffee
- Angular $location protocol
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Location/replace.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Location/replace.sublime-snippet
deleted file mode 100644
index 2f5c888..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Location/replace.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $location.
- source.coffee
- Angular $location replace
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Location/search.get.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Location/search.get.sublime-snippet
deleted file mode 100644
index 2e283b2..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Location/search.get.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $location.
- source.coffee
- Angular $location search get
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Location/search.set.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Location/search.set.sublime-snippet
deleted file mode 100644
index 983d1ac..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Location/search.set.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $location.
- source.coffee
- Angular $location search set
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Location/url.get.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Location/url.get.sublime-snippet
deleted file mode 100644
index d31fa11..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Location/url.get.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $location.
- source.coffee
- Angular $location url get
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Location/url.set.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Location/url.set.sublime-snippet
deleted file mode 100644
index e602206..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Location/url.set.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $location.
- source.coffee
- Angular $location url set
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Log/$log.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Log/$log.sublime-snippet
deleted file mode 100644
index 200c76e..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Log/$log.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $
- source.coffee
- Angular $log
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Log/error.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Log/error.sublime-snippet
deleted file mode 100644
index eb13de9..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Log/error.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $log.
- source.coffee
- Angular $log error
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Log/info.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Log/info.sublime-snippet
deleted file mode 100644
index 4ede968..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Log/info.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $log.
- source.coffee
- Angular $log info
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Log/log.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Log/log.sublime-snippet
deleted file mode 100644
index 2898f37..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Log/log.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $log.
- source.coffee
- Angular $log log
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Log/warn.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Log/warn.sublime-snippet
deleted file mode 100644
index 0c796da..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Log/warn.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $log.
- source.coffee
- Angular $log warn
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Mock/TzDate.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Mock/TzDate.sublime-snippet
deleted file mode 100644
index 00a5279..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Mock/TzDate.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- mock
- source.coffee
- Angular mock TzDate
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Mock/debug.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Mock/debug.sublime-snippet
deleted file mode 100644
index 9aa097c..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Mock/debug.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- mock
- source.coffee
- Angular mock debug
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Mock/inject.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Mock/inject.sublime-snippet
deleted file mode 100644
index 9ca1bfe..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Mock/inject.sublime-snippet
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
- $0
-${5:, (${6:fnparam1}${7:, ${8:fnparam2}}) ->
- }]]>
- mock
- source.coffee
- Angular mock inject (Jasmine only)
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Mock/log.assertEmpty b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Mock/log.assertEmpty
deleted file mode 100644
index e53b9da..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Mock/log.assertEmpty
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $log.
- source.coffee
- AngularJS mock $log assertEmpty
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Mock/log.logs b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Mock/log.logs
deleted file mode 100644
index 361ff76..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Mock/log.logs
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $log.
- source.coffee
- AngularJS mock $log logs
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Mock/log.reset.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Mock/log.reset.sublime-snippet
deleted file mode 100644
index 7ba509f..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Mock/log.reset.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $log.
- source.coffee
- Angular mock $log reset
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Mock/module.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Mock/module.sublime-snippet
deleted file mode 100644
index 0292c0b..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Mock/module.sublime-snippet
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
- $0
-}${7:, (${8:fnparam1}${9:, ${10:fnparam2}}) ->
- }]]>
- mock
- source.coffee
- Angular mock module (Jasmine only)
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Module/config.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Module/config.sublime-snippet
deleted file mode 100644
index e234757..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Module/config.sublime-snippet
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- #exec on load
- $0]]>
- mod
- source.coffee
- Angular Module config
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Module/constant.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Module/constant.sublime-snippet
deleted file mode 100644
index 98f6f12..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Module/constant.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- mod
- source.coffee
- Angular Module constant
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Module/controller.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Module/controller.sublime-snippet
deleted file mode 100644
index 199da4b..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Module/controller.sublime-snippet
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
- ${3:constructor function}]]>
- mod
- source.coffee
- Angular Module controller
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Module/directive.complete.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Module/directive.complete.sublime-snippet
deleted file mode 100644
index 64efeaf..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Module/directive.complete.sublime-snippet
+++ /dev/null
@@ -1,38 +0,0 @@
-
-
- directiveDefinitionObject =
- priority: ${3:Number}
- terminal: ${4:true|false}
- scope: ${5:true|false|\{\} (object hash)}${6:
- controller: () ->
- ${7:#controller cn func, may access \$scope, \$element, \$attrs, \$transclude}}
- ${8:require: '${9:controllerName|?controllerName|^controllerName}'}
- restrict: '${11:E|A|C|M}'${12:
- template: '${13:HTML}'}${14:
- templateUrl: '${15:directive.html}'}
- replace: ${16:true|false}
- transclude: ${17:true|false|'element'}${18:
- #only use to transform template DOM
- compile: (tElement, tAttrs, transclude) ->
- compiler =
- pre: (scope, iElement, iAttrs, controller) ->
- #not safe for DOM transformation
- ${19:#}
- post: (scope, iElement, iAttrs, controller) ->
- #safe for DOM transformation
- ${20:#}
- return compiler
- }${21:
- #called IFF compile not defined
- link: (scope, iElement, iAttrs) ->
- #register DOM listeners or update DOM
- ${22:#}
- }
- return directiveDefinitionObject
-]]>
- dir
- source.coffee
- Angular Module directive (complete)
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Module/directive.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Module/directive.sublime-snippet
deleted file mode 100644
index ba73920..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Module/directive.sublime-snippet
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
- ${3:# Runs during compile}
- return (scope, elm, attrs) ->
- ${4:# Runs during render}]]>
- dir
- source.coffee
- Angular Module directive (simple)
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Module/factory.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Module/factory.sublime-snippet
deleted file mode 100644
index 2a968d5..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Module/factory.sublime-snippet
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
- ${3:provider function}]]>
- mod
- source.coffee
- Angular Module factory
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Module/filter.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Module/filter.sublime-snippet
deleted file mode 100644
index 552f050..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Module/filter.sublime-snippet
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
- ${3:filter function}]]>
- mod
- source.coffee
- Angular Module filter
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Module/provider.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Module/provider.sublime-snippet
deleted file mode 100644
index fac6680..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Module/provider.sublime-snippet
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
- ${5:provider function}}]]>
- mod
- source.coffee
- Angular Module provider
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Module/run.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Module/run.sublime-snippet
deleted file mode 100644
index 9a5ac3b..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Module/run.sublime-snippet
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
- ${3:initialization function}}]]>
- mod
- source.coffee
- Angular Module run
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Module/service.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Module/service.sublime-snippet
deleted file mode 100644
index 4b434f6..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Module/service.sublime-snippet
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
- ${4:service constructor}}]]>
- mod
- source.coffee
- Angular Module service
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Module/value.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Module/value.sublime-snippet
deleted file mode 100644
index b4334c4..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Module/value.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- mod
- source.coffee
- Angular Module value
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Provide/$provide.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Provide/$provide.sublime-snippet
deleted file mode 100644
index cbf3262..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Provide/$provide.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $
- source.coffee
- Angular $provide
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Provide/constant.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Provide/constant.sublime-snippet
deleted file mode 100644
index 586e24d..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Provide/constant.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $provide.
- source.coffee
- Angular $provide constant
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Provide/decorator.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Provide/decorator.sublime-snippet
deleted file mode 100644
index 9f0fbe7..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Provide/decorator.sublime-snippet
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- ${2:#function body to decorate}
-]]>
- $provide.
- source.coffee
- Angular $provide decorator
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Provide/factory.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Provide/factory.sublime-snippet
deleted file mode 100644
index e1890e4..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Provide/factory.sublime-snippet
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- ${2:#$getFn for instance creation}
-]]>
- $provide.
- source.coffee
- Angular $provide factory
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Provide/provider.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Provide/provider.sublime-snippet
deleted file mode 100644
index 77a658c..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Provide/provider.sublime-snippet
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- ${2:#$constructor function passed to $injector.instantiate}
-]]>
- $provide.
- source.coffee
- Angular $provide provider
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Provide/service.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Provide/service.sublime-snippet
deleted file mode 100644
index 34266f2..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Provide/service.sublime-snippet
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- ${2:#$constructor function}
-]]>
- $provide.
- source.coffee
- Angular $provide service
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Provide/value.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Provide/value.sublime-snippet
deleted file mode 100644
index fb3ca08..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Provide/value.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $provide.
- source.coffee
- Angular $provide value
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Q/$q.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Q/$q.sublime-snippet
deleted file mode 100644
index 63777ea..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Q/$q.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $
- source.coffee
- Angular $q
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Q/all.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Q/all.sublime-snippet
deleted file mode 100644
index 2e95cff..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Q/all.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $q.
- source.coffee
- Angular $q all
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Q/defer.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Q/defer.sublime-snippet
deleted file mode 100644
index b16293b..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Q/defer.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $q.
- source.coffee
- Angular $q defer
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Q/reject.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Q/reject.sublime-snippet
deleted file mode 100644
index 28ffd18..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Q/reject.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $q.
- source.coffee
- Angular $q reject
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Q/when.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Q/when.sublime-snippet
deleted file mode 100644
index d87fc44..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Q/when.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $q.
- source.coffee
- Angular $q when
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Resource/$resource.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Resource/$resource.sublime-snippet
deleted file mode 100644
index 842746b..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Resource/$resource.sublime-snippet
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
- $
- source.coffee
- Angular $resource
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Resource/delete.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Resource/delete.sublime-snippet
deleted file mode 100644
index 20c6a6a..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Resource/delete.sublime-snippet
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
- ${5:#success function}
-,
-() ->
- ${6:#error function}}
-]]>
- .$
- source.coffee
- Angular $resource delete
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Resource/get.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Resource/get.sublime-snippet
deleted file mode 100644
index 15df47b..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Resource/get.sublime-snippet
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
- ${5:#success function}
-,
-() ->
- ${6:#error function}}
-]]>
- .$
- source.coffee
- Angular $resource get
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Resource/query.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Resource/query.sublime-snippet
deleted file mode 100644
index f8d460a..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Resource/query.sublime-snippet
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
- ${5:#success function}
-,
-() ->
- ${6:#error function}}
-]]>
- .$
- source.coffee
- Angular $resource query
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Resource/remove.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Resource/remove.sublime-snippet
deleted file mode 100644
index b94fd8f..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Resource/remove.sublime-snippet
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
- ${5:#success function}
-,
-() ->
- ${6:#error function}}
-]]>
- .$
- source.coffee
- Angular $resource remove
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Resource/save.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Resource/save.sublime-snippet
deleted file mode 100644
index dc713c7..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Resource/save.sublime-snippet
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
- ${6:#success function}
-,
-() ->
- ${7:#error function}}
-]]>
- .$
- source.coffee
- Angular $resource save
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Route/$route.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Route/$route.sublime-snippet
deleted file mode 100644
index cc0cb0a..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Route/$route.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $
- source.coffee
- Angular $route
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Route/$routeChangeError.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Route/$routeChangeError.sublime-snippet
deleted file mode 100644
index 5d2f3d4..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Route/$routeChangeError.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- .$
- source.coffee
- Angular Route $routeChangeError
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Route/$routeChangeStart.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Route/$routeChangeStart.sublime-snippet
deleted file mode 100644
index d9ee300..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Route/$routeChangeStart.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- .$
- source.coffee
- Angular Route $routeChangeStart
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Route/$routeChangeSuccess.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Route/$routeChangeSuccess.sublime-snippet
deleted file mode 100644
index 4725808..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Route/$routeChangeSuccess.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- .$
- source.coffee
- Angular Route $routeChangeSuccess
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Route/$routeParams.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Route/$routeParams.sublime-snippet
deleted file mode 100644
index 510e5b9..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Route/$routeParams.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $
- source.coffee
- Angular $routeParams
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Route/$routeProvider.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Route/$routeProvider.sublime-snippet
deleted file mode 100644
index 6753e2e..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Route/$routeProvider.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $
- source.coffee
- Angular $routeProvider
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Route/$routeUpdate.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Route/$routeUpdate.sublime-snippet
deleted file mode 100644
index 4a0dc20..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Route/$routeUpdate.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- .$
- source.coffee
- Angular Route $routeUpdate
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Route/current.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Route/current.sublime-snippet
deleted file mode 100644
index a420c6a..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Route/current.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $route.
- source.coffee
- Angular Route current
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Route/otherwise.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Route/otherwise.sublime-snippet
deleted file mode 100644
index 2531a67..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Route/otherwise.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- .other
- source.coffee
- Angular $routeProvider otherwise
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Route/reload.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Route/reload.sublime-snippet
deleted file mode 100644
index a421a06..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Route/reload.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $route.
- source.coffee
- Angular $route reload
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Route/routes.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Route/routes.sublime-snippet
deleted file mode 100644
index 99556a4..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Route/routes.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $route.
- source.coffee
- Angular Route routes
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Route/when.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Route/when.sublime-snippet
deleted file mode 100644
index 5da44b6..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Route/when.sublime-snippet
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
- #controller function${1:
- template: '${2:string}'}${3:
- templateUrl: '${4:url}'}${5:
- resolve:
- '${6:dependencyName}' : ${7:serviceName|factory-function}}${8:
- redirectTo: ${9:path|function}}${10:
- reloadOnSearch: ${11:true|false}}
-\$routeProvider.when '${12:path}', route]]>
- $routeProvider.
- source.coffee
- Angular $routeProvider when
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Scope/$rootScope.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Scope/$rootScope.sublime-snippet
deleted file mode 100644
index 4b6f7af..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Scope/$rootScope.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $
- source.coffee
- Angular $rootScope
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Scope/apply.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Scope/apply.sublime-snippet
deleted file mode 100644
index da72bbd..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Scope/apply.sublime-snippet
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
- ${2:function body (or delete function and use expression)}}]]>
- .$
- source.coffee
- Angular Scope $apply
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Scope/broadcast.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Scope/broadcast.sublime-snippet
deleted file mode 100644
index 135c632..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Scope/broadcast.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- .$
- source.coffee
- Angular Scope $broadcast
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Scope/destroy.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Scope/destroy.sublime-snippet
deleted file mode 100644
index 09b42cf..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Scope/destroy.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- .$
- source.coffee
- Angular Scope $destroy
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Scope/digest.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Scope/digest.sublime-snippet
deleted file mode 100644
index 404e6ac..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Scope/digest.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- .$
- source.coffee
- Angular Scope $digest
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Scope/emit.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Scope/emit.sublime-snippet
deleted file mode 100644
index c30df8c..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Scope/emit.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- .$
- source.coffee
- Angular Scope $emit
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Scope/eval.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Scope/eval.sublime-snippet
deleted file mode 100644
index 3b79f73..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Scope/eval.sublime-snippet
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
- ${2:function body (or delete function and use expression)}}]]>
- .$
- source.coffee
- Angular Scope $eval
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Scope/evalAsync.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Scope/evalAsync.sublime-snippet
deleted file mode 100644
index d450e92..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Scope/evalAsync.sublime-snippet
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
- ${2:function body (or delete function and use expression)}}]]>
- .$
- source.coffee
- Angular Scope $evalAsync
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Scope/id.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Scope/id.sublime-snippet
deleted file mode 100644
index e09d8bb..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Scope/id.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- .$
- source.coffee
- Angular Scope $id
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Scope/new.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Scope/new.sublime-snippet
deleted file mode 100644
index a975b6b..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Scope/new.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- .$
- source.coffee
- Angular Scope $new
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Scope/on.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Scope/on.sublime-snippet
deleted file mode 100644
index cbbdc3e..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Scope/on.sublime-snippet
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
- ${2:event listener function}]]>
- .$
- source.coffee
- Angular Scope $on
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Scope/watch.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Scope/watch.sublime-snippet
deleted file mode 100644
index c0c07f9..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Scope/watch.sublime-snippet
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- $0
-${3:, ${4:forEquality-true|forReference-false}}}]]>
- .$
- source.coffee
- Angular Scope $watch
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Service/$anchorScroll.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Service/$anchorScroll.sublime-snippet
deleted file mode 100644
index d214e19..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Service/$anchorScroll.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $
- source.coffee
- Angular $anchorScroll
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Service/$cacheFactory.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Service/$cacheFactory.sublime-snippet
deleted file mode 100644
index d0f8d3d..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Service/$cacheFactory.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $
- source.coffee
- Angular $cacheFactory
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Service/$compile.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Service/$compile.sublime-snippet
deleted file mode 100644
index 070f1d4..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Service/$compile.sublime-snippet
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- ${2:#transclude function}
-), ${3:maxPriorityNumber}]]>
- $
- source.coffee
- Angular $compile
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Service/$controller.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Service/$controller.sublime-snippet
deleted file mode 100644
index 0b4b136..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Service/$controller.sublime-snippet
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- ${2:#constructor function - name also accepted}
-)}, ${3:locals-to-inject}]]>
- $
- source.coffee
- Angular $controller
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Service/$document.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Service/$document.sublime-snippet
deleted file mode 100644
index b5af9ac..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Service/$document.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $
- source.coffee
- Angular $document
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Service/$exceptionHandler.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Service/$exceptionHandler.sublime-snippet
deleted file mode 100644
index d16bb97..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Service/$exceptionHandler.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $
- source.coffee
- Angular $exceptionHandler
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Service/$locale.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Service/$locale.sublime-snippet
deleted file mode 100644
index 3236624..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Service/$locale.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $
- source.coffee
- Angular $locale id
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Service/$parse.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Service/$parse.sublime-snippet
deleted file mode 100644
index 11aacf8..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Service/$parse.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $
- source.coffee
- Angular $parse
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Service/$rootElement.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Service/$rootElement.sublime-snippet
deleted file mode 100644
index 9ef3a3a..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Service/$rootElement.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $
- source.coffee
- Angular $rootElement
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Service/$sanitize.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Service/$sanitize.sublime-snippet
deleted file mode 100644
index 9c07f04..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Service/$sanitize.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $
- source.coffee
- Angular $sanitize
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Service/$templateCache.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Service/$templateCache.sublime-snippet
deleted file mode 100644
index 28c193b..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Service/$templateCache.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $
- source.coffee
- Angular $templateCache
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Service/$timeout.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Service/$timeout.sublime-snippet
deleted file mode 100644
index 5a39b06..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Service/$timeout.sublime-snippet
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
- ${1:functionToExecute}${2:
-, ${3:msDelay}}${4:
-, ${5:invokeApply-true|false}}]]>
- $
- source.coffee
- Angular $timeout
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Service/$window.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Service/$window.sublime-snippet
deleted file mode 100644
index c138020..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/Snippets/Service/$window.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $
- source.coffee
- Angular $window
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/package-metadata.json b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/package-metadata.json
deleted file mode 100644
index 7c9bb82..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/package-metadata.json
+++ /dev/null
@@ -1 +0,0 @@
-{"url": "https://github.com/EastPoint/Sublime-AngularJS-Coffee-Completions", "version": "2012.09.24.14.10.42", "description": "A Sublime Text Package for AngularJS when using CoffeeScript"}
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/services.sublime-completions b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/services.sublime-completions
deleted file mode 100644
index de6ae94..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AngularJS (CoffeeScript)/services.sublime-completions
+++ /dev/null
@@ -1,63 +0,0 @@
-{
- "scope": "source.coffee,source.js,source.js.embedded.html",
-
- "completions":
- [
- "\\$anchorScroll",
- "\\$cacheFactory",
- "\\$compile",
- "\\$controller",
- "\\$document",
- "\\$exceptionHandler",
- "\\$filter",
- "\\$http",
- "\\$httpBackend",
- "\\$interpolate",
- "\\$locale",
- "\\$location",
- "\\$log",
- "\\$parse",
- "\\$q",
- "\\$rootElement",
- "\\$rootScope",
- "\\$route",
- "\\$routeParams",
- "\\$templateCache",
- "\\$timeout",
- "\\$window",
-
- "\\$apply",
- "\\$broadcast",
- "\\$destroy",
- "\\$digest",
- "\\$emit",
- "\\$eval",
- "\\$evalAsync",
- "\\$new",
- "\\$on",
- "\\$watch",
- "\\$id",
-
- "\\$render",
- "\\$setValidity",
- "\\$setViewValue",
- "\\$viewValue",
- "\\$modelValue",
- "\\$parsers",
- "\\$formatters",
- "\\$error",
- "\\$pristine",
- "\\$dirty",
- "\\$valid",
- "\\$invalid",
-
- "\\$injector",
- "\\$provide",
-
- "\\$cookies",
- "\\$cookieStore",
-
- "\\$resource",
- "\\$sanitize"
- ]
-}
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AutoFileName/.gitignore b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AutoFileName/.gitignore
deleted file mode 100644
index a0d5d0d..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AutoFileName/.gitignore
+++ /dev/null
@@ -1,5 +0,0 @@
-*.pyc
-*.html
-*.css
-*.png
-.DS_STORE
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AutoFileName/Default.sublime-keymap b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AutoFileName/Default.sublime-keymap
deleted file mode 100644
index 6098f74..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AutoFileName/Default.sublime-keymap
+++ /dev/null
@@ -1,24 +0,0 @@
-[
- { "keys": ["tab"], "command": "insert_dimensions",
- "context":
- [
- { "key": "setting.auto_complete_commit_on_tab" },
- { "key": "auto_complete_visible", "operator": "equal", "operand": true },
- { "key": "afn_insert_dimensions", "operator": "equal", "operand": true }
- ]
- },
- { "keys": ["enter"], "command": "insert_dimensions",
- "context":
- [
- { "key": "setting.auto_complete_commit_on_tab", "operator": "equal", "operand": false },
- { "key": "auto_complete_visible", "operator": "equal", "operand": true },
- { "key": "afn_insert_dimensions", "operator": "equal", "operand": true }
- ]
- },
- { "keys": ["backspace"], "command": "reload_auto_complete",
- "context":
- [
- { "key": "afn_deleting_slash", "operator": "equal", "operand": true }
- ]
- }
-]
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AutoFileName/Main.sublime-menu b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AutoFileName/Main.sublime-menu
deleted file mode 100644
index 0e92a8c..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AutoFileName/Main.sublime-menu
+++ /dev/null
@@ -1,35 +0,0 @@
-[
- {
- "caption": "Preferences",
- "mnemonic": "n",
- "id": "preferences",
- "children":
- [
- {
- "caption": "Package Settings",
- "mnemonic": "P",
- "id": "package-settings",
- "children":
- [
- {
- "caption": "AutoFileName",
- "children":
- [
- {
- "command": "open_file",
- "args": {"file": "${packages}/AutoFileName/autofilename.sublime-settings"},
- "caption": "Settings – Default"
- },
- {
- "command": "open_file",
- "args": {"file": "${packages}/User/Preferences.sublime-settings"},
- "caption": "Settings – User"
- },
- { "caption": "-" }
- ]
- }
- ]
- }
- ]
- }
-]
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AutoFileName/README.md b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AutoFileName/README.md
deleted file mode 100644
index 138fe10..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AutoFileName/README.md
+++ /dev/null
@@ -1,28 +0,0 @@
-AutoFileName: Autocomplete Filenames in Sublime Text
-=====================================================
-Do you ever find yourself sifting through folders in the sidebar trying to remember what you named that file? Can't remember if it was a jpg or a png? Maybe you just wish you could type filenames faster. *No more.*
-
-Whether your making a `img` tag in html, setting a background image in css, or linking a `.js` file to your html (or whatever else people use filename paths for these days...), you can now autocomplete the filename. Plus, it uses the built-in autocomplete, so no need to learn another *pesky* shortcut.
-
-Usage
-=====
-If you are looking to autocomplete an image path in an HTML ` ` tag:
-
-
-Pressing control+space, will activate AutoFileName. I list of available files where be ready to select.
-
-*Looking for an even more automatic and seemless completion?* Add the following to your User Settings file:
-
- "auto_complete_triggers":
- [
- {
- "characters": "<",
- "selector": "text.html"
- },
- {
- "characters": "/",
- "selector": "string.quoted.double.html,string.quoted.single.html, source.css"
- }
- ]
-
-With this, there's no need to worry about pressing control+space, autocompletion with appear upon pressing /.
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AutoFileName/autofilename.py b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AutoFileName/autofilename.py
deleted file mode 100644
index 004b929..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AutoFileName/autofilename.py
+++ /dev/null
@@ -1,157 +0,0 @@
-import sublime
-import sublime_plugin
-import os
-from getimageinfo import getImageInfo
-
-class InsertDimensionsCommand(sublime_plugin.TextCommand):
- this_dir = ''
-
- def insert_dimension(self,edit,dim,name,tag_scope):
- view = self.view
- sel = view.sel()[0].a
- if name in view.substr(tag_scope):
- reg = view.find('(?<='+name+'\=)\s*\"\d{1,5}', tag_scope.a)
- view.replace(edit, reg, '"'+str(dim))
- else:
- dimension = str(dim)
- view.insert(edit, sel+1, ' '+name+'="'+dimension+'"')
-
- def get_setting(self,string,view=None):
- if view and view.settings().get(string):
- return view.settings().get(string)
- else:
- return sublime.load_settings('autofilename.sublime-settings').get(string)
-
- def run(self, edit):
- view = self.view
- view.run_command("commit_completion")
- sel = view.sel()[0].a
- if not 'html' in view.scope_name(sel): return
- scope = view.extract_scope(sel-1)
- tag_scope = view.extract_scope(scope.a-1)
-
- path = view.substr(scope)
- if path.startswith(("'","\"","(")):
- path = path[1:-1]
-
- path = path[path.rfind('/'):] if '/' in path else ''
- full_path = self.this_dir + path
-
- if ' = 10) and data[:6] in ('GIF87a', 'GIF89a'):
- # Check to see if content_type is correct
- content_type = 'image/gif'
- w, h = struct.unpack("= 24) and data.startswith('\211PNG\r\n\032\n')
- and (data[12:16] == 'IHDR')):
- content_type = 'image/png'
- w, h = struct.unpack(">LL", data[16:24])
- width = int(w)
- height = int(h)
-
- # Maybe this is for an older PNG version.
- elif (size >= 16) and data.startswith('\211PNG\r\n\032\n'):
- # Check to see if we have the right content type
- content_type = 'image/png'
- w, h = struct.unpack(">LL", data[8:16])
- width = int(w)
- height = int(h)
-
- # handle JPEGs
- elif (size >= 2) and data.startswith('\377\330'):
- content_type = 'image/jpeg'
- jpeg = StringIO.StringIO(data)
- jpeg.read(2)
- b = jpeg.read(1)
- try:
- while (b and ord(b) != 0xDA):
- while (ord(b) != 0xFF): b = jpeg.read(1)
- while (ord(b) == 0xFF): b = jpeg.read(1)
- if (ord(b) >= 0xC0 and ord(b) <= 0xC3):
- jpeg.read(3)
- h, w = struct.unpack(">HH", jpeg.read(4))
- break
- else:
- jpeg.read(int(struct.unpack(">H", jpeg.read(2))[0])-2)
- b = jpeg.read(1)
- width = int(w)
- height = int(h)
- except struct.error:
- pass
- except ValueError:
- pass
-
- return content_type, width, height
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AutoFileName/package-metadata.json b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AutoFileName/package-metadata.json
deleted file mode 100644
index c6a63de..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/AutoFileName/package-metadata.json
+++ /dev/null
@@ -1 +0,0 @@
-{"url": "https://github.com/BoundInCode/AutoFileName", "version": "2013.01.23.20.19.29", "description": "Sublime Text 2 plugin that autocompletes filenames"}
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Chai Completions/.gitignore b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Chai Completions/.gitignore
deleted file mode 100644
index e69de29..0000000
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Chai Completions/README.md b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Chai Completions/README.md
deleted file mode 100644
index 306b125..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Chai Completions/README.md
+++ /dev/null
@@ -1,29 +0,0 @@
-## Full completions for the Chai Assertion Library
-
-This sublime package will install completions for *bdd* and *tdd*:
-- [*should*](http://chaijs.com/api/bdd/)
-- [*expect*](http://chaijs.com/api/bdd/)
-- [*assert*](http://chaijs.com/api/assert/)
-
-You can read the [full API for chai syntax](http://chaijs.com/api/).
-
-The completions work in both Javascript and [CoffeeScript](http://coffeescript.org/).
-
-This package was merged with [pahen's](https://github.com/pahen/) package in Sublime Package Control.
-
-### Installation
-Install with [Sublime Package Control](http://wbond.net/sublime_packages/package_control) if possible.
-- Super + Shift + P
-- Install Package
-- Chai Completions
-
-or without Sublime Package Control:
-
-```
-cd ~/Library/Application\ Support/Sublime\ Text\ 2/Packages/
-git clone git://github.com/pensive612/sublime-chai-full-completions.git
-```
-restart Sublime Text and you're good to go.
-
-
-Improvements and suggestions are welcome...
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Chai Completions/coffee/blocks/after.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Chai Completions/coffee/blocks/after.sublime-snippet
deleted file mode 100644
index 1a88676..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Chai Completions/coffee/blocks/after.sublime-snippet
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
- $1
-]]>
-
- after
-
- source.coffee
-
- After
-
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Chai Completions/coffee/blocks/aftereach.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Chai Completions/coffee/blocks/aftereach.sublime-snippet
deleted file mode 100644
index 903717d..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Chai Completions/coffee/blocks/aftereach.sublime-snippet
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
- $1
-]]>
-
- afte
-
- source.coffee
-
- After Each
-
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Chai Completions/coffee/blocks/before.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Chai Completions/coffee/blocks/before.sublime-snippet
deleted file mode 100644
index f8ee5e4..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Chai Completions/coffee/blocks/before.sublime-snippet
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
- $1
-]]>
-
- bef
-
- source.coffee
-
- Before
-
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Chai Completions/coffee/blocks/beforeeach.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Chai Completions/coffee/blocks/beforeeach.sublime-snippet
deleted file mode 100644
index f77a2ba..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Chai Completions/coffee/blocks/beforeeach.sublime-snippet
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
- $1
-]]>
-
- befe
-
- source.coffee
-
- Before Each
-
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Chai Completions/coffee/blocks/describe.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Chai Completions/coffee/blocks/describe.sublime-snippet
deleted file mode 100644
index b1ff03c..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Chai Completions/coffee/blocks/describe.sublime-snippet
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
- $2
-]]>
-
- des
-
- source.coffee
-
- Describe
-
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Chai Completions/coffee/blocks/it.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Chai Completions/coffee/blocks/it.sublime-snippet
deleted file mode 100644
index 963331c..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Chai Completions/coffee/blocks/it.sublime-snippet
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
- $2
-]]>
-
- it
-
- source.coffee
-
- It
-
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Chai Completions/coffee/completions/assert-chai-coffee.sublime-completions b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Chai Completions/coffee/completions/assert-chai-coffee.sublime-completions
deleted file mode 100644
index d384a9a..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Chai Completions/coffee/completions/assert-chai-coffee.sublime-completions
+++ /dev/null
@@ -1,54 +0,0 @@
-{
- "scope": "source.coffee",
- "version": "0.10",
- "completions":
- [
- { "trigger": "assert", "contents": "assert ${1:expression}${2:, \"${3:[message]}\"}$0"},
- { "trigger": "assert.fail", "contents": "assert.fail ${1:actual}, ${2:expected}${3:, \"${4:[message]}\", ${5:[operator]}}$0"},
- { "trigger": "assert.ok", "contents": "assert.ok ${1:object}${2:, \"${3:[message]}\"}$0"},
- { "trigger": "assert.equal", "contents": "assert.equal ${1:actual}, ${2:expected}${3:, \"${4:[message]}\"}$0"},
- { "trigger": "assert.notEqual", "contents": "assert.notEqual ${1:actual}, ${2:expected}${3:, \"${3:[message]}\"}$0"},
- { "trigger": "assert.strictEqual", "contents": "assert.strictEqual ${1:actual}, ${2:expected}${3:, \"${4:[message]}\"}$0"},
- { "trigger": "assert.notStrictEqual", "contents": "assert.notStrictEqual ${1:actual}, ${2:expected}${3:, \"${4:[message]}\"}$0"},
- { "trigger": "assert.deepEqual", "contents": "assert.deepEqual ${1:actual}, ${2:expected}${3:, \"${4:[message]}\"}$0"},
- { "trigger": "assert.notDeepEqual", "contents": "assert.notDeepEqual ${1:actual}, ${2:expected}${3:, \"${3:[message]}\"}$0"},
- { "trigger": "assert.isTrue", "contents": "assert.isTrue ${1:value}${2:, \"${3:[message]}\"}$0"},
- { "trigger": "assert.isFalse", "contents": "assert.isFalse ${1:value}${2:, \"${3:[message]}\"}$0"},
- { "trigger": "assert.isNull", "contents": "assert.isNull ${1:value}${2:, \"${3:[message]}\"}$0"},
- { "trigger": "assert.isNotNull", "contents": "assert.isNotNull ${1:value}${2:, \"${3:[message]}\"}$0"},
- { "trigger": "assert.isUndefined", "contents": "assert.isUndefined ${1:value}${2:, \"${3:[message]}\"}$0"},
- { "trigger": "assert.isDefined", "contents": "assert.isDefined ${1:value}${2:, \"${3:[message]}\"}$0"},
- { "trigger": "assert.isFunction", "contents": "assert.isFunction ${1:value}${2:, \"${3:[message]}\"}$0"},
- { "trigger": "assert.isNotFunction", "contents": "assert.isNotFunction ${1:value}${2:, \"${3:[message]}\"}$0"},
- { "trigger": "assert.isObject", "contents": "assert.isObject ${1:value}${2:, \"${3:[message]}\"}$0"},
- { "trigger": "assert.isNotObject", "contents": "assert.isNotObject ${1:value}${2:, \"${3:[message]}\"}$0"},
- { "trigger": "assert.isArray", "contents": "assert.isArray ${1:value}${2:, \"${3:[message]}\"}$0"},
- { "trigger": "assert.isNotArray", "contents": "assert.isNotArray ${1:value}${2:, \"${3:[message]}\"}$0"},
- { "trigger": "assert.isString", "contents": "assert.isString ${1:value}${2:, \"${3:[message]}\"}$0"},
- { "trigger": "assert.isNotString", "contents": "assert.isNotString ${1:value}${2:, \"${3:[message]}\"}$0"},
- { "trigger": "assert.isNumber", "contents": "assert.isNumber ${1:value}${2:, \"${3:[message]}\"}$0"},
- { "trigger": "assert.isNotNumber", "contents": "assert.isNotNumber ${1:value}${2:, \"${3:[message]}\"}$0"},
- { "trigger": "assert.isBoolean", "contents": "assert.isBoolean ${1:value}${2:, \"${3:[message]}\"}$0"},
- { "trigger": "assert.isNotBoolean", "contents": "assert.isNotBoolean ${1:value}${2:, \"${3:[message]}\"}$0"},
- { "trigger": "assert.typeOf", "contents": "assert.typeOf ${1:value}, ${2:name}${3:, \"${4:[message]}\"}$0"},
- { "trigger": "assert.notTypeOf", "contents": "assert.notTypeOf ${1:value}, ${2:name}${3:, \"${4:[message]}\"}$0"},
- { "trigger": "assert.instanceOf", "contents": "assert.instanceOf ${1:object}, ${2:constructor}${3:, \"${4:[message]}\"}$0"},
- { "trigger": "assert.notInstanceOf", "contents": "assert.notInstanceOf ${1:object}, ${2:constructor}${3:, \"${4:[message]}\"}$0"},
- { "trigger": "assert.include", "contents": "assert.include ${1:haystack}, ${2:needle}${3:, \"${4:[message]}\"}$0"},
- { "trigger": "assert.match", "contents": "assert.match ${1:value}, ${2:regexp}${3:, \"${4:[message]}\"}$0"},
- { "trigger": "assert.notMatch", "contents": "assert.notMatch ${1:value}, ${2:regexp}${3:, \"${4:[message]}\"}$0"},
- { "trigger": "assert.property", "contents": "assert.property ${1:object}, ${2:property}${3:, \"${4:[message]}\"}$0"},
- { "trigger": "assert.notProperty", "contents": "assert.notProperty ${1:object}, ${2:property}${3:, \"${4:[message]}\"}$0"},
- { "trigger": "assert.deepProperty", "contents": "assert.deepProperty ${1:object}, ${2:property}${3:, \"${4:[message]}\"}$0"},
- { "trigger": "assert.notDeepProperty", "contents": "assert.notDeepProperty ${1:object}, ${2:property}${3:, \"${4:[message]}\"}$0"},
- { "trigger": "assert.propertyVal", "contents": "assert.notDeepProperty ${1:object}, ${2:property}, ${3:value}${4:, \"${5:[message]}\"}$0"},
- { "trigger": "assert.propertyNotVal", "contents": "assert.propertyNotVal ${1:object}, ${2:property} ${3:value}${4:, \"${5:[message]}\"}$0"},
- { "trigger": "assert.deepPropertyVal", "contents": "assert.deepPropertyVal ${1:object}, ${2:property} ${3:value}${4:, \"${5:[message]}\"}$0"},
- { "trigger": "assert.deepPropertyNotVal", "contents": "assert.deepPropertyNotVal ${1:object}, ${2:property}, ${3:value}${4:, \"${5:[message]}\"}$0"},
- { "trigger": "assert.lengthOf", "contents": "assert.lengthOf ${1:object}, ${2:length}${3:, \"${4:[message]}\"}$0"},
- { "trigger": "assert.throws", "contents": "assert.throws ${1:function}, ${2:constructor/regexp}${3:, \"${4:[message]}\"}$0"},
- { "trigger": "assert.doesNotThrow", "contents": "assert.doesNotThrow ${1:function}, ${2:constructor/regexp}${3:, \"${4:[message]}\"}$0"},
- { "trigger": "assert.operator", "contents": "assert.operator ${1:val1}, ${2:operator}, ${3:val2}${4:, \"${5:[message]}\"}$0"},
- { "trigger": "assert.closeTo", "contents": "assert.closeTo ${1:actual}, ${2:expected}, ${3:delta}${4:, \"${5:[message]}\"}$0" }
- ]
-}
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Chai Completions/coffee/completions/expect-chai-coffee.sublime-completions b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Chai Completions/coffee/completions/expect-chai-coffee.sublime-completions
deleted file mode 100644
index b66fbac..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Chai Completions/coffee/completions/expect-chai-coffee.sublime-completions
+++ /dev/null
@@ -1,56 +0,0 @@
-{
- "scope": "source.coffee",
- "version": "0.10",
- "completions":
- [
- { "trigger": "expect", "contents": "expect(${1:value}).to.$0" },
- { "trigger": "expect.to.be.a", "contents": "expect(${1:value}).to.be.a \"${2:type}\"$0" },
- { "trigger": "expect.to.be.an", "contents": "expect(${1:value}).to.be.an \"${2:type}\"$0" },
- { "trigger": "expect.to.be.an.instanceof", "contents": "expect(${1:value}).to.be.an.instanceof ${2:object}$0" },
- { "trigger": "expect.to.include", "contents": "expect(${1:value}).to.include ${2:value}$0" },
- { "trigger": "expect.to.contain", "contents": "expect(${1:value}).to.contain \"${2:string}\"$0" },
- { "trigger": "expect.to.include.keys", "contents": "expect(${1:value}).to.include.keys \"${2:string}\"$0" },
- { "trigger": "expect.to.be.ok", "contents": "expect(${1:value}).to.be.ok$0" },
- { "trigger": "expect.to.not.be.ok", "contents": "expect(${1:value}).to.not.be.ok$0" },
- { "trigger": "expect.to.be.true", "contents": "expect(${1:value}).to.be.true$0" },
- { "trigger": "expect.to.not.be.true", "contents": "expect(${1:value}).to.not.be.true$0" },
- { "trigger": "expect.to.be.false", "contents": "expect(${1:value}).to.be.false$0" },
- { "trigger": "expect.to.not.be.false", "contents": "expect(${1:value}).to.not.be.false$0" },
- { "trigger": "expect.to.be.null", "contents": "expect(${1:value}).to.be.null$0" },
- { "trigger": "expect.to.not.be.null", "contents": "expect(${1:value}).to.not.be.null$0" },
- { "trigger": "expect.to.be.undefined", "contents": "expect(${1:value}).to.be.undefined$0" },
- { "trigger": "expect.to.not.be.undefined", "contents": "expect(${1:value}).to.not.be.undefined$0" },
- { "trigger": "expect.to.exist", "contents": "expect(${1:value}).to.exist$0" },
- { "trigger": "expect.to.not.exist", "contents": "expect(${1:value}).to.not.exist$0" },
- { "trigger": "expect.to.be.empty", "contents": "expect(${1:value}).to.be.empty$0" },
- { "trigger": "expect.to.not.be.empty", "contents": "expect(${1:value}).to.not.be.empty$0" },
- { "trigger": "expect.to.be.arguments", "contents": "expect(${1:value}).to.be.arguments ${2:value}$0" },
- { "trigger": "expect.to.equal", "contents": "expect(${1:value}).to.equal ${2:value}$0" },
- { "trigger": "expect.to.not.equal", "contents": "expect(${1:value}).to.not.equal ${2:value}$0" },
- { "trigger": "expect.to.eql", "contents": "expect(${1:value}).to.eql ${2:value}$0" },
- { "trigger": "expect.to.not.eql", "contents": "expect(${1:value}).to.not.eql ${2:value}$0" },
- { "trigger": "expect.to.be.above", "contents": "expect(${1:value}).to.be.above ${2:value}$0" },
- { "trigger": "expect.to.have.length.above", "contents": "expect(${1:value}).to.have.length.above ${2:value}$0" },
- { "trigger": "expect.to.be.at.least", "contents": "expect(${1:value}).to.be.at.least ${2:value}$0" },
- { "trigger": "expect.to.be.below", "contents": "expect(${1:value}).to.be.below ${2:value}$0" },
- { "trigger": "expect.to.be.at.most", "contents": "expect(${1:value}).to.be.at.most ${2:value}$0" },
- { "trigger": "expect.to.have.length.of.at.most", "contents": "expect(${1:value}).to.have.length.of.at.most ${2:value}$0" },
- { "trigger": "expect.to.be.within", "contents": "expect(${1:value}).to.be.within ${2:start}, ${3:finish}$0" },
- { "trigger": "expect.to.have.length.within", "contents": "expect(${1:value}).to.have.length.within ${2:start}, ${3:finish}$0" },
- { "trigger": "expect.to.have.property", "contents": "expect(${1:value}).to.have.property \"${2:value}\"$0" },
- { "trigger": "expect.to.have.deep.property", "contents": "expect(${1:value}).to.have.deep.property \"${2:value}\"$0" },
- { "trigger": "expect.to.have.ownProperty", "contents": "expect(${1:value}).to.have.ownProperty \"${2:value}\"$0" },
- { "trigger": "expect.to.have.length", "contents": "expect(${1:value}).to.have.length ${2:value}$0" },
- { "trigger": "expect.to.have.length.above", "contents": "expect(${1:value}).to.have.length.above ${2:value}$0" },
- { "trigger": "expect.to.have.length.below", "contents": "expect(${1:value}).to.have.length.below ${2:value}$0" },
- { "trigger": "expect.to.have.length.within", "contents": "expect(${1:value}).to.have.length.within ${2:start}, ${3:finish}$0" },
- { "trigger": "expect.to.match", "contents": "expect(${1:value}).to.match /${2:regex}/$0" },
- { "trigger": "expect.to.have.string", "contents": "expect(${1:value}).to.have.string \"${2:string}\"$0" },
- { "trigger": "expect.to.have.keys", "contents": "expect(${1:value}).to.have.keys \"${2:string}\"$0" },
- { "trigger": "expect.to.throw", "contents": "expect(${1:value}).to.throw ${2:error}$0" },
- { "trigger": "expect.to.not.throw", "contents": "expect(${1:value}).to.not.throw ${2:error}$0" },
- { "trigger": "expect.to.respondTo", "contents": "expect(${1:value}).to.respondTo ${2:string}$0" },
- { "trigger": "expect.to.satisfy", "contents": "expect(${1:value}).to.satisfy ${2:function}$0" },
- { "trigger": "expect.to.be.closeTo", "contents": "expect(${1:value}).to.be.closeTo ${2:expected}, ${3:delta}$0" }
- ]
-}
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Chai Completions/coffee/completions/should-chai-coffee.sublime-completions b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Chai Completions/coffee/completions/should-chai-coffee.sublime-completions
deleted file mode 100644
index 7d036b8..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Chai Completions/coffee/completions/should-chai-coffee.sublime-completions
+++ /dev/null
@@ -1,56 +0,0 @@
-{
- "scope": "source.coffee",
- "version": "0.10",
- "completions":
- [
- { "trigger": "should", "contents": "should.$0" },
- { "trigger": "should.be.a", "contents": "should.be.a \"${1:type}\"$0" },
- { "trigger": "should.be.an", "contents": "should.be.an \"${1:type}\"$0" },
- { "trigger": "should.be.an.instanceof", "contents": "should.be.an.instanceof ${1:object}$0" },
- { "trigger": "should.include", "contents": "should.include ${1:value}$0" },
- { "trigger": "should.contain", "contents": "should.contain \"${1:string}\"$0" },
- { "trigger": "should.include.keys", "contents": "should.include.keys \"${1:string}\"$0" },
- { "trigger": "should.be.ok", "contents": "should.be.ok$0" },
- { "trigger": "should.not.be.ok", "contents": "should.not.be.ok$0" },
- { "trigger": "should.be.true", "contents": "should.be.true$0" },
- { "trigger": "should.not.be.true", "contents": "should.not.be.true$0" },
- { "trigger": "should.be.false", "contents": "should.be.false$0" },
- { "trigger": "should.not.be.false", "contents": "should.not.be.false$0" },
- { "trigger": "should.be.null", "contents": "should.be.null$0" },
- { "trigger": "should.not.be.null", "contents": "should.not.be.null$0" },
- { "trigger": "should.be.undefined", "contents": "should.be.undefined$0" },
- { "trigger": "should.not.be.undefined", "contents": "should.not.be.undefined$0" },
- { "trigger": "should.exist", "contents": "should.exist$0" },
- { "trigger": "should.not.exist", "contents": "should.not.exist$0" },
- { "trigger": "should.be.empty", "contents": "should.be.empty$0" },
- { "trigger": "should.not.be.empty", "contents": "should.not.be.empty$0" },
- { "trigger": "should.be.arguments", "contents": "should.be.arguments ${1:value}$0" },
- { "trigger": "should.equal", "contents": "should.equal ${1:value}$0" },
- { "trigger": "should.not.equal", "contents": "should.not.equal ${1:value}$0" },
- { "trigger": "should.eql", "contents": "should.eql ${1:value}$0" },
- { "trigger": "should.not.eql", "contents": "should.not.eql ${1:value}$0" },
- { "trigger": "should.be.above", "contents": "should.be.above ${1:value}$0" },
- { "trigger": "should.have.length.above", "contents": "should.have.length.above ${1:value}$0" },
- { "trigger": "should.be.at.least", "contents": "should.be.at.least ${1:value}$0" },
- { "trigger": "should.be.below", "contents": "should.be.below ${1:value}$0" },
- { "trigger": "should.be.at.most", "contents": "should.be.at.most ${1:value}$0" },
- { "trigger": "should.have.length.of.at.most", "contents": "should.have.length.of.at.most ${1:value}$0" },
- { "trigger": "should.be.within", "contents": "should.be.within ${1:start}, ${2:finish}$0" },
- { "trigger": "should.have.length.within", "contents": "should.have.length.within ${1:start}, ${2:finish}$0" },
- { "trigger": "should.have.property", "contents": "should.have.property \"${1:value}\"$0" },
- { "trigger": "should.have.deep.property", "contents": "should.have.deep.property \"${1:value}\"$0" },
- { "trigger": "should.have.ownProperty", "contents": "should.have.ownProperty \"${1:value}\"$0" },
- { "trigger": "should.have.length", "contents": "should.have.length ${1:value}$0" },
- { "trigger": "should.have.length.above", "contents": "should.have.length.above ${1:value}$0" },
- { "trigger": "should.have.length.below", "contents": "should.have.length.below ${1:value}$0" },
- { "trigger": "should.have.length.within", "contents": "should.have.length.within ${1:start}, ${2:finish}$0" },
- { "trigger": "should.match", "contents": "should.match /${1:regex}/$0" },
- { "trigger": "should.have.string", "contents": "should.have.string \"${1:string}\"$0" },
- { "trigger": "should.have.keys", "contents": "should.have.keys \"${1:string}\"$0" },
- { "trigger": "should.throw", "contents": "should.throw ${1:error}$0" },
- { "trigger": "should.not.throw", "contents": "should.not.throw ${1:error}$0" },
- { "trigger": "should.respondTo", "contents": "should.respondTo ${1:string}$0" },
- { "trigger": "should.satisfy", "contents": "should.satisfy ${1:function}$0" },
- { "trigger": "should.be.closeTo", "contents": "should.be.closeTo ${1:expected}, ${2:delta}$0" }
- ]
-}
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Chai Completions/js/blocks/after.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Chai Completions/js/blocks/after.sublime-snippet
deleted file mode 100644
index 9de0c4c..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Chai Completions/js/blocks/after.sublime-snippet
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
- after
-
- source.js
-
- After
-
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Chai Completions/js/blocks/aftereach.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Chai Completions/js/blocks/aftereach.sublime-snippet
deleted file mode 100644
index eed95b5..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Chai Completions/js/blocks/aftereach.sublime-snippet
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
- aftereach
-
- source.js
-
- After Each
-
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Chai Completions/js/blocks/before.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Chai Completions/js/blocks/before.sublime-snippet
deleted file mode 100644
index 341fb8b..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Chai Completions/js/blocks/before.sublime-snippet
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
- before
-
- source.js
-
- Before
-
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Chai Completions/js/blocks/beforeeach.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Chai Completions/js/blocks/beforeeach.sublime-snippet
deleted file mode 100644
index 1d00262..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Chai Completions/js/blocks/beforeeach.sublime-snippet
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
- beforeeach
-
- source.js
-
- Before Each
-
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Chai Completions/js/blocks/describe.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Chai Completions/js/blocks/describe.sublime-snippet
deleted file mode 100644
index a514380..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Chai Completions/js/blocks/describe.sublime-snippet
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
- describe
-
- source.js
-
- Describe
-
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Chai Completions/js/blocks/it.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Chai Completions/js/blocks/it.sublime-snippet
deleted file mode 100644
index 56468f7..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Chai Completions/js/blocks/it.sublime-snippet
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
- it
-
- source.js
-
- It
-
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Chai Completions/js/completions/assert-chai-coffee.sublime-completions b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Chai Completions/js/completions/assert-chai-coffee.sublime-completions
deleted file mode 100644
index a35a5f0..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Chai Completions/js/completions/assert-chai-coffee.sublime-completions
+++ /dev/null
@@ -1,54 +0,0 @@
-{
- "scope": "source.js",
- "version": "0.10",
- "completions":
- [
- { "trigger": "assert", "contents": "assert(${1:expression}${2:, \"${3:[message]}\"});$0"},
- { "trigger": "assert.fail", "contents": "assert.fail(${1:actual}, ${2:expected}${3:, \"${4:[message]}\", ${5:[operator]}});$0"},
- { "trigger": "assert.ok", "contents": "assert.ok(${1:object}${2:, \"${3:[message]}\"});$0"},
- { "trigger": "assert.equal", "contents": "assert.equal(${1:actual}, ${2:expected}${3:, \"${4:[message]}\"});$0"},
- { "trigger": "assert.notEqual", "contents": "assert.notEqual(${1:actual}, ${2:expected}${3:, \"${3:[message]}\"});$0"},
- { "trigger": "assert.strictEqual", "contents": "assert.strictEqual(${1:actual}, ${2:expected}${3:, \"${4:[message]}\"});$0"},
- { "trigger": "assert.notStrictEqual", "contents": "assert.notStrictEqual(${1:actual}, ${2:expected}${3:, \"${4:[message]}\"});$0"},
- { "trigger": "assert.deepEqual", "contents": "assert.deepEqual(${1:actual}, ${2:expected}${3:, \"${4:[message]}\"});$0"},
- { "trigger": "assert.notDeepEqual", "contents": "assert.notDeepEqual(${1:actual}, ${2:expected}${3:, \"${3:[message]}\"});$0"},
- { "trigger": "assert.isTrue", "contents": "assert.isTrue(${1:value}${2:, \"${3:[message]}\"});$0"},
- { "trigger": "assert.isFalse", "contents": "assert.isFalse(${1:value}${2:, \"${3:[message]}\"});$0"},
- { "trigger": "assert.isNull", "contents": "assert.isNull(${1:value}${2:, \"${3:[message]}\"});$0"},
- { "trigger": "assert.isNotNull", "contents": "assert.isNotNull(${1:value}${2:, \"${3:[message]}\"});$0"},
- { "trigger": "assert.isUndefined", "contents": "assert.isUndefined(${1:value}${2:, \"${3:[message]}\"});$0"},
- { "trigger": "assert.isDefined", "contents": "assert.isDefined(${1:value}${2:, \"${3:[message]}\"});$0"},
- { "trigger": "assert.isFunction", "contents": "assert.isFunction(${1:value}${2:, \"${3:[message]}\"});$0"},
- { "trigger": "assert.isNotFunction", "contents": "assert.isNotFunction(${1:value}${2:, \"${3:[message]}\"});$0"},
- { "trigger": "assert.isObject", "contents": "assert.isObject(${1:value}${2:, \"${3:[message]}\"});$0"},
- { "trigger": "assert.isNotObject", "contents": "assert.isNotObject(${1:value}${2:, \"${3:[message]}\"});$0"},
- { "trigger": "assert.isArray", "contents": "assert.isArray(${1:value}${2:, \"${3:[message]}\"});$0"},
- { "trigger": "assert.isNotArray", "contents": "assert.isNotArray(${1:value}${2:, \"${3:[message]}\"});$0"},
- { "trigger": "assert.isString", "contents": "assert.isString(${1:value}${2:, \"${3:[message]}\"});$0"},
- { "trigger": "assert.isNotString", "contents": "assert.isNotString(${1:value}${2:, \"${3:[message]}\"});$0"},
- { "trigger": "assert.isNumber", "contents": "assert.isNumber(${1:value}${2:, \"${3:[message]}\"});$0"},
- { "trigger": "assert.isNotNumber", "contents": "assert.isNotNumber(${1:value}${2:, \"${3:[message]}\"});$0"},
- { "trigger": "assert.isBoolean", "contents": "assert.isBoolean(${1:value}${2:, \"${3:[message]}\"});$0"},
- { "trigger": "assert.isNotBoolean", "contents": "assert.isNotBoolean(${1:value}${2:, \"${3:[message]}\"});$0"},
- { "trigger": "assert.typeOf", "contents": "assert.typeOf(${1:value}, ${2:name}${3:, \"${4:[message]}\"});$0"},
- { "trigger": "assert.notTypeOf", "contents": "assert.notTypeOf(${1:value}, ${2:name}${3:, \"${4:[message]}\"});$0"},
- { "trigger": "assert.instanceOf", "contents": "assert.instanceOf(${1:object}, ${2:constructor}${3:, \"${4:[message]}\"});$0"},
- { "trigger": "assert.notInstanceOf", "contents": "assert.notInstanceOf(${1:object}, ${2:constructor}${3:, \"${4:[message]}\"});$0"},
- { "trigger": "assert.include", "contents": "assert.include(${1:haystack}, ${2:needle}${3:, \"${4:[message]}\"});$0"},
- { "trigger": "assert.match", "contents": "assert.match(${1:value}, ${2:regexp}${3:, \"${4:[message]}\"});$0"},
- { "trigger": "assert.notMatch", "contents": "assert.notMatch(${1:value}, ${2:regexp}${3:, \"${4:[message]}\"});$0"},
- { "trigger": "assert.property", "contents": "assert.property(${1:object}, ${2:property}${3:, \"${4:[message]}\"});$0"},
- { "trigger": "assert.notProperty", "contents": "assert.notProperty(${1:object}, ${2:property}${3:, \"${4:[message]}\"});$0"},
- { "trigger": "assert.deepProperty", "contents": "assert.deepProperty(${1:object}, ${2:property}${3:, \"${4:[message]}\"});$0"},
- { "trigger": "assert.notDeepProperty", "contents": "assert.notDeepProperty(${1:object}, ${2:property}${3:, \"${4:[message]}\"});$0"},
- { "trigger": "assert.propertyVal", "contents": "assert.notDeepProperty(${1:object}, ${2:property}, ${3:value}${4:, \"${5:[message]}\"});$0"},
- { "trigger": "assert.propertyNotVal", "contents": "assert.propertyNotVal(${1:object}, ${2:property} ${3:value}${4:, \"${5:[message]}\"});$0"},
- { "trigger": "assert.deepPropertyVal", "contents": "assert.deepPropertyVal(${1:object}, ${2:property} ${3:value}${4:, \"${5:[message]}\"});$0"},
- { "trigger": "assert.deepPropertyNotVal", "contents": "assert.deepPropertyNotVal(${1:object}, ${2:property}, ${3:value}${4:, \"${5:[message]}\"});$0"},
- { "trigger": "assert.lengthOf", "contents": "assert.lengthOf(${1:object}, ${2:length}${3:, \"${4:[message]}\"});$0"},
- { "trigger": "assert.throws", "contents": "assert.throws(${1:function}, ${2:constructor/regexp}${3:, \"${4:[message]}\"});$0"},
- { "trigger": "assert.doesNotThrow", "contents": "assert.doesNotThrow(${1:function}, ${2:constructor/regexp}${3:, \"${4:[message]}\"});$0"},
- { "trigger": "assert.operator", "contents": "assert.operator(${1:val1}, ${2:operator}, ${3:val2}${4:, \"${5:[message]}\"});$0"},
- { "trigger": "assert.closeTo", "contents": "assert.closeTo(${1:actual}, ${2:expected}, ${3:delta}${4:, \"${5:[message]}\"}$0" }
- ]
-}
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Chai Completions/js/completions/expect-chai-coffee.sublime-completions b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Chai Completions/js/completions/expect-chai-coffee.sublime-completions
deleted file mode 100644
index 7020c48..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Chai Completions/js/completions/expect-chai-coffee.sublime-completions
+++ /dev/null
@@ -1,56 +0,0 @@
-{
- "scope": "source.js",
- "version": "0.10",
- "completions":
- [
- { "trigger": "expect", "contents": "expect(${1:value}).to.;$0"},
- { "trigger": "expect.to.be.a", "contents": "expect(${1:value}).to.be.a(\"${2:type}\");$0"},
- { "trigger": "expect.to.be.an", "contents": "expect(${1:value}).to.be.an(\"${2:type}\");$0"},
- { "trigger": "expect.to.be.an.instanceof", "contents": "expect(${1:value}).to.be.an.instanceof(${2:object});$0"},
- { "trigger": "expect.to.include", "contents": "expect(${1:value}).to.include(${2:value});$0"},
- { "trigger": "expect.to.contain", "contents": "expect(${1:value}).to.contain(\"${2:string}\");$0"},
- { "trigger": "expect.to.include.keys", "contents": "expect(${1:value}).to.include.keys(\"${2:string}\");$0"},
- { "trigger": "expect.to.be.ok", "contents": "expect(${1:value}).to.be.ok;$0"},
- { "trigger": "expect.to.not.be.ok", "contents": "expect(${1:value}).to.not.be.ok;$0"},
- { "trigger": "expect.to.be.true", "contents": "expect(${1:value}).to.be.true;$0"},
- { "trigger": "expect.to.not.be.true", "contents": "expect(${1:value}).to.not.be.true;$0"},
- { "trigger": "expect.to.be.false", "contents": "expect(${1:value}).to.be.false;$0"},
- { "trigger": "expect.to.not.be.false", "contents": "expect(${1:value}).to.not.be.false;$0"},
- { "trigger": "expect.to.be.null", "contents": "expect(${1:value}).to.be.null;$0"},
- { "trigger": "expect.to.not.be.null", "contents": "expect(${1:value}).to.not.be.null;$0"},
- { "trigger": "expect.to.be.undefined", "contents": "expect(${1:value}).to.be.undefined;$0"},
- { "trigger": "expect.to.not.be.undefined", "contents": "expect(${1:value}).to.not.be.undefined;$0"},
- { "trigger": "expect.to.exist", "contents": "expect(${1:value}).to.exist;$0"},
- { "trigger": "expect.to.not.exist", "contents": "expect(${1:value}).to.not.exist;$0"},
- { "trigger": "expect.to.be.empty", "contents": "expect(${1:value}).to.be.empty;$0"},
- { "trigger": "expect.to.not.be.empty", "contents": "expect(${1:value}).to.not.be.empty;$0"},
- { "trigger": "expect.to.be.arguments", "contents": "expect(${1:value}).to.be.arguments(${2:value});$0"},
- { "trigger": "expect.to.equal", "contents": "expect(${1:value}).to.equal(${2:value});$0"},
- { "trigger": "expect.to.not.equal", "contents": "expect(${1:value}).to.not.equal(${2:value});$0"},
- { "trigger": "expect.to.eql", "contents": "expect(${1:value}).to.eql(${2:value});$0"},
- { "trigger": "expect.to.not.eql", "contents": "expect(${1:value}).to.not.eql(${2:value});$0"},
- { "trigger": "expect.to.be.above", "contents": "expect(${1:value}).to.be.above(${2:value});$0"},
- { "trigger": "expect.to.have.length.above", "contents": "expect(${1:value}).to.have.length.above(${2:value});$0"},
- { "trigger": "expect.to.be.at.least", "contents": "expect(${1:value}).to.be.at.least(${2:value});$0"},
- { "trigger": "expect.to.be.below", "contents": "expect(${1:value}).to.be.below(${2:value});$0"},
- { "trigger": "expect.to.be.at.most", "contents": "expect(${1:value}).to.be.at.most(${2:value});$0"},
- { "trigger": "expect.to.have.length.of.at.most", "contents": "expect(${1:value}).to.have.length.of.at.most(${2:value});$0"},
- { "trigger": "expect.to.be.within", "contents": "expect(${1:value}).to.be.within(${2:start}, ${3:finish});$0"},
- { "trigger": "expect.to.have.length.within", "contents": "expect(${1:value}).to.have.length.within(${2:start}, ${3:finish});$0"},
- { "trigger": "expect.to.have.property", "contents": "expect(${1:value}).to.have.property(\"${2:value}\");$0"},
- { "trigger": "expect.to.have.deep.property", "contents": "expect(${1:value}).to.have.deep.property(\"${2:value}\");$0"},
- { "trigger": "expect.to.have.ownProperty", "contents": "expect(${1:value}).to.have.ownProperty(\"${2:value}\");$0"},
- { "trigger": "expect.to.have.length", "contents": "expect(${1:value}).to.have.length(${2:value});$0"},
- { "trigger": "expect.to.have.length.above", "contents": "expect(${1:value}).to.have.length.above(${2:value});$0"},
- { "trigger": "expect.to.have.length.below", "contents": "expect(${1:value}).to.have.length.below(${2:value});$0"},
- { "trigger": "expect.to.have.length.within", "contents": "expect(${1:value}).to.have.length.within(${2:start}, ${3:finish});$0"},
- { "trigger": "expect.to.match", "contents": "expect(${1:value}).to.match(/${2:regex}/);$0"},
- { "trigger": "expect.to.have.string", "contents": "expect(${1:value}).to.have.string(\"${2:string}\");$0"},
- { "trigger": "expect.to.have.keys", "contents": "expect(${1:value}).to.have.keys(\"${2:string}\");$0"},
- { "trigger": "expect.to.throw", "contents": "expect(${1:value}).to.throw(${2:error});$0"},
- { "trigger": "expect.to.not.throw", "contents": "expect(${1:value}).to.not.throw(${2:error});$0"},
- { "trigger": "expect.to.respondTo", "contents": "expect(${1:value}).to.respondTo(${2:string});$0"},
- { "trigger": "expect.to.satisfy", "contents": "expect(${1:value}).to.satisfy(${2:function});$0"},
- { "trigger": "expect.to.be.closeTo", "contents": "expect(${1:value}).to.be.closeTo(${2:expected}, ${3:delta});$0"}
- ]
-}
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Chai Completions/js/completions/should-chai-coffee.sublime-completions b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Chai Completions/js/completions/should-chai-coffee.sublime-completions
deleted file mode 100644
index d08ccaa..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Chai Completions/js/completions/should-chai-coffee.sublime-completions
+++ /dev/null
@@ -1,56 +0,0 @@
-{
- "scope": "source.js",
- "version": "0.10",
- "completions":
- [
- { "trigger": "should", "contents": "should.$0"},
- { "trigger": "should.be.a", "contents": "should.be.a(\"${1:type}\");$0"},
- { "trigger": "should.be.an", "contents": "should.be.an(\"${1:type}\");$0"},
- { "trigger": "should.be.an.instanceof", "contents": "should.be.an.instanceof(${1:object});$0"},
- { "trigger": "should.include", "contents": "should.include(${1:value});$0"},
- { "trigger": "should.contain", "contents": "should.contain(\"${1:string}\");$0"},
- { "trigger": "should.include.keys", "contents": "should.include.keys(\"${1:string}\");$0"},
- { "trigger": "should.be.ok", "contents": "should.be.ok;$0"},
- { "trigger": "should.not.be.ok", "contents": "should.not.be.ok;$0"},
- { "trigger": "should.be.true", "contents": "should.be.true;$0"},
- { "trigger": "should.not.be.true", "contents": "should.not.be.true;$0"},
- { "trigger": "should.be.false", "contents": "should.be.false;$0"},
- { "trigger": "should.not.be.false", "contents": "should.not.be.false;$0"},
- { "trigger": "should.be.null", "contents": "should.be.null;$0"},
- { "trigger": "should.not.be.null", "contents": "should.not.be.null;$0"},
- { "trigger": "should.be.undefined", "contents": "should.be.undefined;$0"},
- { "trigger": "should.not.be.undefined", "contents": "should.not.be.undefined;$0"},
- { "trigger": "should.exist", "contents": "should.exist;$0"},
- { "trigger": "should.not.exist", "contents": "should.not.exist;$0"},
- { "trigger": "should.be.empty", "contents": "should.be.empty;$0"},
- { "trigger": "should.not.be.empty", "contents": "should.not.be.empty;$0"},
- { "trigger": "should.be.arguments", "contents": "should.be.arguments(${1:value}$0"},
- { "trigger": "should.equal", "contents": "should.equal(${1:value});$0"},
- { "trigger": "should.not.equal", "contents": "should.not.equal(${1:value});$0"},
- { "trigger": "should.eql", "contents": "should.eql(${1:value});$0"},
- { "trigger": "should.not.eql", "contents": "should.not.eql(${1:value});$0"},
- { "trigger": "should.be.above", "contents": "should.be.above(${1:value});$0"},
- { "trigger": "should.have.length.above", "contents": "should.have.length.above(${1:value});$0"},
- { "trigger": "should.be.at.least", "contents": "should.be.at.least(${1:value});$0"},
- { "trigger": "should.be.below", "contents": "should.be.below(${1:value});$0"},
- { "trigger": "should.be.at.most", "contents": "should.be.at.most(${1:value});$0"},
- { "trigger": "should.have.length.of.at.most", "contents": "should.have.length.of.at.most(${1:value});$0"},
- { "trigger": "should.be.within", "contents": "should.be.within(${1:start}, ${2:finish});$0"},
- { "trigger": "should.have.length.within", "contents": "should.have.length.within(${1:start}, ${2:finish});$0"},
- { "trigger": "should.have.property", "contents": "should.have.property(\"${1:value}\");$0"},
- { "trigger": "should.have.deep.property", "contents": "should.have.deep.property(\"${1:value}\");$0"},
- { "trigger": "should.have.ownProperty", "contents": "should.have.ownProperty(\"${1:value}\");$0"},
- { "trigger": "should.have.length", "contents": "should.have.length(${1:value});$0"},
- { "trigger": "should.have.length.above", "contents": "should.have.length.above(${1:value});$0"},
- { "trigger": "should.have.length.below", "contents": "should.have.length.below(${1:value});$0"},
- { "trigger": "should.have.length.within", "contents": "should.have.length.within(${1:start}, ${2:finish});$0"},
- { "trigger": "should.match", "contents": "should.match(/${1:regex}/);$0"},
- { "trigger": "should.have.string", "contents": "should.have.string(\"${1:string}\");$0"},
- { "trigger": "should.have.keys", "contents": "should.have.keys(\"${1:string}\");$0"},
- { "trigger": "should.throw", "contents": "should.throw(${1:error});$0"},
- { "trigger": "should.not.throw", "contents": "should.not.throw(${1:error});$0"},
- { "trigger": "should.respondTo", "contents": "should.respondTo(${1:string});$0"},
- { "trigger": "should.satisfy", "contents": "should.satisfy(${1:function});$0"},
- { "trigger": "should.be.closeTo", "contents": "should.be.closeTo(${1:expected}, ${2:delta});$0"}
- ]
-}
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Chai Completions/package-metadata.json b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Chai Completions/package-metadata.json
deleted file mode 100644
index 77fd6b1..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Chai Completions/package-metadata.json
+++ /dev/null
@@ -1 +0,0 @@
-{"url": "https://github.com/pensive612/sublime-chai-full-completions", "version": "2013.02.01.13.38.42", "description": "Full completions for Chai Library: should, expect and assert syntax. Works with Javascript and CoffeeScript."}
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/CoffeeComplete Plus (Autocompletion)/.gitignore b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/CoffeeComplete Plus (Autocompletion)/.gitignore
deleted file mode 100644
index 0d20b64..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/CoffeeComplete Plus (Autocompletion)/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-*.pyc
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/CoffeeComplete Plus (Autocompletion)/CoffeeAutocomplete.py b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/CoffeeComplete Plus (Autocompletion)/CoffeeAutocomplete.py
deleted file mode 100644
index 7b5ae97..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/CoffeeComplete Plus (Autocompletion)/CoffeeAutocomplete.py
+++ /dev/null
@@ -1,236 +0,0 @@
-import sublime, sublime_plugin
-import re
-import os
-import threading
-import coffee_utils
-from coffee_utils import debug
-from copy import copy
-
-COFFEESCRIPT_AUTOCOMPLETE_STATUS_KEY = "coffee_autocomplete"
-COFFEESCRIPT_AUTOCOMPLETE_STATUS_MESSAGE = "Coffee: Autocompleting \"%s\"..."
-
-final_completions = []
-status = {"working": False}
-
-# TODO:
-# - Type hinting using comments containing square brackets [Type] on same line or previous line
-# - Codo docs searching for function parameter types
-# - Better symbol parsing. Assignment lookups should consider the entire set of operands.
-# X Consider all super classes (support extends)
-# - Consider another feature: Override/implement methods
-# - Full assignment traceback (that = this, a = b = c, knows what c is)
-# - Check contents of currently open views
-# - Built in types
-
-class CoffeeAutocomplete(sublime_plugin.EventListener):
-
- def on_query_completions(self, view, prefix, locations):
-
- completions = copy(final_completions)
- working = status["working"]
-
- # If there is a word selection and we're looking at a coffee file...
- if not completions and coffee_utils.is_coffee_syntax(view) and not working:
-
- status["working"] = True
-
- current_location = locations[0]
-
- # Get the window
- self.window = sublime.active_window()
-
- # http://www.sublimetext.com/forum/viewtopic.php?f=6&t=9076
- settings = sublime.load_settings(coffee_utils.SETTINGS_FILE_NAME)
-
- built_in_types_settings = sublime.load_settings(coffee_utils.BUILT_IN_TYPES_SETTINGS_FILE_NAME)
- built_in_types = built_in_types_settings.get(coffee_utils.BUILT_IN_TYPES_SETTINGS_KEY)
- if not built_in_types:
- built_in_types = []
-
- custom_types_settings = sublime.load_settings(coffee_utils.CUSTOM_TYPES_SETTINGS_FILE_NAME)
- custom_types = custom_types_settings.get(coffee_utils.CUSTOM_TYPES_SETTINGS_KEY)
- if not custom_types:
- custom_types = []
-
- built_in_types.extend(custom_types)
-
- # Pull the excluded dirs from preferences
- excluded_dirs = settings.get(coffee_utils.PREFERENCES_COFFEE_EXCLUDED_DIRS)
- if not excluded_dirs:
- excluded_dirs = []
-
- restricted_to_dirs = settings.get(coffee_utils.PREFERENCES_COFFEE_RESTRICTED_TO_PATHS)
- if not restricted_to_dirs:
- restricted_to_dirs = []
-
- # List of all project folders
- project_folder_list = self.window.folders()
-
- if restricted_to_dirs:
- specific_project_folders = []
- for next_restricted_dir in restricted_to_dirs:
- for next_project_folder in project_folder_list:
- next_specific_folder = os.path.normpath(os.path.join(next_project_folder, next_restricted_dir))
- specific_project_folders.append(next_specific_folder)
- project_folder_list = specific_project_folders
-
- function_return_types = settings.get(coffee_utils.FUNCTION_RETURN_TYPES_SETTINGS_KEY)
- if not function_return_types:
- function_return_types = []
-
- this_aliases = settings.get(coffee_utils.PREFERENCES_THIS_ALIASES)
- if not this_aliases:
- this_aliases = []
-
- member_exclusion_regexes = settings.get(coffee_utils.PREFERENCES_MEMBER_EXCLUSION_REGEXES)
- if not member_exclusion_regexes:
- member_exclusion_regexes = []
-
- # Lines for the current file in view
- current_file_lines = coffee_utils.get_view_content_lines(view)
-
- # TODO: Smarter previous word selection
- preceding_symbol = coffee_utils.get_preceding_symbol(view, prefix, locations)
- immediately_preceding_symbol = coffee_utils.get_preceding_symbol(view, "", locations)
-
- preceding_function_call = coffee_utils.get_preceding_function_call(view).strip()
-
- # Determine preceding token, if any (if a period was typed).
- token = coffee_utils.get_preceding_token(view).strip()
-
- # TODO: Smarter region location
- symbol_region = sublime.Region(locations[0] - len(prefix), locations[0] - len(prefix))
-
- if (preceding_function_call or token or coffee_utils.THIS_SUGAR_SYMBOL == preceding_symbol) and coffee_utils.is_autocomplete_trigger(immediately_preceding_symbol):
- self.window.active_view().run_command('hide_auto_complete')
-
- thread = CoffeeAutocompleteThread(project_folder_list, excluded_dirs, this_aliases, current_file_lines, preceding_symbol, prefix, preceding_function_call, function_return_types, token, symbol_region, built_in_types, member_exclusion_regexes)
- thread.start()
- self.check_operation(thread, final_completions, current_location, token, status)
- else:
- status["working"] = False
-
- elif completions:
- self.clear_completions(final_completions)
-
- return completions
-
- def check_operation(self, thread, final_completions, current_location, token, status, previous_progress_indicator_tuple=None):
-
- if not thread.is_alive():
- if thread.completions:
- final_completions.extend(thread.completions)
- # Hide the default auto-complete and show ours
- self.window.active_view().run_command('hide_auto_complete')
- sublime.set_timeout(lambda: self.window.active_view().run_command('auto_complete'), 1)
-
- self.window.active_view().erase_status(COFFEESCRIPT_AUTOCOMPLETE_STATUS_KEY)
- status["working"] = False
- else:
- token = thread.token
- # Create the command's goto definition text, including the selected word. For the status bar.
- status_text = COFFEESCRIPT_AUTOCOMPLETE_STATUS_MESSAGE % token
- # Get a tuple containing the progress text, progress position, and progress direction.
- # This is used to animate a progress indicator in the status bar.
- current_progress_indicator_tuple = coffee_utils.get_progress_indicator_tuple(previous_progress_indicator_tuple)
- # Get the progress text
- progress_indicator_status_text = current_progress_indicator_tuple[0]
- # Set the status bar text so the user knows what's going on
- self.window.active_view().set_status(COFFEESCRIPT_AUTOCOMPLETE_STATUS_KEY, status_text + " " + progress_indicator_status_text)
- # Check again momentarily to see if the operation has completed.
- sublime.set_timeout(lambda: self.check_operation(thread, final_completions, current_location, token, status, current_progress_indicator_tuple), 100)
-
- def clear_completions(self, final_completions):
- debug("Clearing completions...")
- while len(final_completions) > 0:
- final_completions.pop()
-
-class CoffeeAutocompleteThread(threading.Thread):
-
- def __init__(self, project_folder_list, excluded_dirs, this_aliases, current_file_lines, preceding_symbol, prefix, preceding_function_call, function_return_types, token, symbol_region, built_in_types, member_exclusion_regexes):
-
- self.project_folder_list = project_folder_list
- self.excluded_dirs = excluded_dirs
- self.this_aliases = this_aliases
- self.current_file_lines = current_file_lines
- self.preceding_symbol = preceding_symbol
- self.prefix = prefix
- self.preceding_function_call = preceding_function_call
- self.function_return_types = function_return_types
- self.token = token
- self.symbol_region = symbol_region
- self.built_in_types = built_in_types
- self.member_exclusion_regexes = member_exclusion_regexes
-
- # None if no completions found, or an array of the completion tuples
- self.completions = None
- threading.Thread.__init__(self)
-
- def run(self):
-
- project_folder_list = self.project_folder_list
- excluded_dirs = self.excluded_dirs
- this_aliases = self.this_aliases
- current_file_lines = self.current_file_lines
- preceding_symbol = self.preceding_symbol
- prefix = self.prefix
- preceding_function_call = self.preceding_function_call
- function_return_types = self.function_return_types
- token = self.token
- symbol_region = self.symbol_region
- built_in_types = self.built_in_types
- member_exclusion_regexes = self.member_exclusion_regexes
-
- selected_word = token[token.rfind(".") + 1:]
-
- completions = []
-
- # First see if it is a special function return definition, like $ for $("#selector")
- if preceding_function_call:
- for next_return_type in function_return_types:
- function_names = next_return_type[coffee_utils.FUNCTION_RETURN_TYPE_FUNCTION_NAMES_KEY]
- if preceding_function_call in function_names:
- return_type = next_return_type[coffee_utils.FUNCTION_RETURN_TYPE_TYPE_NAME_KEY]
- completions = coffee_utils.get_completions_for_class(return_type, False, None, prefix, None, built_in_types, member_exclusion_regexes, False)
-
- if not completions:
- # Prepare to search globally if we need to...
- # Coffeescript filename regex
- coffeescript_filename_regex = coffee_utils.COFFEE_FILENAME_REGEX
- # All coffeescript file paths
- all_coffee_file_paths = coffee_utils.get_files_in(project_folder_list, coffeescript_filename_regex, excluded_dirs)
-
- # If @ typed, process as "this."
- if preceding_symbol == coffee_utils.THIS_SUGAR_SYMBOL:
- # Process as "this."
- this_type = coffee_utils.get_this_type(current_file_lines, symbol_region)
- if this_type:
- completions = coffee_utils.get_completions_for_class(this_type, False, current_file_lines, prefix, all_coffee_file_paths, built_in_types, member_exclusion_regexes, True)
- pass
- elif preceding_symbol == coffee_utils.PERIOD_OPERATOR:
- # If "this" or a substitute for it, process as "this."
- if selected_word == coffee_utils.THIS_KEYWORD or selected_word in this_aliases:
- # Process as "this."
- this_type = coffee_utils.get_this_type(current_file_lines, symbol_region)
- if this_type:
- completions = coffee_utils.get_completions_for_class(this_type, False, current_file_lines, prefix, all_coffee_file_paths, built_in_types, member_exclusion_regexes, True)
- else:
- # If TitleCase, assume a class, and that we want static properties and functions.
- if coffee_utils.is_capitalized(selected_word):
- # Assume it is either in the current view or in a coffee file somewhere
- completions = coffee_utils.get_completions_for_class(selected_word, True, current_file_lines, prefix, all_coffee_file_paths, built_in_types, member_exclusion_regexes, False)
- if not completions:
- # Now we search globally...
- completions = coffee_utils.get_completions_for_class(selected_word, True, None, prefix, all_coffee_file_paths, built_in_types, member_exclusion_regexes, False)
-
- # If nothing yet, assume a variable.
- if not completions:
- variable_type = coffee_utils.get_variable_type(current_file_lines, token, symbol_region, all_coffee_file_paths, built_in_types, [])
- if variable_type:
- # Assume it is either in the current view or in a coffee file somewhere
- completions = coffee_utils.get_completions_for_class(variable_type, False, current_file_lines, prefix, all_coffee_file_paths, built_in_types, member_exclusion_regexes, False)
- if not completions:
- # Now we search globally for a class... Maybe they're making a static call on something lowercase? Bad design, but check anyways.
- completions = coffee_utils.get_completions_for_class(selected_word, True, None, prefix, all_coffee_file_paths, built_in_types, member_exclusion_regexes, False)
- if completions:
- self.completions = completions
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/CoffeeComplete Plus (Autocompletion)/CoffeeComplete Plus Built-In Types.sublime-settings b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/CoffeeComplete Plus (Autocompletion)/CoffeeComplete Plus Built-In Types.sublime-settings
deleted file mode 100644
index 8e5e73f..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/CoffeeComplete Plus (Autocompletion)/CoffeeComplete Plus Built-In Types.sublime-settings
+++ /dev/null
@@ -1,337 +0,0 @@
-{
- "coffee_autocomplete_plus_built_in_types":
- [
- {
- "name": "Array",
- "enabled": true,
- "constructors": [],
- "static_properties": [],
- "static_methods":
- [
- {"name":"isArray", "args": [{"name": "obj"}]}
- ],
- "instance_properties":
- [
- {"name": "length"}
- ],
- "instance_methods":
- [
- {"name":"concat", "args": [{"name": "vals…"}]},
- {"name":"every", "args": [{"name": "cb()", "insertion": "(val, index, arr) ->"}]},
- {"name":"every", "args": [{"name": "cb()", "insertion": "(val, index, arr) ->"}, {"name": "thisArg"}]},
- {"name":"filter", "args": [{"name": "cb()", "insertion": "(val, index, arr) ->"}]},
- {"name":"filter", "args": [{"name": "cb()", "insertion": "(val, index, arr) ->"}, {"name": "thisArg"}]},
- {"name":"forEach", "args": [{"name": "cb()", "insertion": "(val, index, arr) ->"}]},
- {"name":"forEach", "args": [{"name": "cb()", "insertion": "(val, index, arr) ->"}, {"name": "thisArg"}]},
- {"name":"indexOf", "args": [{"name": "val"}]},
- {"name":"indexOf", "args": [{"name": "val"}, {"name": "start"}]},
- {"name":"join", "args": []},
- {"name":"join", "args": [{"name": "separator"}]},
- {"name":"lastIndexOf", "args": [{"name": "val"}]},
- {"name":"lastIndexOf", "args": [{"name": "val"}, {"name": "start"}]},
- {"name":"map", "args": [{"name": "cb()", "insertion": "(val, index, arr) ->"}]},
- {"name":"map", "args": [{"name": "cb()", "insertion": "(val, index, arr) ->"}, {"name": "thisArg"}]},
- {"name":"pop", "args": []},
- {"name":"push", "args": [{"name": "vals…"}]},
- {"name":"reduce", "args": [{"name": "cb()", "insertion": "(prevVal, curVal, index, arr) ->"}]},
- {"name":"reduce", "args": [{"name": "cb()", "insertion": "(prevVal, curVal, index, arr) ->"}, {"name": "initVal"}]},
- {"name":"reduceRight", "args": [{"name": "cb()", "insertion": "(prevVal, curVal, index, arr) ->"}]},
- {"name":"reduceRight", "args": [{"name": "cb()", "insertion": "(prevVal, curVal, index, arr) ->"}, {"name": "initVal"}]},
- {"name":"reverse", "args": []},
- {"name":"shift", "args": []},
- {"name":"slice", "args": [{"name": "start"}]},
- {"name":"slice", "args": [{"name": "start"}, {"name": "end"}]},
- {"name":"some", "args": [{"name": "cb()", "insertion": "(val, index, arr) ->"}]},
- {"name":"some", "args": [{"name": "cb()", "insertion": "(val, index, arr) ->"}, {"name": "thisArg"}]},
- {"name":"sort", "args": []},
- {"name":"sort", "args": [{"name": "compare()", "insertion": "(a, b) ->"}]},
- {"name":"splice", "args": [{"name": "start"}, {"name": "del"}]},
- {"name":"splice", "args": [{"name": "start"}, {"name": "del"}, {"name": "vals…"}]},
- {"name":"unshift", "args": [{"name": "vals…"}]}
- ]
- },
- {
- "name": "Boolean",
- "enabled": true,
- "constructors": [],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [],
- "instance_methods": []
- },
- {
- "name": "Date",
- "enabled": true,
- "constructors": [],
- "static_properties": [],
- "static_methods":
- [
- {"name":"now", "args": []},
- {"name":"parse", "args": [{"name": "dateStr"}]},
- {"name":"UTC", "args": [{"name": "year"}, {"name": "month"}]},
- {"name":"UTC", "args": [{"name": "year"}, {"name": "month"}, {"name": "day"}]},
- {"name":"UTC", "args": [{"name": "year"}, {"name": "month"}, {"name": "day"}, {"name": "hrs"}]},
- {"name":"UTC", "args": [{"name": "year"}, {"name": "month"}, {"name": "day"}, {"name": "hrs"}, {"name": "min"}]},
- {"name":"UTC", "args": [{"name": "year"}, {"name": "month"}, {"name": "day"}, {"name": "hrs"}, {"name": "min"}, {"name": "sec"}]},
- {"name":"UTC", "args": [{"name": "year"}, {"name": "month"}, {"name": "day"}, {"name": "hrs"}, {"name": "min"}, {"name": "sec"}, {"name": "ms"}]}
- ],
- "instance_properties": [],
- "instance_methods":
- [
- {"name":"getDate", "args": []},
- {"name":"getDay", "args": []},
- {"name":"getFullYear", "args": []},
- {"name":"getHours", "args": []},
- {"name":"getMilliseconds", "args": []},
- {"name":"getMinutes", "args": []},
- {"name":"getMonth", "args": []},
- {"name":"getSeconds", "args": []},
- {"name":"getTime", "args": []},
- {"name":"getTimezoneOffset", "args": []},
- {"name":"getUTCDate", "args": []},
- {"name":"getUTCDay", "args": []},
- {"name":"getUTCFullYear", "args": []},
- {"name":"getUTCHours", "args": []},
- {"name":"getUTCMilliseconds", "args": []},
- {"name":"getUTCMinutes", "args": []},
- {"name":"getUTCMonth", "args": []},
- {"name":"getUTCSeconds", "args": []},
- {"name":"setDate", "args": [{"name": "day"}]},
- {"name":"setFullYear", "args": [{"name": "year"}]},
- {"name":"setFullYear", "args": [{"name": "year"}, {"name": "month"}]},
- {"name":"setFullYear", "args": [{"name": "year"}, {"name": "month"}, {"name": "day"}]},
- {"name":"setHours", "args": [{"name": "hrs"}]},
- {"name":"setHours", "args": [{"name": "hrs"}, {"name": "min"}]},
- {"name":"setHours", "args": [{"name": "hrs"}, {"name": "min"}, {"name": "sec"}]},
- {"name":"setHours", "args": [{"name": "hrs"}, {"name": "min"}, {"name": "sec"}, {"name": "ms"}]},
- {"name":"setMilliseconds", "args": [{"name": "ms"}]},
- {"name":"setMinutes", "args": [{"name": "min"}]},
- {"name":"setMinutes", "args": [{"name": "min"}, {"name": "sec"}]},
- {"name":"setMinutes", "args": [{"name": "min"}, {"name": "sec"}, {"name": "ms"}]},
- {"name":"setMonth", "args": [{"name": "month"}]},
- {"name":"setMonth", "args": [{"name": "month"}, {"name": "day"}]},
- {"name":"setSeconds", "args": [{"name": "sec"}]},
- {"name":"setSeconds", "args": [{"name": "sec"}, {"name": "ms"}]},
- {"name":"setTime", "args": [{"name": "timeVal"}]},
- {"name":"setUTCDate", "args": [{"name": "day"}]},
- {"name":"setUTCFullYear", "args": [{"name": "year"}]},
- {"name":"setUTCFullYear", "args": [{"name": "year"}, {"name": "month"}]},
- {"name":"setUTCFullYear", "args": [{"name": "year"}, {"name": "month"}, {"name": "day"}]},
- {"name":"setUTCHours", "args": [{"name": "hrs"}]},
- {"name":"setUTCHours", "args": [{"name": "hrs"}, {"name": "min"}]},
- {"name":"setUTCHours", "args": [{"name": "hrs"}, {"name": "min"}, {"name": "sec"}]},
- {"name":"setUTCHours", "args": [{"name": "hrs"}, {"name": "min"}, {"name": "sec"}, {"name": "ms"}]},
- {"name":"setUTCMilliseconds", "args": [{"name": "ms"}]},
- {"name":"setUTCMinutes", "args": [{"name": "min"}]},
- {"name":"setUTCMinutes", "args": [{"name": "min"}, {"name": "sec"}]},
- {"name":"setUTCMinutes", "args": [{"name": "min"}, {"name": "sec"}, {"name": "ms"}]},
- {"name":"setUTCMonth", "args": [{"name": "month"}]},
- {"name":"setUTCMonth", "args": [{"name": "month"}, {"name": "day"}]},
- {"name":"setUTCSeconds", "args": [{"name": "sec"}]},
- {"name":"setUTCSeconds", "args": [{"name": "sec"}, {"name": "ms"}]},
- {"name":"toDateString", "args": []},
- {"name":"toISOString", "args": []},
- {"name":"toJSON", "args": []},
- {"name":"toLocaleDateString", "args": []},
- {"name":"toLocaleString", "args": []},
- {"name":"toLocaleTimeString", "args": []},
- {"name":"toTimeString", "args": []},
- {"name":"toUTCString", "args": []}
- ]
- },
- {
- "name": "Function",
- "enabled": true,
- "constructors": [],
- "static_properties": [],
- "static_methods": [],
- "instance_properties":
- [
- {"name": "length"},
- {"name": "prototype"}
- ],
- "instance_methods":
- [
- {"name":"apply", "args": [{"name": "thisArg"}]},
- {"name":"apply", "args": [{"name": "thisArg"}, {"name": "args…"}]},
- {"name":"bind", "args": [{"name": "obj"}]},
- {"name":"bind", "args": [{"name": "obj"}, {"name": "args…"}]},
- {"name":"call", "args": [{"name": "thisArg"}]},
- {"name":"call", "args": [{"name": "thisArg"}, {"name": "args…"}]}
- ]
- },
- {
- "name": "Number",
- "enabled": true,
- "constructors": [],
- "static_properties":
- [
- {"name": "MAX_VALUE"},
- {"name": "MIN_VALUE"},
- {"name": "NaN"},
- {"name": "NEGATIVE_INFINITY"},
- {"name": "POSITIVE_INFINITY"}
- ],
- "static_methods": [],
- "instance_properties": [],
- "instance_methods":
- [
- {"name":"toExponential", "args": []},
- {"name":"toExponential", "args": [{"name": "digits"}]},
- {"name":"toFixed", "args": []},
- {"name":"toFixed", "args": [{"name": "digits"}]},
- {"name":"toPrecision", "args": []},
- {"name":"toPrecision", "args": [{"name": "precision"}]},
- {"name":"toString", "args": []},
- {"name":"toString", "args": [{"name": "radix"}]}
- ]
- },
- {
- "name": "Object",
- "enabled": true,
- "constructors": [],
- "static_properties": [],
- "static_methods":
- [
- {"name":"create", "args": [{"name": "proto"}]},
- {"name":"create", "args": [{"name": "proto"}, {"name": "propsObj"}]},
- {"name":"defineProperties", "args": [{"name": "obj"}, {"name": "descs"}]},
- {"name":"defineProperty", "args": [{"name": "obj"}, {"name": "prop"}, {"name": "desc"}]},
- {"name":"freeze", "args": [{"name": "obj"}]},
- {"name":"getOwnPropertyDescriptor", "args": [{"name": "obj"}, {"name": "prop"}]},
- {"name":"getOwnPropertyNames", "args": [{"name": "obj"}]},
- {"name":"getPrototypeOf", "args": [{"name": "obj"}]},
- {"name":"isExtensible", "args": [{"name": "obj"}]},
- {"name":"isFrozen", "args": [{"name": "obj"}]},
- {"name":"isSealed", "args": [{"name": "obj"}]},
- {"name":"keys", "args": [{"name": "obj"}]},
- {"name":"preventExtensions", "args": [{"name": "obj"}]},
- {"name":"seal", "args": [{"name": "obj"}]}
- ],
- "instance_properties": [{"name": "constructor"}],
- "instance_methods":
- [
- {"name":"hasOwnProperty", "args": [{"name": "prop"}]},
- {"name":"isPrototypeOf", "args": [{"name": "obj"}]},
- {"name":"propertyIsEnumerable", "args": [{"name": "prop"}]},
- {"name":"toLocaleString", "args": []},
- {"name":"toString", "args": []},
- {"name":"valueOf", "args": []}
- ]
- },
- {
- "name": "RegExp",
- "enabled": true,
- "constructors": [],
- "static_properties": [],
- "static_methods": [],
- "instance_properties": [
- {"name": "global"},
- {"name": "ignoreCase"},
- {"name": "lastIndex"},
- {"name": "multiline"},
- {"name": "source"}
- ],
- "instance_methods": [
- {"name":"exec", "args": [{"name": "str"}]},
- {"name":"test", "args": [{"name": "str"}]}
- ]
- },
- {
- "name": "String",
- "enabled": true,
- "constructors": [],
- "static_properties": [],
- "static_methods":
- [
- {"name":"fromCharCode", "args": [{"name": "codes…"}]}
- ],
- "instance_properties": [{"name": "length"}],
- "instance_methods":
- [
- {"name":"charAt", "args": [{"name": "index"}]},
- {"name":"charCodeAt", "args": [{"name": "index"}]},
- {"name":"concat", "args": [{"name": "strs…"}]},
- {"name":"indexOf", "args": [{"name": "substr"}]},
- {"name":"indexOf", "args": [{"name": "substr"}, {"name": "start"}]},
- {"name":"lastIndexOf", "args": [{"name": "substr"}]},
- {"name":"lastIndexOf", "args": [{"name": "substr"}, {"name": "start"}]},
- {"name":"localeCompare", "args": [{"name": "target"}]},
- {"name":"match", "args": [{"name": "regexp"}]},
- {"name":"replace", "args": [{"name": "substr"}, {"name": "repl"}]},
- {"name":"replace", "args": [{"name": "substr"}, {"name": "repl()", "insertion": "(match, submatches…, pos, str) ->"}]},
- {"name":"replace", "args": [{"name": "regexp"}, {"name": "repl"}]},
- {"name":"replace", "args": [{"name": "regexp"}, {"name": "repl()", "insertion": "(match, submatches…, pos, str) ->"}]},
- {"name":"search", "args": [{"name": "regexp"}]},
- {"name":"slice", "args": [{"name": "start"}]},
- {"name":"slice", "args": [{"name": "start"}, {"name": "end"}]},
- {"name":"split", "args": []},
- {"name":"split", "args": [{"name": "separator"}]},
- {"name":"split", "args": [{"name": "separator"}, {"name": "limit"}]},
- {"name":"substring", "args": [{"name": "from"}]},
- {"name":"substring", "args": [{"name": "from"}, {"name": "to"}]},
- {"name":"toLocaleLowerCase", "args": []},
- {"name":"toLocaleUpperCase", "args": []},
- {"name":"toLowerCase", "args": []},
- {"name":"toUpperCase", "args": []},
- {"name":"trim", "args": []}
- ]
- },
- {
- "name": "JSON",
- "enabled": true,
- "constructors": [],
- "static_properties": [],
- "static_methods":
- [
- {"name":"parse", "args": [{"name": "str"}]},
- {"name":"parse", "args": [{"name": "str"}, {"name": "reviver()", "insertion": "(prop, val) ->"}]},
- {"name":"stringify", "args": [{"name": "val"}]},
- {"name":"stringify", "args": [{"name": "val"}, {"name": "filterArr"}]},
- {"name":"stringify", "args": [{"name": "val"}, {"name": "filterArr"}, {"name": "indent"}]},
- {"name":"stringify", "args": [{"name": "val"}, {"name": "filter()", "insertion": "(prop, val) ->"}]},
- {"name":"stringify", "args": [{"name": "val"}, {"name": "filter()", "insertion": "(prop, val) ->"}, {"name": "indent"}]}
- ],
- "instance_properties": [],
- "instance_methods": []
- },
- {
- "name": "Math",
- "enabled": true,
- "constructors": [],
- "static_properties": [
- {"name": "E"},
- {"name": "LN10"},
- {"name": "LN2"},
- {"name": "LOG10E"},
- {"name": "LOG2E"},
- {"name": "PI"},
- {"name": "SQRT1_2"},
- {"name": "SQRT2"}
- ],
- "static_methods":
- [
- {"name":"abs", "args": [{"name": "x"}]},
- {"name":"acos", "args": [{"name": "x"}]},
- {"name":"asin", "args": [{"name": "x"}]},
- {"name":"atan", "args": [{"name": "x"}]},
- {"name":"atan2", "args": [{"name": "y"}, {"name": "x"}]},
- {"name":"ceil", "args": [{"name": "x"}]},
- {"name":"cos", "args": [{"name": "x"}]},
- {"name":"exp", "args": [{"name": "x"}]},
- {"name":"floor", "args": [{"name": "x"}]},
- {"name":"log", "args": [{"name": "x"}]},
- {"name":"max", "args": [{"name": "vals…"}]},
- {"name":"min", "args": [{"name": "vals…"}]},
- {"name":"pow", "args": [{"name": "x"}, {"name": "y"}]},
- {"name":"random", "args": []},
- {"name":"round", "args": [{"name": "x"}]},
- {"name":"sin", "args": [{"name": "x"}]},
- {"name":"sqrt", "args": [{"name": "x"}]},
- {"name":"tan", "args": [{"name": "x"}]}
- ],
- "instance_properties": [],
- "instance_methods": []
- }
- ]
-}
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/CoffeeComplete Plus (Autocompletion)/CoffeeComplete Plus Custom Types.sublime-settings b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/CoffeeComplete Plus (Autocompletion)/CoffeeComplete Plus Custom Types.sublime-settings
deleted file mode 100644
index d748ea9..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/CoffeeComplete Plus (Autocompletion)/CoffeeComplete Plus Custom Types.sublime-settings
+++ /dev/null
@@ -1,428 +0,0 @@
-{
- "coffee_autocomplete_plus_custom_types":
- [
- // {
- // "name": "MyType",
- // "constructors": [{"args": []}],
- // "static_properties": [{"name": "CONSTANT_ONE"}, {"name": "CONSTANT_TWO"}],
- // "static_methods":
- // [
- // {"name":"myStaticMethod", "args": [{"name": "arg1"}, {"name": "arg2"}]},
- // {"name":"myStaticMethodTwo", "args": []}
- // ],
- // "instance_properties": [{"name": "thingOne"}, {"name": "thingTwo"}, {"name": "thingThree"}],
- // "instance_methods":
- // [
- // {"name":"doStuff", "args": [{"name": "numTimes"}]},
- // {"name":"doMoreStuff", "args": [{"name": "numTimes"}, {"name": "extraAmount"}]}
- // ]
- // },
- {
- "name": "$",
- "enabled": true,
- "constructors": [{"args": []}],
- "static_properties":
- [
- {"name":"boxModel"},
- {"name":"browser"},
- {"name":"cssHooks"},
- {"name":"fx.interval"},
- {"name":"fx.off"},
- {"name":"support"}
- ],
- "static_methods":
- [
- {"name":"ajax", "args": [{"name": "url"}]},
- {"name":"ajax", "args": [{"name": "url"}, {"name": "settings"}]},
- {"name":"ajax", "args": []},
- {"name":"ajax", "args": [{"name": "settings"}]},
- {"name":"ajaxPrefilter", "args": [{"name": "handler(options, originalOptions, jqXHR)"}]},
- {"name":"ajaxPrefilter", "args": [{"name": "dataTypes"}, {"name": "handler(options, originalOptions, jqXHR)"}]},
- {"name":"ajaxSetup", "args": [{"name": "options"}]},
- {"name":"ajaxTransport", "args": [{"name": "handler(options, originalOptions, jqXHR)"}]},
- {"name":"ajaxTransport", "args": [{"name": "dataType"}, {"name": "handler(options, originalOptions, jqXHR)"}]},
- {"name":"Callbacks", "args": [{"name": "flags"}]},
- {"name":"contains", "args": [{"name": "container"}, {"name": "contained"}]},
- {"name":"data", "args": [{"name": "element"}]},
- {"name":"data", "args": [{"name": "element"}, {"name": "key"}]},
- {"name":"data", "args": [{"name": "element"}, {"name": "key"}, {"name": "value"}]},
- {"name":"Deferred", "args": []},
- {"name":"Deferred", "args": [{"name": "[beforeStart]"}]},
- {"name":"dequeue", "args": [{"name": "element"}]},
- {"name":"dequeue", "args": [{"name": "element"}, {"name": "queueName"}]},
- {"name":"each", "args": [{"name": "collection"}]},
- {"name":"each", "args": [{"name": "collection"}, {"name": "callback(indexInArray, valueOfElement)"}]},
- {"name":"error", "args": [{"name": "message"}]},
- {"name":"extend", "args": [{"name": "target"}, {"name": "object1"}]},
- {"name":"extend", "args": [{"name": "target"}, {"name": "object1"}, {"name": "obj2 .. objN"}]},
- {"name":"extend", "args": [{"name": "deep"}, {"name": "target"}, {"name": "obj1 .. objN"}]},
- {"name":"get", "args": [{"name": "url"}]},
- {"name":"get", "args": [{"name": "url"}, {"name": "data"}]},
- {"name":"get", "args": [{"name": "url"}, {"name": "data"}, {"name": "success(data, textStatus, jqXHR)"}]},
- {"name":"get", "args": [{"name": "url"}, {"name": "data"}, {"name": "success(data, textStatus, jqXHR)"}, {"name": "dataType"}]},
- {"name":"getJSON", "args": [{"name": "url"}]},
- {"name":"getJSON", "args": [{"name": "url"}, {"name": "data"}]},
- {"name":"getJSON", "args": [{"name": "url"}, {"name": "data"}, {"name": "success(data, textStatus, jqXHR)"}]},
- {"name":"getScript", "args": [{"name": "url"}]},
- {"name":"getScript", "args": [{"name": "url"}, {"name": "success(script, textStatus, jqXHR)"}]},
- {"name":"globalEval", "args": [{"name": "code"}]},
- {"name":"grep", "args": [{"name": "array"}, {"name": "function(elementOfArray, indexInArray)"}]},
- {"name":"grep", "args": [{"name": "array"}, {"name": "function(elementOfArray, indexInArray)"}, {"name": "invert"}]},
- {"name":"hasData", "args": [{"name": "element"}]},
- {"name":"holdReady", "args": [{"name": "hold"}]},
- {"name":"inArray", "args": [{"name": "valueE"}, {"name": "array"}]},
- {"name":"inArray", "args": [{"name": "valueE"}, {"name": "array"}, {"name": "fromIndex"}]},
- {"name":"isArray", "args": [{"name": "obj"}]},
- {"name":"isEmptyObject", "args": [{"name": "object"}]},
- {"name":"isFunction", "args": [{"name": "obj"}]},
- {"name":"isNumeric", "args": [{"name": "value"}]},
- {"name":"isPlainObject", "args": [{"name": "object"}]},
- {"name":"isWindow", "args": [{"name": "obj"}]},
- {"name":"isXMLDoc", "args": [{"name": "node"}]},
- {"name":"makeArray", "args": [{"name": "obj"}]},
- {"name":"map", "args": [{"name": "array"}, {"name": "callback(elementOfArray, indexInArray)"}]},
- {"name":"map", "args": [{"name": "arrayOrObject"}, {"name": "callback(value, indexOrKey)"}]},
- {"name":"merge", "args": [{"name": "first"}, {"name": "second"}]},
- {"name":"noConflict", "args": []},
- {"name":"noConflict", "args": [{"name": "removeAll"}]},
- {"name":"noop", "args": []},
- {"name":"now", "args": []},
- {"name":"param", "args": [{"name": "obj"}]},
- {"name":"param", "args": [{"name": "obj"}, {"name": "traditional"}]},
- {"name":"parseHTML", "args": [{"name": "data"}]},
- {"name":"parseHTML", "args": [{"name": "data"}, {"name": "context"}]},
- {"name":"parseHTML", "args": [{"name": "data"}, {"name": "context"}, {"name": "keepScripts"}]},
- {"name":"parseJSON", "args": [{"name": "json"}]},
- {"name":"parseXML", "args": [{"name": "data"}]},
- {"name":"post", "args": [{"name": "url"}]},
- {"name":"post", "args": [{"name": "url"}, {"name": "data"}]},
- {"name":"post", "args": [{"name": "url"}, {"name": "data"}, {"name": "success(data, textStatus, jqXHR)"}]},
- {"name":"post", "args": [{"name": "url"}, {"name": "data"}, {"name": "success(data, textStatus, jqXHR)"}, {"name": "dataType"}]},
- {"name":"proxy", "args": [{"name": "function"}, {"name": "context"}]},
- {"name":"proxy", "args": [{"name": "context"}, {"name": "name"}]},
- {"name":"proxy", "args": [{"name": "function"}, {"name": "context"}]},
- {"name":"proxy", "args": [{"name": "function"}, {"name": "context"}, {"name": "additionalArguments"}]},
- {"name":"proxy", "args": [{"name": "context"}, {"name": "name"}]},
- {"name":"proxy", "args": [{"name": "context"}, {"name": "name"}, {"name": "additionalArguments"}]},
- {"name":"queue", "args": [{"name": "element"}]},
- {"name":"queue", "args": [{"name": "element"}, {"name": "queueName"}]},
- {"name":"queue", "args": [{"name": "element"}, {"name": "queueName"}, {"name": "newQueue"}]},
- {"name":"queue", "args": [{"name": "element"}, {"name": "queueName"}, {"name": "callback()"}]},
- {"name":"removeData", "args": [{"name": "element"}]},
- {"name":"removeData", "args": [{"name": "element"}, {"name": "name"}]},
- {"name":"sub", "args": []},
- {"name":"trim", "args": [{"name": "str"}]},
- {"name":"type", "args": [{"name": "obj"}]},
- {"name":"unique", "args": [{"name": "array"}]},
- {"name":"when", "args": [{"name": "deferreds"}]}
- ],
- "instance_properties":
- [
- {"name":"context"},
- {"name":"jquery"},
- {"name":"length"},
- {"name":"selector"}
- ],
- "instance_methods":
- [
- {"name":"add", "args": [{"name": "selector"}]},
- {"name":"add", "args": [{"name": "elements"}]},
- {"name":"add", "args": [{"name": "html"}]},
- {"name":"add", "args": [{"name": "jQueryObject"}]},
- {"name":"add", "args": [{"name": "selector"}, {"name": "context"}]},
- {"name":"addBack", "args": []},
- {"name":"addBack", "args": [{"name": "selector"}]},
- {"name":"addClass", "args": [{"name": "className"}]},
- {"name":"addClass", "args": [{"name": "function(index, currentClass)"}]},
- {"name":"after", "args": [{"name": "content"}]},
- {"name":"after", "args": [{"name": "content"}, {"name": "additionalContent"}]},
- {"name":"after", "args": [{"name": "function(index)"}]},
- {"name":"ajaxComplete", "args": [{"name": "handler(event, XMLHttpRequest, ajaxOptions)"}]},
- {"name":"ajaxError", "args": [{"name": "handler(event, jqXHR, ajaxSettings, thrownError)"}]},
- {"name":"ajaxSend", "args": [{"name": "handler(event, jqXHR, ajaxOptions)"}]},
- {"name":"ajaxStart", "args": [{"name": "handler()"}]},
- {"name":"ajaxStop", "args": [{"name": "handler()", "insertion": "->"}]},
- {"name":"ajaxSuccess", "args": [{"name": "handler(event, XMLHttpRequest, ajaxOptions)"}]},
- {"name":"andSelf", "args": []},
- {"name":"animate", "args": [{"name": "properties"}, {"name": "[duration_default_400]"}, {"name": "[easing_default_swing]"}, {"name": "[complete()]"}]},
- {"name":"animate", "args": [{"name": "properties"}, {"name": "options"}]},
- {"name":"append", "args": [{"name": "content"}]},
- {"name":"append", "args": [{"name": "content"}, {"name": "additionalContent"}]},
- {"name":"append", "args": [{"name": "function(index, html)"}]},
- {"name":"appendTo", "args": [{"name": "target"}]},
- {"name":"attr", "args": [{"name": "attributeName"}]},
- {"name":"attr", "args": [{"name": "attributeName"}, {"name": "value"}]},
- {"name":"attr", "args": [{"name": "attributes"}]},
- {"name":"attr", "args": [{"name": "attributeName"}, {"name": "function(index, attr)"}]},
- {"name":"before", "args": [{"name": "content"}]},
- {"name":"before", "args": [{"name": "content"}, {"name": "additionalContent"}]},
- {"name":"bind", "args": [{"name": "eventType"}, {"name": "[eventData]"}, {"name": "[handler(eventObject)]"}]},
- {"name":"bind", "args": [{"name": "eventType"}, {"name": "[eventData]"}, {"name": "preventBubble"}]},
- {"name":"bind", "args": [{"name": "events"}]},
- {"name":"blur", "args": []},
- {"name":"blur", "args": [{"name": "handler(eventObject)"}]},
- {"name":"blur", "args": [{"name": "[eventData]"}, {"name": "handler(eventObject)"}]},
- {"name":"change", "args": [{"name": "handler(eventObject)"}]},
- {"name":"change", "args": [{"name": "[eventData]"}, {"name": "handler(eventObject)"}]},
- {"name":"change", "args": []},
- {"name":"children", "args": [{"name": "[selector]"}]},
- {"name":"clearQueue", "args": [{"name": "[queueName]"}]},
- {"name":"click", "args": [{"name": "handler(eventObject)"}]},
- {"name":"click", "args": [{"name": "[eventData]"}, {"name": "handler(eventObject)"}]},
- {"name":"click", "args": []},
- {"name":"clone", "args": [{"name": "withDataAndEvents"}]},
- {"name":"clone", "args": [{"name": "withDataAndEvents"}, {"name": "[deepWithDataAndEvents] "}]},
- {"name":"closest", "args": [{"name": "selector"}, {"name": "[context]"}]},
- {"name":"closest", "args": [{"name": "jQueryObject"}]},
- {"name":"closest", "args": [{"name": "element"}]},
- {"name":"contents", "args": []},
- {"name":"css", "args": [{"name": "propertyName"}]},
- {"name":"css", "args": [{"name": "propertyNames"}]},
- {"name":"css", "args": [{"name": "propertyName"}, {"name": "value"}]},
- {"name":"css", "args": [{"name": "propertyName"}, {"name": "function(index, value)"}]},
- {"name":"css", "args": [{"name": "properties"}]},
- {"name":"data", "args": [{"name": "key"}, {"name": "value"}]},
- {"name":"data", "args": [{"name": "obj"}]},
- {"name":"data", "args": [{"name": "key"}]},
- {"name":"data", "args": []},
- {"name":"dblclick", "args": [{"name": "handler(eventObject)"}]},
- {"name":"dblclick", "args": [{"name": "[eventData]"}, {"name": "handler(eventObject)"}]},
- {"name":"dblclick", "args": []},
- {"name":"delay", "args": [{"name": "duration"}, {"name": "[queueName]"}]},
- {"name":"delegate", "args": [{"name": "selector"}, {"name": "eventType"}, {"name": "handler(eventObject)"}]},
- {"name":"delegate", "args": [{"name": "selector"}, {"name": "eventType"}, {"name": "eventData"}, {"name": "handler(eventObject)"}]},
- {"name":"delegate", "args": [{"name": "selector"}, {"name": "events"}]},
- {"name":"dequeue", "args": [{"name": "[queueName]"}]},
- {"name":"detach", "args": [{"name": "[selector]"}]},
- {"name":"die", "args": []},
- {"name":"die", "args": [{"name": "eventType"}, {"name": "[handler]"}]},
- {"name":"die", "args": [{"name": "events"}]},
- {"name":"each", "args": [{"name": "function(index, Element)"}]},
- {"name":"empty", "args": []},
- {"name":"end", "args": []},
- {"name":"eq", "args": [{"name": "index"}]},
- {"name":"eq", "args": [{"name": "-index"}]},
- {"name":"error", "args": [{"name": "handler(eventObject)"}]},
- {"name":"error", "args": [{"name": "[eventData]"}, {"name": "handler(eventObject)"}]},
- {"name":"fadeIn", "args": [{"name": "[duration_default_400]"}, {"name": "[complete()]"}]},
- {"name":"fadeIn", "args": [{"name": "options"}]},
- {"name":"fadeIn", "args": [{"name": "[duration_default_400]"}, {"name": "[easing_default_swing]"}, {"name": "[complete()]"}]},
- {"name":"fadeOut", "args": [{"name": "[duration_default_400]"}, {"name": "[complete()]"}]},
- {"name":"fadeOut", "args": [{"name": "options"}]},
- {"name":"fadeOut", "args": [{"name": "[duration_default_400]"}, {"name": "[easing_default_swing]"}, {"name": "[complete()]"}]},
- {"name":"fadeTo", "args": [{"name": "duration"}, {"name": "opacity"}, {"name": "[complete]"}]},
- {"name":"fadeTo", "args": [{"name": "duration"}, {"name": "opacity"}, {"name": "[easing]"}, {"name": "[complete()]"}]},
- {"name":"fadeToggle", "args": [{"name": "[duration_default_400]"}, {"name": "[easing_default_swing]"}, {"name": "[complete()]"}]},
- {"name":"fadeToggle", "args": [{"name": "options"}]},
- {"name":"filter", "args": [{"name": "selector"}]},
- {"name":"filter", "args": [{"name": "function(index)"}]},
- {"name":"filter", "args": [{"name": "element"}]},
- {"name":"filter", "args": [{"name": "jQueryObject"}]},
- {"name":"find", "args": [{"name": "selector"}]},
- {"name":"find", "args": [{"name": "jQueryObject"}]},
- {"name":"find", "args": [{"name": "element"}]},
- {"name":"finish", "args": [{"name": "[queue]"}]},
- {"name":"first", "args": []},
- {"name":"focus", "args": [{"name": "handler(eventObject)"}]},
- {"name":"focus", "args": [{"name": "[eventData]"}, {"name": "handler(eventObject)"}]},
- {"name":"focus", "args": []},
- {"name":"focusin", "args": [{"name": "handler(eventObject)"}]},
- {"name":"focusin", "args": [{"name": "[eventData]"}, {"name": "handler(eventObject)"}]},
- {"name":"focusout", "args": [{"name": "handler(eventObject)"}]},
- {"name":"focusout", "args": [{"name": "[eventData]"}, {"name": "handler(eventObject)"}]},
- {"name":"get", "args": [{"name": "[index]"}]},
- {"name":"has", "args": [{"name": "selector"}]},
- {"name":"has", "args": [{"name": "contained"}]},
- {"name":"hasClass", "args": [{"name": "className"}]},
- {"name":"height", "args": []},
- {"name":"height", "args": [{"name": "value"}]},
- {"name":"height", "args": [{"name": "function(index, height)"}]},
- {"name":"hide", "args": []},
- {"name":"hide", "args": [{"name": "[duration_default_400]"}, {"name": "[complete]"}]},
- {"name":"hide", "args": [{"name": "options"}]},
- {"name":"hide", "args": [{"name": "[duration_default_400]"}, {"name": "[easing_default_swing]"}, {"name": "[complete()]"}]},
- {"name":"hover", "args": [{"name": "handlerIn(eventObject)"}, {"name": "handlerOut(eventObject)"}]},
- {"name":"html", "args": []},
- {"name":"html", "args": [{"name": "htmlString"}]},
- {"name":"html", "args": [{"name": "function(index, oldhtml)"}]},
- {"name":"index", "args": []},
- {"name":"index", "args": [{"name": "selector"}]},
- {"name":"index", "args": [{"name": "element"}]},
- {"name":"innerHeight", "args": []},
- {"name":"innerWidth", "args": []},
- {"name":"insertAfter", "args": [{"name": "target"}]},
- {"name":"insertBefore", "args": [{"name": "target"}]},
- {"name":"is", "args": [{"name": "selector"}]},
- {"name":"is", "args": [{"name": "function(index)"}]},
- {"name":"is", "args": [{"name": "jQueryObject"}]},
- {"name":"is", "args": [{"name": "element"}]},
- {"name":"keydown", "args": []},
- {"name":"keydown", "args": [{"name": "handler(eventObject)"}]},
- {"name":"keydown", "args": [{"name": "[eventData]"}, {"name": "handler(eventObject)"}]},
- {"name":"keypress", "args": []},
- {"name":"keypress", "args": [{"name": "handler(eventObject)"}]},
- {"name":"keypress", "args": [{"name": "[eventData]"}, {"name": "handler(eventObject)"}]},
- {"name":"keyup", "args": []},
- {"name":"keyup", "args": [{"name": "handler(eventObject)"}]},
- {"name":"keyup", "args": [{"name": "[eventData]"}, {"name": "handler(eventObject)"}]},
- {"name":"last", "args": []},
- {"name":"live", "args": [{"name": "events"}, {"name": "handler(eventObject)"}]},
- {"name":"live", "args": [{"name": "events"}, {"name": "data"}, {"name": "handler(eventObject)"}]},
- {"name":"live", "args": [{"name": "events"}]},
- {"name":"load", "args": [{"name": "url"}, {"name": "[data]"}, {"name": "[complete(responseText, textStatus, XMLHttpRequest)]"}]},
- {"name":"load", "args": [{"name": "handler(eventObject)"}]},
- {"name":"load", "args": [{"name": "[eventData]"}, {"name": "handler(eventObject)"}]},
- {"name":"map", "args": [{"name": "callback(index, domElement)"}]},
- {"name":"mousedown", "args": []},
- {"name":"mousedown", "args": [{"name": "handler(eventObject)"}]},
- {"name":"mousedown", "args": [{"name": "[eventData]"}, {"name": "handler(eventObject)"}]},
- {"name":"mouseenter", "args": []},
- {"name":"mouseenter", "args": [{"name": "handler(eventObject)"}]},
- {"name":"mouseenter", "args": [{"name": "[eventData]"}, {"name": "handler(eventObject)"}]},
- {"name":"mouseleave", "args": []},
- {"name":"mouseleave", "args": [{"name": "handler(eventObject)"}]},
- {"name":"mouseleave", "args": [{"name": "[eventData]"}, {"name": "handler(eventObject)"}]},
- {"name":"mousemove", "args": []},
- {"name":"mousemove", "args": [{"name": "handler(eventObject)"}]},
- {"name":"mousemove", "args": [{"name": "[eventData]"}, {"name": "handler(eventObject)"}]},
- {"name":"mouseout", "args": []},
- {"name":"mouseout", "args": [{"name": "handler(eventObject)"}]},
- {"name":"mouseout", "args": [{"name": "[eventData]"}, {"name": "handler(eventObject)"}]},
- {"name":"mouseover", "args": []},
- {"name":"mouseover", "args": [{"name": "handler(eventObject)"}]},
- {"name":"mouseover", "args": [{"name": "[eventData]"}, {"name": "handler(eventObject)"}]},
- {"name":"mouseup", "args": []},
- {"name":"mouseup", "args": [{"name": "handler(eventObject)"}]},
- {"name":"mouseup", "args": [{"name": "[eventData]"}, {"name": "handler(eventObject)"}]},
- {"name":"next", "args": [{"name": "[selector]"}]},
- {"name":"nextAll", "args": [{"name": "[selector]"}]},
- {"name":"nextUntil", "args": [{"name": "[selector]"}, {"name": "[filter]"}]},
- {"name":"nextUntil", "args": [{"name": "[element]"}, {"name": "[filter]"}]},
- {"name":"not", "args": [{"name": "selector"}]},
- {"name":"not", "args": [{"name": "elements"}]},
- {"name":"not", "args": [{"name": "function(index)"}]},
- {"name":"not", "args": [{"name": "jQueryObject"}]},
- {"name":"off", "args": [{"name": "events"}, {"name": "[selector]"}, {"name": "handler(eventObject)"}]},
- {"name":"off", "args": [{"name": "events"}, {"name": "[selector]"}]},
- {"name":"offset", "args": []},
- {"name":"offset", "args": [{"name": "coordinates"}]},
- {"name":"offset", "args": [{"name": "function(index, coords)"}]},
- {"name":"offsetParent", "args": []},
- {"name":"on", "args": [{"name": "events"}, {"name": "[selector]"}, {"name": "[data]"}, {"name": "handler(eventObject)"}]},
- {"name":"on", "args": [{"name": "events"}, {"name": "[selector]"}, {"name": "[data]"}]},
- {"name":"one", "args": [{"name": "events"}, {"name": "[data]"}, {"name": "handler(eventObject)"}]},
- {"name":"one", "args": [{"name": "events"}, {"name": "[selector]"}, {"name": "[data]"}, {"name": "handler(eventObject)"}]},
- {"name":"one", "args": [{"name": "events"}, {"name": "[selector]"}, {"name": "[data]"}]},
- {"name":"outerHeight", "args": [{"name": "[includeMargin]"}]},
- {"name":"outerWidth", "args": [{"name": "[includeMargin]"}]},
- {"name":"parent", "args": [{"name": "[selector]"}]},
- {"name":"parents", "args": [{"name": "[selector]"}]},
- {"name":"parentsUntil", "args": [{"name": "[selector]"}, {"name": "[filter]"}]},
- {"name":"parentsUntil", "args": [{"name": "[element]"}, {"name": "[filter]"}]},
- {"name":"position", "args": []},
- {"name":"prepend", "args": [{"name": "content"}, {"name": "[additionalContent]"}]},
- {"name":"prepend", "args": [{"name": "function(index, html)"}]},
- {"name":"prependTo", "args": [{"name": "target"}]},
- {"name":"prev", "args": [{"name": "[selector]"}]},
- {"name":"prevAll", "args": [{"name": "[selector]"}]},
- {"name":"prevUntil", "args": [{"name": "[selector]"}, {"name": "[filter]"}]},
- {"name":"prevUntil", "args": [{"name": "[element]"}, {"name": "[filter]"}]},
- {"name":"promise", "args": [{"name": "[type_default_fx]"}, {"name": "[target]"}]},
- {"name":"prop", "args": [{"name": "propertyName"}]},
- {"name":"prop", "args": [{"name": "propertyName"}, {"name": "value"}]},
- {"name":"prop", "args": [{"name": "properties"}]},
- {"name":"prop", "args": [{"name": "propertyName"}, {"name": "function(index, oldPropertyValue)"}]},
- {"name":"pushStack", "args": [{"name": "elements"}]},
- {"name":"pushStack", "args": [{"name": "elements"}, {"name": "name"}, {"name": "arguments"}]},
- {"name":"queue", "args": [{"name": "[queueName]"}]},
- {"name":"queue", "args": [{"name": "[queueName]"}, {"name": "newQueue"}]},
- {"name":"queue", "args": [{"name": "[queueName]"}, {"name": "callback(next)"}]},
- {"name":"ready", "args": [{"name": "handler"}]},
- {"name":"remove", "args": [{"name": "[selector]"}]},
- {"name":"removeAttr", "args": [{"name": "attributeName"}]},
- {"name":"removeClass", "args": [{"name": "[className]"}]},
- {"name":"removeClass", "args": [{"name": "function(index, class)"}]},
- {"name":"removeData", "args": [{"name": "[name]"}]},
- {"name":"removeData", "args": [{"name": "[list]"}]},
- {"name":"removeProp", "args": [{"name": "propertyName"}]},
- {"name":"replaceAll", "args": [{"name": "target"}]},
- {"name":"replaceWith", "args": [{"name": "newContent"}]},
- {"name":"replaceWith", "args": [{"name": "function"}]},
- {"name":"resize", "args": [{"name": "handler(eventObject)"}]},
- {"name":"resize", "args": [{"name": "[eventData]"}, {"name": "handler(eventObject)"}]},
- {"name":"resize", "args": []},
- {"name":"scroll", "args": [{"name": "handler(eventObject)"}]},
- {"name":"scroll", "args": [{"name": "[eventData]"}, {"name": "handler(eventObject)"}]},
- {"name":"scroll", "args": []},
- {"name":"scrollLeft", "args": [{"name": "value"}]},
- {"name":"scrollLeft", "args": []},
- {"name":"scrollTop", "args": [{"name": "value"}]},
- {"name":"scrollTop", "args": []},
- {"name":"select", "args": [{"name": "handler(eventObject)"}]},
- {"name":"select", "args": [{"name": "[eventData]"}, {"name": "handler(eventObject)"}]},
- {"name":"select", "args": []},
- {"name":"serialize", "args": []},
- {"name":"serializeArray", "args": []},
- {"name":"show", "args": []},
- {"name":"show", "args": [{"name": "[duration_default_400]"}, {"name": "[complete()]"}]},
- {"name":"show", "args": [{"name": "options"}]},
- {"name":"show", "args": [{"name": "[duration_default_400]"}, {"name": "[easing_default_swing]"}, {"name": "[complete()]"}]},
- {"name":"siblings", "args": [{"name": "[selector]"}]},
- {"name":"size", "args": []},
- {"name":"slice", "args": [{"name": "start"}, {"name": "[end]"}]},
- {"name":"slideDown", "args": [{"name": "[duration_default_400]"}, {"name": "[complete()]"}]},
- {"name":"slideDown", "args": [{"name": "options"}]},
- {"name":"slideDown", "args": [{"name": "[duration_default_400]"}, {"name": "[easing_default_swing]"}, {"name": "[complete()]"}]},
- {"name":"slideToggle", "args": [{"name": "[duration_default_400]"}, {"name": "[complete()]"}]},
- {"name":"slideToggle", "args": [{"name": "options"}]},
- {"name":"slideToggle", "args": [{"name": "[duration_default_400]"}, {"name": "[easing_default_swing]"}, {"name": "[complete()]"}]},
- {"name":"slideUp", "args": [{"name": "[duration_default_400]"}, {"name": "[complete()]"}]},
- {"name":"slideUp", "args": [{"name": "options"}]},
- {"name":"slideUp", "args": [{"name": "[duration_default_400]"}, {"name": "[easing_default_swing]"}, {"name": "[complete()]"}]},
- {"name":"stop", "args": [{"name": "[clearQueue]"}, {"name": "[jumpToEnd]"}]},
- {"name":"stop", "args": [{"name": "[queue]"}, {"name": "[clearQueue]"}, {"name": "[jumpToEnd]"}]},
- {"name":"submit", "args": [{"name": "handler(eventObject)"}]},
- {"name":"submit", "args": [{"name": "[eventData]"}, {"name": "handler(eventObject)"}]},
- {"name":"submit", "args": []},
- {"name":"text", "args": []},
- {"name":"text", "args": [{"name": "textString"}]},
- {"name":"text", "args": [{"name": "function(index, text)"}]},
- {"name":"toArray", "args": []},
- {"name":"toggle", "args": [{"name": "[duration_default_400]"}, {"name": "[complete()]"}]},
- {"name":"toggle", "args": [{"name": "options"}]},
- {"name":"toggle", "args": [{"name": "[duration_default_400]"}, {"name": "[easing_default_swing]"}, {"name": "[complete()]"}]},
- {"name":"toggle", "args": [{"name": "showOrHide"}]},
- {"name":"toggle", "args": [{"name": "evenHandler(eventObject)"}, {"name": "oddHandler(eventObject)"}, {"name": "handler(eventObject)"}]},
- {"name":"toggleClass", "args": [{"name": "className"}]},
- {"name":"toggleClass", "args": [{"name": "className"}, {"name": "switch"}]},
- {"name":"toggleClass", "args": [{"name": "[switch]"}]},
- {"name":"toggleClass", "args": [{"name": "function(index, class, switch)"}, {"name": "[switch]"}]},
- {"name":"trigger", "args": [{"name": "eventType"}, {"name": "[extraParameters]"}]},
- {"name":"trigger", "args": [{"name": "event"}]},
- {"name":"triggerHandler", "args": [{"name": "eventType"}, {"name": "[extraParameters]"}]},
- {"name":"unbind", "args": [{"name": "[eventType]"}, {"name": "[handler(eventObject)]"}]},
- {"name":"unbind", "args": [{"name": "eventType"}, {"name": "false"}]},
- {"name":"unbind", "args": [{"name": "event"}]},
- {"name":"undelegate", "args": []},
- {"name":"undelegate", "args": [{"name": "selector"}, {"name": "eventType"}]},
- {"name":"undelegate", "args": [{"name": "selector"}, {"name": "eventType"}, {"name": "handler(eventObject)"}]},
- {"name":"undelegate", "args": [{"name": "selector"}, {"name": "events"}]},
- {"name":"undelegate", "args": [{"name": "namespace"}]},
- {"name":"unload", "args": [{"name": "handler(eventObject)"}]},
- {"name":"unload", "args": [{"name": "[eventData]"}, {"name": "handler(eventObject)"}]},
- {"name":"unwrap", "args": []},
- {"name":"val", "args": []},
- {"name":"val", "args": [{"name": "value"}]},
- {"name":"val", "args": [{"name": "function(index, value)"}]},
- {"name":"width", "args": []},
- {"name":"width", "args": [{"name": "value"}]},
- {"name":"width", "args": [{"name": "function(index, width)"}]},
- {"name":"wrap", "args": [{"name": "wrappingElement"}]},
- {"name":"wrap", "args": [{"name": "function(index)"}]},
- {"name":"wrapAll", "args": [{"name": "wrappingElement"}]},
- {"name":"wrapInner", "args": [{"name": "wrappingElement"}]},
- {"name":"wrapInner", "args": [{"name": "function(index)"}]}
- ]
- }
- ]
-}
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/CoffeeComplete Plus (Autocompletion)/CoffeeComplete Plus Keywords.sublime-completions b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/CoffeeComplete Plus (Autocompletion)/CoffeeComplete Plus Keywords.sublime-completions
deleted file mode 100644
index 64f4337..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/CoffeeComplete Plus (Autocompletion)/CoffeeComplete Plus Keywords.sublime-completions
+++ /dev/null
@@ -1,107 +0,0 @@
-{"scope": "source.coffee -comment",
- "completions": [
-
- // keywords
-
- {"trigger": "break"},
- {"trigger": "continue"},
- {"trigger": "delete"},
- {"trigger": "extends"},
- {"trigger": "finally"},
- {"trigger": "instanceof"},
- {"trigger": "return"},
- {"trigger": "super"},
- {"trigger": "throw"},
- {"trigger": "typeof"},
- {"trigger": "until"},
- {"trigger": "while"},
-
- // classes
-
- {"trigger": "Array"},
- {"trigger": "Boolean"},
- {"trigger": "Date"},
- {"trigger": "Error"},
- {"trigger": "Function"},
- {"trigger": "JSON"},
- {"trigger": "Math"},
- {"trigger": "Number"},
- {"trigger": "Object"},
- {"trigger": "RegExp"},
- {"trigger": "String"},
-
- // globals
-
- {"trigger": "Infinity"},
- {"trigger": "NaN"},
- {"trigger": "undefined"},
-
- {"trigger": "● decodeURI(encURI)", "contents": "decodeURI(${1:encURI})"},
- {"trigger": "● decodeURIComponent(encURI)", "contents": "decodeURIComponent(${1:encURI})"},
- {"trigger": "● encodeURI(URI)", "contents": "encodeURI(${1:URI})"},
- {"trigger": "● encodeURIComponent(str)", "contents": "encodeURIComponent(${1:str})"},
- {"trigger": "● eval(str)", "contents": "eval(${1:str})"},
- {"trigger": "● isFinite(x)", "contents": "isFinite(${1:x})"},
- {"trigger": "● isNaN(val)", "contents": "isNaN(${1:val})"},
- {"trigger": "● parseFloat(str)", "contents": "parseFloat(${1:str})"},
- {"trigger": "● parseInt(str)", "contents": "parseInt(${1:str})"},
- {"trigger": "● parseInt(str, radix)", "contents": "parseInt(${1:str}, ${2:radix})"}
-
-/*
-
- // too short
-
- {"trigger": "and"},
- {"trigger": "by"},
- {"trigger": "do"},
- {"trigger": "else"},
- {"trigger": "false"},
- {"trigger": "for"},
- {"trigger": "if"},
- {"trigger": "in"},
- {"trigger": "is"},
- {"trigger": "isnt"},
- {"trigger": "loop"},
- {"trigger": "new"},
- {"trigger": "no"},
- {"trigger": "not"},
- {"trigger": "null"},
- {"trigger": "of"},
- {"trigger": "off"},
- {"trigger": "on"},
- {"trigger": "or"},
- {"trigger": "then"},
- {"trigger": "this"},
- {"trigger": "true"},
- {"trigger": "try"},
- {"trigger": "when"},
- {"trigger": "yes"},
-
- // snippets
-
- {"trigger": "catch"},
- {"trigger": "class"},
- {"trigger": "switch"},
- {"trigger": "unless"},
-
- // rare
-
- {"trigger": "debugger"},
- {"trigger": "EvalError"},
- {"trigger": "RangeError"},
- {"trigger": "ReferenceError"},
- {"trigger": "SyntaxError"},
- {"trigger": "TypeError"},
- {"trigger": "URIError"},
-
- {"trigger": "configurable: "},
- {"trigger": "enumerable: "},
- {"trigger": "value: "},
- {"trigger": "writable: "},
- {"trigger": "get: ()", "contents": "get: ->"},
- {"trigger": "set: (val)", "contents": "set: (val) ->"}
-
-*/
-
- ]
-}
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/CoffeeComplete Plus (Autocompletion)/CoffeeComplete Plus.sublime-settings b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/CoffeeComplete Plus (Autocompletion)/CoffeeComplete Plus.sublime-settings
deleted file mode 100644
index 9727ee7..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/CoffeeComplete Plus (Autocompletion)/CoffeeComplete Plus.sublime-settings
+++ /dev/null
@@ -1,44 +0,0 @@
-{
- // These dirs will not be searched when looking for .coffee files.
- // These should be dir names only. No relative paths.
- "coffee_autocomplete_plus_excluded_dirs":
- [
- ".svn",
- ".git",
- "CVS",
- "lib",
- "node_modules",
- "pub",
- "public",
- "vendor",
- "doc",
- "docs",
- "build",
- "builds",
- "bin"
- ],
-
- // List of strings. These paths will be appended to your project's root and searched.
- // Leave empty to search all directories in your project's root directory.
- "coffee_autocomplete_plus_restricted_to_paths": [],
-
- // Map function names to types.
- "coffee_autocomplete_plus_function_return_types":
- [
- {
- "function_names": ["$", "jQuery"],
- "type_name": "$"
- }
- ],
- // Regular expression of members to exclude from autocomplete.
- // This is useful for properties/methods that are regarded "private" and start
- // with an underscore. E.g. _privateVariable
- "coffee_autocomplete_plus_member_exclusion_regexes":
- [
- "^_" // Starts with underscore
- ],
- // OBSOLETE
- // Aliases for "this", like "that" and "self".
- // CA+ assignment detection is now able to detect that = this assignments.
- "coffee_autocomplete_plus_this_aliases": ["that", "self"]
-}
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/CoffeeComplete Plus (Autocompletion)/CoffeeGotoDefinition.py b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/CoffeeComplete Plus (Autocompletion)/CoffeeGotoDefinition.py
deleted file mode 100644
index 43fd0d6..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/CoffeeComplete Plus (Autocompletion)/CoffeeGotoDefinition.py
+++ /dev/null
@@ -1,250 +0,0 @@
-import sublime, sublime_plugin
-import re
-import os
-import threading
-import coffee_utils
-from coffee_utils import debug
-
-COMMAND_NAME = 'coffee_goto_definition'
-STATUS_MESSAGE_DEFINITION_FOUND = "Coffee: Definition for \"%s\" found."
-STATUS_MESSAGE_NO_DEFINITION_FOUND = "Coffee: No definition for \"%s\" found."
-STATUS_MESSAGE_COFFEE_GOTO_DEFINITION = "Coffee: Goto Definition of \"%s\""
-
-# SEARCH ORDER:
-# Current file class (TitleCaps only)
-# Current file function
-# Current file assignment
-# Global TitleCaps.coffee class
-# Global search for class (TitleCaps only)
-# Global search for function
-
-# TODO:
-# X Add config for "this" aliases (DONE)
-# - Codo docs searching for function parameter types
-# X Goto definition knows about function parameters and for loop variables
-# - Smarter operand parsing. E.g. Given: this.test = "test", when goto "test", look for "this.test = ", not "test ="
-# - Check contents of currently open views
-# - Menu integration
-
-class CoffeeGotoDefinitionCommand(sublime_plugin.TextCommand):
- def run(self, edit):
-
- # Get the window
- self.window = sublime.active_window()
-
- # The current view
- view = self.view
- # Lines for currently viewed file
- current_file_lines = coffee_utils.get_view_content_lines(view)
-
- # Get currently selected word
- coffee_utils.select_current_word(view)
- selected_word = coffee_utils.get_selected_word(view)
-
- selected_region = self.view.sel()[0]
-
- # http://www.sublimetext.com/forum/viewtopic.php?f=6&t=9076
- settings = sublime.load_settings(coffee_utils.SETTINGS_FILE_NAME)
-
- # Pull the excluded dirs from preferences
- excluded_dirs = settings.get(coffee_utils.PREFERENCES_COFFEE_EXCLUDED_DIRS)
- if not excluded_dirs:
- excluded_dirs = []
-
- restricted_to_dirs = settings.get(coffee_utils.PREFERENCES_COFFEE_RESTRICTED_TO_PATHS)
- if not restricted_to_dirs:
- restricted_to_dirs = []
-
- # List of all project folders
- project_folder_list = self.window.folders()
-
- if restricted_to_dirs:
- specific_project_folders = []
- for next_restricted_dir in restricted_to_dirs:
- for next_project_folder in project_folder_list:
- next_specific_folder = os.path.normpath(os.path.join(next_project_folder, next_restricted_dir))
- specific_project_folders.append(next_specific_folder)
- project_folder_list = specific_project_folders
-
- # If there is a word selection and we're looking at a coffee file...
- if len(selected_word) > 0 and coffee_utils.is_coffee_syntax(view):
-
- thread = CoffeeGotoDefinitionThread(project_folder_list, current_file_lines, selected_word, excluded_dirs, selected_region)
- thread.start()
- self.check_operation(thread)
-
- def check_operation(self, thread, previous_progress_indicator_tuple=None):
- selected_word = thread.selected_word
- if not thread.is_alive():
-
- # Flatten any selection ranges
- if len(self.view.sel()) > 0:
- region = self.view.sel()[0]
- debug(region)
- end_point = region.end()
- region_to_select = sublime.Region(end_point, end_point)
- coffee_utils.select_region_in_view(self.view, region_to_select)
-
- matched_location_tuple = thread.matched_location_tuple
- if matched_location_tuple:
- # debug("Match found!")
- file_to_open = matched_location_tuple[0]
- row = matched_location_tuple[1] + 1
- column = matched_location_tuple[2] + 1
- match = matched_location_tuple[3]
- row_start_index = matched_location_tuple[4]
- # If there is a file to open...
- if file_to_open:
- # Open the file in the editor
- coffee_utils.open_file_at_position(self.window, file_to_open, row, column)
- # Otherwise, assume we found the match in the current view
- else:
- match_end = row_start_index + match.start() + len(match.group())
- region_to_select = sublime.Region(match_end, match_end)
- coffee_utils.select_region_in_view(self.view, region_to_select)
- self.view.show(region_to_select)
-
- self.window.active_view().set_status(COMMAND_NAME, STATUS_MESSAGE_DEFINITION_FOUND % selected_word)
- else:
- self.window.active_view().set_status(COMMAND_NAME, STATUS_MESSAGE_NO_DEFINITION_FOUND % selected_word)
-
- else:
- # Create the command's goto definition text, including the selected word. For the status bar.
- goto_definition_status_text = STATUS_MESSAGE_COFFEE_GOTO_DEFINITION % selected_word
- # Get a tuple containing the progress text, progress position, and progress direction.
- # This is used to animate a progress indicator in the status bar.
- current_progress_indicator_tuple = coffee_utils.get_progress_indicator_tuple(previous_progress_indicator_tuple)
- # Get the progress text
- progress_indicator_status_text = current_progress_indicator_tuple[0]
- # Set the status bar text so the user knows what's going on
- self.window.active_view().set_status(COMMAND_NAME, goto_definition_status_text + " " + progress_indicator_status_text)
- # Check again momentarily to see if the operation has completed.
- sublime.set_timeout(lambda: self.check_operation(thread, current_progress_indicator_tuple), 100)
-
-class CoffeeGotoDefinitionThread(threading.Thread):
-
- def __init__(self, project_folder_list, current_file_lines, selected_word, excluded_dirs, selected_region):
- self.project_folder_list = project_folder_list
- self.current_file_lines = current_file_lines
- self.selected_word = selected_word
- self.excluded_dirs = excluded_dirs
- self.selected_region = selected_region
- # None if no match was found, or a tuple containing the filename, row, column and match
- self.matched_location_tuple = None
- threading.Thread.__init__(self)
-
- def run(self):
-
- project_folder_list = self.project_folder_list
- current_file_lines = self.current_file_lines
- selected_word = self.selected_word
- excluded_dirs = self.excluded_dirs
- selected_region = self.selected_region
-
- # This will be assigned whem a match is made
- matched_location_tuple = None
-
- # The regular expression used to search for the selected class
- class_regex = coffee_utils.CLASS_REGEX % re.escape(selected_word)
- # The regex used to search for the selected function
- function_regex = coffee_utils.FUNCTION_REGEX % re.escape(selected_word)
- # The regex used to search for the selected variable assignment
- assignment_regex = coffee_utils.ASSIGNMENT_REGEX % re.escape(selected_word)
- # The regex used to search for the selected variable as a parameter in a method
- param_regex = coffee_utils.PARAM_REGEX.format(name=re.escape(selected_word))
-
- # The regex used to search for the selected variable as a for loop var
- for_loop_regex = coffee_utils.FOR_LOOP_REGEX % re.escape(selected_word)
-
- debug(("Selected: \"%s\"" % selected_word))
-
- # ------ CURRENT FILE: CLASS (TitleCaps ONLY) ------------
-
- if not matched_location_tuple:
-
- # If so, we assume it is a class.
- debug("Checking for local class %s..." % selected_word)
- class_location_search_tuple = coffee_utils.find_location_of_regex_in_files(class_regex, current_file_lines, [])
- if class_location_search_tuple:
- matched_location_tuple = class_location_search_tuple
-
- # ------ GLOBAL SEARCH: CLASS ----------------------------
-
- if not matched_location_tuple:
-
- # Coffeescript filename regex
- coffeescript_filename_regex = coffee_utils.COFFEE_FILENAME_REGEX
- # All coffeescript file paths
- all_coffee_file_paths = coffee_utils.get_files_in(project_folder_list, coffeescript_filename_regex, excluded_dirs)
-
- debug("Checking globally for class %s..." % selected_word)
- # Assume it is a file called selected_word.coffee
- exact_file_name_regex = "^" + re.escape(selected_word) + coffee_utils.COFFEE_EXTENSION_WITH_DOT + "$"
- exact_name_file_paths = coffee_utils.get_files_in(project_folder_list, exact_file_name_regex, excluded_dirs)
- exact_location_search_tuple = coffee_utils.find_location_of_regex_in_files(class_regex, None, exact_name_file_paths)
- if exact_location_search_tuple:
- matched_location_tuple = exact_location_search_tuple
- else:
- global_class_location_search_tuple = coffee_utils.find_location_of_regex_in_files(class_regex, None, all_coffee_file_paths)
- if global_class_location_search_tuple:
- matched_location_tuple = global_class_location_search_tuple
-
- # ------ CURRENT FILE: FUNCTION --------------------------
- if not matched_location_tuple:
- debug("Checking for local function %s..." % selected_word)
- local_function_location_search_tuple = coffee_utils.find_location_of_regex_in_files(function_regex, current_file_lines, [])
- if local_function_location_search_tuple:
- matched_location_tuple = local_function_location_search_tuple
-
- # ------ CURRENT FILE: ASSIGNMENT ------------------------
-
- if not matched_location_tuple:
-
- debug("Checking for local assignment of %s..." % selected_word)
- backwards_match_tuple = coffee_utils.search_backwards_for(current_file_lines, assignment_regex, selected_region)
- if backwards_match_tuple:
- filename_tuple = tuple([None])
- matched_location_tuple = filename_tuple + backwards_match_tuple
- else:
- # Nothing found. Now let's look backwards for a method parameter
- param_match_tuple = coffee_utils.search_backwards_for(current_file_lines, param_regex, selected_region)
- if param_match_tuple:
- filename_tuple = tuple([None])
- matched_location_tuple = filename_tuple + param_match_tuple
- else:
- for_loop_match_tuple = coffee_utils.search_backwards_for(current_file_lines, for_loop_regex, selected_region)
- if for_loop_match_tuple:
- filename_tuple = tuple([None])
- matched_location_tuple = filename_tuple + for_loop_match_tuple
- # Otherwise, forwards search for it. It could be defined in the constructor.
- else:
- forwards_match_tuple = coffee_utils.find_location_of_regex_in_files(assignment_regex, current_file_lines, [])
- if forwards_match_tuple:
- matched_location_tuple = forwards_match_tuple
-
- # ------ GLOBAL SEARCH: FUNCTION -------------------------
-
- if not matched_location_tuple:
-
- # Coffeescript filename regex
- coffeescript_filename_regex = coffee_utils.COFFEE_FILENAME_REGEX
- # All coffeescript file paths
- all_coffee_file_paths = coffee_utils.get_files_in(project_folder_list, coffeescript_filename_regex, excluded_dirs)
-
- debug("Checking globally for function %s..." % selected_word)
- global_function_location_search_tuple = coffee_utils.find_location_of_regex_in_files(function_regex, None, all_coffee_file_paths)
- if global_function_location_search_tuple:
- matched_location_tuple = global_function_location_search_tuple
-
- # ------ DOT OPERATION LOOKUP (TBD) ----------------------
- # TODO: Pull out dot operator object, determine its assignment type, find class, goto method/property.
- # Also, determine where to put this lookup.
-
- # ------ SUPER METHOD LOOKUP (TBD) -----------------------
- # TODO: If selected_word is "super", assume a function and then attempt to find
- # extending class and open it to the function the cursor is within.
-
- # ------ STORE MATCH RESULTS -----------------------------
- # If not None, then we found something that matched the search!
- if matched_location_tuple:
- self.matched_location_tuple = matched_location_tuple
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/CoffeeComplete Plus (Autocompletion)/Default (Linux).sublime-keymap b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/CoffeeComplete Plus (Autocompletion)/Default (Linux).sublime-keymap
deleted file mode 100644
index 3144828..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/CoffeeComplete Plus (Autocompletion)/Default (Linux).sublime-keymap
+++ /dev/null
@@ -1,5 +0,0 @@
-[
- {
- "keys": ["ctrl+alt+d"], "command": "coffee_goto_definition"
- }
-]
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/CoffeeComplete Plus (Autocompletion)/Default (Linux).sublime-mousemap b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/CoffeeComplete Plus (Autocompletion)/Default (Linux).sublime-mousemap
deleted file mode 100644
index 107d9e4..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/CoffeeComplete Plus (Autocompletion)/Default (Linux).sublime-mousemap
+++ /dev/null
@@ -1,8 +0,0 @@
-[
- {
- "button": "button1", "count": 1, "modifiers": ["ctrl", "alt"],
- "press_command": "drag_select",
- "command": "coffee_goto_definition",
- "press_args": {"by": "words"}
- }
-]
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/CoffeeComplete Plus (Autocompletion)/Default (OSX).sublime-keymap b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/CoffeeComplete Plus (Autocompletion)/Default (OSX).sublime-keymap
deleted file mode 100644
index 3144828..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/CoffeeComplete Plus (Autocompletion)/Default (OSX).sublime-keymap
+++ /dev/null
@@ -1,5 +0,0 @@
-[
- {
- "keys": ["ctrl+alt+d"], "command": "coffee_goto_definition"
- }
-]
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/CoffeeComplete Plus (Autocompletion)/Default (OSX).sublime-mousemap b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/CoffeeComplete Plus (Autocompletion)/Default (OSX).sublime-mousemap
deleted file mode 100644
index 107d9e4..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/CoffeeComplete Plus (Autocompletion)/Default (OSX).sublime-mousemap
+++ /dev/null
@@ -1,8 +0,0 @@
-[
- {
- "button": "button1", "count": 1, "modifiers": ["ctrl", "alt"],
- "press_command": "drag_select",
- "command": "coffee_goto_definition",
- "press_args": {"by": "words"}
- }
-]
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/CoffeeComplete Plus (Autocompletion)/Default (Windows).sublime-keymap b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/CoffeeComplete Plus (Autocompletion)/Default (Windows).sublime-keymap
deleted file mode 100644
index 3144828..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/CoffeeComplete Plus (Autocompletion)/Default (Windows).sublime-keymap
+++ /dev/null
@@ -1,5 +0,0 @@
-[
- {
- "keys": ["ctrl+alt+d"], "command": "coffee_goto_definition"
- }
-]
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/CoffeeComplete Plus (Autocompletion)/Default (Windows).sublime-mousemap b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/CoffeeComplete Plus (Autocompletion)/Default (Windows).sublime-mousemap
deleted file mode 100644
index 107d9e4..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/CoffeeComplete Plus (Autocompletion)/Default (Windows).sublime-mousemap
+++ /dev/null
@@ -1,8 +0,0 @@
-[
- {
- "button": "button1", "count": 1, "modifiers": ["ctrl", "alt"],
- "press_command": "drag_select",
- "command": "coffee_goto_definition",
- "press_args": {"by": "words"}
- }
-]
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/CoffeeComplete Plus (Autocompletion)/Default.sublime-commands b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/CoffeeComplete Plus (Autocompletion)/Default.sublime-commands
deleted file mode 100644
index 3c1052a..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/CoffeeComplete Plus (Autocompletion)/Default.sublime-commands
+++ /dev/null
@@ -1,3 +0,0 @@
-[
- {"caption": "Coffee: Goto Definition", "command": "coffee_goto_definition"}
-]
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/CoffeeComplete Plus (Autocompletion)/Main.sublime-menu b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/CoffeeComplete Plus (Autocompletion)/Main.sublime-menu
deleted file mode 100644
index 2ec9272..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/CoffeeComplete Plus (Autocompletion)/Main.sublime-menu
+++ /dev/null
@@ -1,160 +0,0 @@
-[
- {
- "caption": "Preferences",
- "mnemonic": "n",
- "id": "preferences",
- "children":
- [
- {
- "caption": "Package Settings",
- "mnemonic": "P",
- "id": "package-settings",
- "children":
- [
- {
- "caption": "CoffeeComplete Plus",
- "children":
- [
- { // README
- "command": "open_file",
- "args": {"file": "${packages}/CoffeeComplete Plus (Autocompletion)/README.md"},
- "caption": "README"
- },
- { "caption": "-" },
- { // Settings - Default
- "command": "open_file",
- "args": {"file": "${packages}/CoffeeComplete Plus (Autocompletion)/CoffeeComplete Plus.sublime-settings"},
- "caption": "Settings – Default"
- },
- { // Settings – User
- "command": "open_file",
- "args": {"file": "${packages}/User/CoffeeComplete Plus.sublime-settings"},
- "caption": "Settings – User"
- },
- { "caption": "-" },
- { // Key Bindings – Default (OSX)
- "command": "open_file",
- "args": {
- "file": "${packages}/CoffeeComplete Plus (Autocompletion)/Default (OSX).sublime-keymap",
- "platform": "OSX"
- },
- "caption": "Key Bindings – Default"
- },
- { // Key Bindings – Default (Linux)
- "command": "open_file",
- "args": {
- "file": "${packages}/CoffeeComplete Plus (Autocompletion)/Default (Linux).sublime-keymap",
- "platform": "Linux"
- },
- "caption": "Key Bindings – Default"
- },
- { // Key Bindings – Default (Windows)
- "command": "open_file",
- "args": {
- "file": "${packages}/CoffeeComplete Plus (Autocompletion)/Default (Windows).sublime-keymap",
- "platform": "Windows"
- },
- "caption": "Key Bindings – Default"
- },
- { // Key Bindings – User (OSX)
- "command": "open_file",
- "args": {
- "file": "${packages}/User/Default (OSX).sublime-keymap",
- "platform": "OSX"
- },
- "caption": "Key Bindings – User"
- },
- { // Key Bindings – User (Linux)
- "command": "open_file",
- "args": {
- "file": "${packages}/User/Default (Linux).sublime-keymap",
- "platform": "Linux"
- },
- "caption": "Key Bindings – User"
- },
- { // Key Bindings – User (Windows)
- "command": "open_file",
- "args": {
- "file": "${packages}/User/Default (Windows).sublime-keymap",
- "platform": "Windows"
- },
- "caption": "Key Bindings – User"
- },
- { "caption": "-" },
- { // Mouse Bindings – Default (OSX)
- "command": "open_file",
- "args": {
- "file": "${packages}/CoffeeComplete Plus (Autocompletion)/Default (OSX).sublime-mousemap",
- "platform": "OSX"
- },
- "caption": "Mouse Bindings – Default"
- },
- { // Mouse Bindings – Default (Linux)
- "command": "open_file",
- "args": {
- "file": "${packages}/CoffeeComplete Plus (Autocompletion)/Default (Linux).sublime-mousemap",
- "platform": "Linux"
- },
- "caption": "Mouse Bindings – Default"
- },
- { // Mouse Bindings – Default (Windows)
- "command": "open_file",
- "args": {
- "file": "${packages}/CoffeeComplete Plus (Autocompletion)/Default (Windows).sublime-mousemap",
- "platform": "Windows"
- },
- "caption": "Mouse Bindings – Default"
- },
- { // Mouse Bindings – User (OSX)
- "command": "open_file",
- "args": {
- "file": "${packages}/User/Default (OSX).sublime-mousemap",
- "platform": "OSX"
- },
- "caption": "Mouse Bindings – User"
- },
- { // Mouse Bindings – User (Linux)
- "command": "open_file",
- "args": {
- "file": "${packages}/User/Default (Linux).sublime-mousemap",
- "platform": "Linux"
- },
- "caption": "Mouse Bindings – User"
- },
- { // Mouse Bindings – User (Windows)
- "command": "open_file",
- "args": {
- "file": "${packages}/User/Default (Windows).sublime-mousemap",
- "platform": "Windows"
- },
- "caption": "Mouse Bindings – User"
- },
- { "caption": "-" },
- { // Custom Types – Default
- "command": "open_file",
- "args": {"file": "${packages}/CoffeeComplete Plus (Autocompletion)/CoffeeComplete Plus Custom Types.sublime-settings"},
- "caption": "Custom Types – Default"
- },
- { // Custom Types – User
- "command": "open_file",
- "args": {"file": "${packages}/User/CoffeeComplete Plus Custom Types.sublime-settings"},
- "caption": "Custom Types – User"
- },
- { "caption": "-" },
- { // Built-In Types – Default
- "command": "open_file",
- "args": {"file": "${packages}/CoffeeComplete Plus (Autocompletion)/CoffeeComplete Plus Built-In Types.sublime-settings"},
- "caption": "Built-In Types – Default"
- },
- { // Built-In Types – User
- "command": "open_file",
- "args": {"file": "${packages}/User/CoffeeComplete Plus Built-In Types.sublime-settings"},
- "caption": "Built-In Types – User"
- }
- ]
- }
- ]
- }
- ]
- }
-]
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/CoffeeComplete Plus (Autocompletion)/README.md b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/CoffeeComplete Plus (Autocompletion)/README.md
deleted file mode 100644
index ca5ff42..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/CoffeeComplete Plus (Autocompletion)/README.md
+++ /dev/null
@@ -1,432 +0,0 @@
-CoffeeComplete Plus
-===================
-
-CoffeeComplete Plus (CC+) is a [Sublime Text 2](http://www.sublimetext.com/2) plugin that scans your CoffeeScript files on demand and makes autocomplete suggestions for you.
-
-In addition, this plugin adds the "Coffee: Goto Definition" command, which will look up the class, function or variable definition of the selected token.
-
-Do you miss the old days? When, at the control-tap of a spacebar, your IDE joyfully came running to you, list in hand, asking, "what would you like, sir?" And that list actually made sense? And suggested items you were interested in? I missed those days, so I decided to do something about it. I learned about [Sublime Text 2](http://www.sublimetext.com/2). Best decision of my life. Then, I learned how to make plugins. My first order of business was to make this plugin—and now it's available for you to use.
-
-Autocompletions. Zooming to definitions.
-
-Let start coding again like the old days. With *style*.
-
-Installation
-------------
-
-### Package Control
-
-It is recommended that you use [Sublime Package Control](http://wbond.net/sublime_packages/package_control) to install CoffeeComplete Plus. If you have Package Control installed, use the Package Control: Install Package command and search for CoffeeComplete Plus. Ouila. Start coding easier.
-
-### Manual Installation
-
-In order to manually install CoffeeComplete Plus, clone the repository into your Sublime Text 2 `Packages` directory, which can be located by navigating to Preferences -> Browse Packages. Name the directory `CoffeeComplete Plus (Autocompletion)`.
-
-For your convenience:
-
-```
-git clone https://github.com/justinmahar/SublimeCSAutocompletePlus.git "CoffeeComplete Plus (Autocompletion)"
-```
-
-Usage
------
-
-### Autocomplete
-
-Autocomplete can be triggered in coffee files by typing the dot `.` operator or the `@` symbol (which is shorthand for `this`) and then by pressing `ctrl+space`. The plugin will then try to figure out what you're doing and propose a list of suggestions.
-
-It is also possible to configure Sublime Text to trigger autocomplete automatically, without having to press `ctrl+space`. This is not part of the plugin as there may be other triggers from other plugins that might be overwritten, but it's easy to add! See [Customizing Autocomplete Trigger](#customizing-autocomplete-trigger) for how to do this.
-
-Example usage: Inside a class, you type `this.` and press `ctrl+space`. A list of the available methods and properties is presented.
-
-### Goto Definition
-
-Looking for where a class, function or variable was defined? Look no further.
-
-Place your cursor on any word and press `ctrl+alt+d` in Windows/Linux, and `ctrl+alt+d` in OS X, to goto the definition of the selected class, function or variable. Life's good.
-
-Alternatively, use `ctrl+alt` + `left click` in Windows/Linux, and `ctrl+alt` + `left click` in OS X.
-
-Features
---------
-
-### Autocomplete
-
-Autocomplete will make suggestions when you trigger autocomplete after a dot operator. It starts with the current view, then branches out to other coffee files. Because of this, most lookups are blazingly fast. You can configure CC+ to exclude certain directories and to only look in others. This will further increase speed as less searching will be needed.
-
-Autocomplete suggestions alphabetically show properties first, as indicated by a ○ symbol before each property name, followed by alphabetically sorted methods, as indicated by a ● symbol before each method name. Inherited properties and methods will be preceded by a Ⱶ symbol. This creates a nice visual breakdown of what you can do at any given time, and where things are coming from. Badass.
-
-For example:
-
- ○ property1
- ○ propertyTwo
- ○ someOtherProperty
- ● methodOne()
- ● methodTwo(arg1, arg2)
- ● theLastMethod(arg1, arg2, arg3)
- Ⱶ○ inheritedProperty1
- Ⱶ○ inheritedPropertyTwo
- Ⱶ● inheritedMethod1()
- Ⱶ● inheritedMethod2(arg1, arg2)
-
-Here are the main features. In the examples, `[autocomplete]` represents the user action of triggering autocomplete, which is typically `ctrl+space`.
-
-* Suggests instance properties and methods when operating on an instance.
-
- myLamp = new LavaLamp()
- # Suggests all instance properties and methods of LavaLamp.
- myLamp.[autocomplete]
-
-* Suggests static properties and methods when operating on a class.
-
- # Suggests all static properties and methods of LavaLamp.
- LavaLamp.[autocomplete]
-
-* Supports "this" keyword and any defined aliases.
-
- class LavaLamp
- heatUp: ->
- console.log "Heating up!"
- coolDown: ->
- console.log "Cooling down!"
- moveBlobs: ->
- # Suggests heatUp() and coolDown() methods
- this.[autocomplete]
-
-* Any variable assigned to `this` in the constructor will be considered an instance property.
-
- class LavaLamp
- constructor: (@color, size) ->
- this.size = size
- moveBlobs: ->
- # Suggests color, size and moveBlobs()
- this.[autocomplete]
-
-* Suggests super class properties and functions. This applies to both instance and static suggestions.
-
- # In the following example, we have a LavaLamp that extends Appliance.
- # Each class has static and non-static properties and methods.
- # Given the context, CC+ will suggest either static or non-static,
- # and will walk up the class hierarchy.
-
- class Appliance
- # Static
- @WARRANTY_YEARS = 10
- @calculateWarrantyExpiration: (currentYear) ->
- console.log "Expires: ", currentYear + Appliance.WARRANTY_YEARS
- # Non-static
- constructor: ->
- this.isSwitchedOn = False
- toggle: ->
- this.isSwitchedOn = !this.isSwitchedOn
-
- class LavaLamp extends Appliance
- # Static
- @BEST_COLOR = "Red"
- @isLampAwesome: (lamp) ->
- if lamp.color == LavaLamp.BEST_COLOR
- console.log "Definitely"
- else
- console.log "Probably"
- # Non-static
- constructor: (@color, size) ->
- this.size = size
-
- moveBlobs: ->
- # Suggests color, isSwitchedOn, size, moveBlobs(), toggle()
- this.[autocomplete]
-
- # Suggests WARRANTY_YEARS and calculateWarrantyExpiration(), which are static.
- Appliance.[autocomplete]
-
- # Suggests BEST_COLOR, WARRANTY_YEARS, calculateWarrantyExpiration(), and isLampAwesome()
- # These are all static properties from the complete class heirarchy.
- LavaLamp.[autocomplete]
-
-* After autocompleting a method, tab stops for parameters are provided (if applicable).
-* Expects that you don't suck at naming things. Will assume a class is UpperCamelCase and everything else is lowerCamelCase. It still works either way; it will just be faster if things are named properly.
-* For every 1 million autocompletions, a beautiful masseuse appears and gives you a massage. You must be tired after all that coding.
-
-### Support For Built-in Types
-
-CC+ now supports autocompletion for the following built-in types:
-
-* Array
-* Boolean
-* Date
-* Function
-* Number
-* Object
-* RegExp
-* String
-* JSON
-
-This makes life that much easier.
-
-In addition, autocomplete suggests inherited properties and methods from Object.
-
-### Custom Types
-
-If you find yourself using a third-party library often and would like to have autocompletions for that library, you can create custom type. This is essentially a collection of autocomplete suggestions. CC+ supports jQuery out of the box, but you can always add others. If you do add a custom type and would like to share it, please issue a pull request and I will add it to the plugin. If your library is used as function, like jQuery, you can map that function's return value to a type. See the configuration section for how to do this.
-
-### Type Hinting
-
-Document your code and you shall be rewarded in many ways. One of these way is autocompletion. Another of these ways is a warm, fuzzy feeling all over.
-
-CC+ can detect types using hints you provide it in comments. You can even add method headers with hints for parameters.
-
-* Variable assignment type hints
- - When you assign a variable, you can add a type hint that CC+ will use to look up the class autocompletions for you. This type must be in square brackets, and in a single-line `#` comment on either the same line or the previous line, in the form `[TYPENAME]`. Other text can surround the type hint.
-
-```
- # The [String] to add type hinting for
- myString = someObject.getSomething()
-
- # Now, CC+ knows that it's a String
- myString.[autocomplete]
-
- # Alternate way to add type hinting
- otherString = someObject.getSomethingElse() # It's a [String], son.
-```
-
-* Parameter type hints
- - If you use [Codo](https://github.com/netzpirat/codo), or are in the habit of documenting your classes, you can add type hints for your method parameters as well. These hints must be in a single-line `#` comment above the method signature. The hint can either be in the form `[TYPENAME] parameterName` or `parameterName [TYPENAME]`. Other text can surround the type hint.
-
-```
- # [Animal] critter
- # [Boolean] animalEscapes
- feedAlligator: (critter, animalEscapes) ->
- if animalEscapes
- # CC+ knows that it's an Animal. Will he escape? Autocomplete and choose his destiny!
- critter.[autocomplete]
-```
-
-* Method return type hints
- - If a variable is assigned to the return value of a method, type hinting can collected from that method. The method must have a single-line `#` comment on a previous line with the hint `@return [TYPE]`. This is a bonus convenience. Remember, you can always use the regular assignment type hinting mentioned above when assigning variables!
-
-```
- class Alligator
-
- # @return [Animal]
- getLastMeal: ->
- this.lastMeal
-
- rememberGoodTimes: ->
- critter = this.getLastMeal()
- # CC+ will detect your return type hint and display suggestions for type Animal
- console.log "I remember the time I ate a critter named " + critter.[autocomplete]
-
-```
-
-### Data-Hiding With Private Member Exclusion
-
-CoffeeScript doesn't provide an explicit way to hide properties and methods of a class. [According to Jeremy Ashkenas](https://groups.google.com/forum/#!topic/coffeescript/jgG7DhvyzzM), creator of coffeescript:
-
-> The norm in JavaScript is that hiding stuff is not that big of a deal, and you prefix private properties of an object with an underscore, as a convention.
-
-So, it's left up to you.
-
-Using an underscore is all well and fine until your autocomplete list is all cluttered up with things you're not supposed to see.
-
-CC+ to the rescue. You can define regular expressions to exclude any members of your choosing. By default, members starting with an underscore are not shown when working outside of a class (i.e., not using `this.`). See the configuration section for how to add/remove exclusions.
-
-### Goto Definition
-
-Goto Definition is useful for finding where a class, function, or variable was defined or declared. Again, searching is performed from the current view and branches out to other files if nothing is found. With this, you can quickly jump between classes and zoom to functions—even ones defined in other files—with ease.
-
-* Supports classes, functions and variable assignment.
-* Searches backwards from selected token for assignment, then forwards.
-* Considers variables declared in for loops.
-* Considers method parameters.
-* Tries to find something rather than nothing.
-* Includes both mouse and keyboard shortcuts for convenience. Code your way.
-
-### General
-
-* Asynchronous and fast lookups. That means no UI freezing while waiting for completions or Goto Definiton. Hate that.
-* You can configure directories to be be excluded from global .coffee search. **(recommended)**
-* You can configure the tool to only search in specific locations. **(recommended)**
-
-Default Key Bindings
---------------------
-
-### Windows/Linux:
-
-Autocomplete: `ctrl+space` (after a dot operator)
-
-Goto Definition: `ctrl+alt+d` or `ctrl+alt`+`left click`
-
-### Mac OS X:
-
-Autocomplete: `ctrl+space` (after a dot operator)
-
-Goto Definition: `ctrl+alt+d` or `ctrl+alt`+`left click`
-
-Key bindings can be changed by navigating to Preferences -> Package Settings -> CoffeeComplete Plus -> Key Bindings. It is not recommended that you change the Default settings as they will be overwritten by plugin updates. Instead, make your changes in User settings, which will override the Default settings.
-
-Configuration
--------------
-
-CoffeeComplete Plus has the following configurable settings:
-
-### User Settings
-
-These settings are accessible via `Preferences -> Settings — User`.
-
-#### Customizing Autocomplete Trigger
-
-* `auto_complete_triggers` — Characters that trigger the autocomplete menu.
-
- - Sublime allows for context-specific triggers for the autocompletion menus. This allows the menu to show as soon as `.` or `@` are pressed. To add triggers for CoffeeScript autocompletions, open `Preferences -> Settings — User` and use the following to make the desired changes:
-
-```
- "auto_complete_triggers":
- [
- {"characters": ".@", "selector": "source.coffee, source.litcoffee, source.coffee.md"}
- ]
-```
-
- - Note that other `auto_complete_triggers` settings may be present in `Preferences -> Settings — Default`. If this is the case, simply copy the `auto_complete_triggers` from the default file into your user settings, add a comma inside the square brackets, and paste the curly brace section above.
-
-### General CoffeeComplete Settings
-
-In `CoffeeComplete Plus.sublime-settings`:
-
-#### Excluded Directories
-
-* `coffee_autocomplete_plus_excluded_dirs` — Excluded directories.
- - Directories to exclude from searching for CoffeeScript classes, functions and variables. All directories in your project are searched except for the ones that match the names listed in this setting. **This is recommended.** Some excluded directories have already been specified in settings.
- - Expected value: Array of directory names.
- - Example:
-
-```
- "coffee_autocomplete_plus_excluded_dirs" : [".git", "SVN", "pub", "docs"]
-```
-
-#### Path Restrictions
-
-* `coffee_autocomplete_plus_restricted_to_paths` — Restrict searching to these directories.
- - Paths to restrict the search to. If one or more path is specified, searching will be restricted to `PATH_TO_PROJECT/your/defined/path`. For example, you specify `src/coffee`. Now, only `PROJECT_PATH/src/coffee` will be scanned. **This is recommended.** If `[]`, no restrictions are applied.
- - Expected value: Array of paths relative to your project directory.
- - Example:
-
-```
- "coffee_autocomplete_plus_restricted_to_paths" : ["src/coffee", "lib/src/coffee"]
-```
-
-#### Member Exclusion Patterns For Data Hiding
-
-* `coffee_autocomplete_plus_member_exclusion_regexes` — Regular expressions for members excluded from autocomplete suggestions.
- - CoffeeScript doesn't provide a mechanism for making members `private` in the traditional sense. Conventionally, private members are prefixed with an underscore `_`. This configuration setting allows you to define regular expressions for members you would like to exclude. By default, members beginning with an underscore are excluded.
- - Expected value: Array of Python regular expression strings.
- - Example:
-
-```
- "coffee_autocomplete_plus_member_exclusion_regexes": ["^_"] // Excludes members prefixed with underscore
-```
-
-#### Aliases For `this`
-
-* `coffee_autocomplete_plus_this_aliases` — Aliases for `this` keyword
- - Due to lexical scoping you sometimes need to assign an alias for `this`, such as `that` or `self`. Keep in mind, you can use a fat arrow `=>` to have CoffeeScript do this for you under the hood. Regardless, this config setting allows you to add or remove aliases that cause autocomplete to behave just like using `this` would. No futher searching—`this` will be assumed.
- - Expected value: Array of alias strings.
- - Example:
-
-```
- "coffee_autocomplete_plus_this_aliases" : ["that", "self"]
-```
-
-#### Mapped Function Return Types
-
-* `coffee_autocomplete_plus_function_return_types` — Mappings for the return types of special functions, like jQuery.
- - You may want to make calls directly off of the returned values of special functions. For example, when using jQuery, you might type `$(selector).` and want some autocomplete suggestions. If you have a custom type defined, you can map the returns of function names, like `$` and `jQuery`, to that custom type. See the next config section for defining custom types.
- - Expected value: Array of objects. Each object has a `function_names` property that maps to an array of string names, and a `type_name` property that maps to the string name of the type the functions return.
- - Example:
-
-```
- "coffee_autocomplete_plus_function_return_types":
- [
- {
- "function_names": ["$", "jQuery"],
- "type_name": "$"
- }
- ]
-```
-
-### Custom Types
-
-In `CoffeeComplete Plus Custom Types.sublime-settings`:
-
-* `coffee_autocomplete_plus_custom_types` -- Custom types, allowing libraries like jQuery.
- - If you would like to define custom types, put them here. Autocomplete will then make the defined suggestions for you. By default, a type for jQuery is defined.
- - Method arguments have a `name` property, and an option `insertion`, which will be the text that is actually inserted. For example, this is useful for inserting `->` syntax for callbacks.
- - Use the `enabled` property to enable or disable a custom type.
- - Use the following example as a starting point:
-
-```
- {
- "name": "MyType",
- "enabled": true,
- "constructors": [{"args": []}],
- "static_properties": [{"name": "CONSTANT_ONE"}, {"name": "CONSTANT_TWO"}],
- "static_methods":
- [
- {"name":"myStaticMethod", "args": [{"name": "arg1"}, {"name": "arg2"}]},
- {"name":"myStaticMethodTwo", "args": []}
- ],
- "instance_properties": [{"name": "thingOne"}, {"name": "thingTwo"}, {"name": "thingThree"}],
- "instance_methods":
- [
- {"name":"doStuffWithCallback", "args": [{"name": "numTimes"}, {"name": "callback()", "insertion": "->"}]},
- {"name":"doMoreStuff", "args": [{"name": "numTimes"}, {"name": "extraAmount"}]}
- ]
- }
-```
-
-### Built-In Types
-
-In `CoffeeComplete Plus Built-In Types.sublime-settings`:
-
-* `coffee_autocomplete_plus_built_in_types` -- Built-in types, like Object, Array, and String.
- - These are JavaScript's build-in types. These specs were gleaned from the [Mozilla MDN](https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects).
- - Any of the built-in types can be disabled, if you'd like. Change the `enabled` property to `false`.
-
-To configure these settings, open Preferences -> Package Settings -> CoffeeComplete Plus. It is not recommended that you change the Default settings as they will be overwritten by plugin updates. Instead, make your changes in User settings, which will override the Default settings.
-
-Limitations and Plans
----------------------
-
-> "Conceal a flaw, and the world will imagine the worst." — Marcus Aurelius, 16th Emperor of the Roman Empire
-
-Autocomplete is smart, but not Mensa smart. Under the hood, we're using regular expressions and lots of scanning. I coded this rather quickly, and it's my first plugin, so there may be (read: probably are) bugs. Please let me know if there are. As I build out functionality, I will try to fix its limitations.
-
-For now, here is the list of TBDs:
-
-* Clean up code. Make modular/reusable. First priority.
-* Constructor support
- - Add constructors to built-in types
-* Additional built-in types (Error, etc)
-* Optional parameter detection
- - Square brackets indicate optional params.
- - Example: `methodName(var1, optionalVar2="hey, I'm optional")` will autocomplete to `classInstance.methodName(var1, [optionalVar2])`
-* Fix issues
-* Goto Definition knows types of objects methods are called on. Right now, it makes a guess.
-* Support for built-in types when getting the return type for a method.
-
-Far too many times I've installed a plugin only to be disappointed because it fell short of my expectations. If you feel this way, please let me know how I can make this plugin better for you and I will do my best.
-
-Happy coding!
-
--Justin
-
-License
--------
-CoffeeComplete Plus is licensed under the MIT license.
-
-Copyright (c) 2013 Justin Mahar
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/CoffeeComplete Plus (Autocompletion)/coffee_utils.py b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/CoffeeComplete Plus (Autocompletion)/coffee_utils.py
deleted file mode 100644
index 7ecb524..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/CoffeeComplete Plus (Autocompletion)/coffee_utils.py
+++ /dev/null
@@ -1,1155 +0,0 @@
-import sublime
-import re
-import os
-
-# TODO:
-# - Document this file.
-# - Split out functionality where possible.
-
-# This file is what happens when you code non-stop for several days.
-# I tried to make the main files as easy to follow along as possible.
-# This file, not so much.
-
-# Set to true to enable debug output
-DEBUG = False
-
-SETTINGS_FILE_NAME = "CoffeeComplete Plus.sublime-settings"
-PREFERENCES_COFFEE_EXCLUDED_DIRS = "coffee_autocomplete_plus_excluded_dirs"
-PREFERENCES_COFFEE_RESTRICTED_TO_PATHS = "coffee_autocomplete_plus_restricted_to_paths"
-PREFERENCES_THIS_ALIASES = "coffee_autocomplete_plus_this_aliases"
-PREFERENCES_MEMBER_EXCLUSION_REGEXES = "coffee_autocomplete_plus_member_exclusion_regexes"
-BUILT_IN_TYPES_SETTINGS_FILE_NAME = "CoffeeComplete Plus Built-In Types.sublime-settings"
-BUILT_IN_TYPES_SETTINGS_KEY = "coffee_autocomplete_plus_built_in_types"
-CUSTOM_TYPES_SETTINGS_FILE_NAME = "CoffeeComplete Plus Custom Types.sublime-settings"
-CUSTOM_TYPES_SETTINGS_KEY = "coffee_autocomplete_plus_custom_types"
-FUNCTION_RETURN_TYPES_SETTINGS_KEY = "coffee_autocomplete_plus_function_return_types"
-FUNCTION_RETURN_TYPE_TYPE_NAME_KEY = "type_name"
-FUNCTION_RETURN_TYPE_FUNCTION_NAMES_KEY = "function_names"
-
-COFFEESCRIPT_SYNTAX = r"CoffeeScript"
-COFFEE_EXTENSION_WITH_DOT = "\.coffee|\.litcoffee|\.coffee\.md"
-CONSTRUCTOR_KEYWORDS = ["constructor", "initialize", "init"]
-THIS_SUGAR_SYMBOL = "@"
-THIS_KEYWORD = "this"
-PERIOD_OPERATOR = "."
-COFFEE_FILENAME_REGEX = r".+?" + re.escape(COFFEE_EXTENSION_WITH_DOT)
-CLASS_REGEX = r"class\s+%s((\s*$)|[^a-zA-Z0-9_$])"
-CLASS_REGEX_ANY = r"class\s+([a-zA-Z0-9_$]+)((\s*$)|[^a-zA-Z0-9_$])"
-CLASS_REGEX_WITH_EXTENDS = r"class\s+%s\s*($|(\s+extends\s+([a-zA-Z0-9_$.]+)))"
-SINGLE_LINE_COMMENT_REGEX = r"#.*?$"
-TYPE_HINT_COMMENT_REGEX = r"#.*?\[([a-zA-Z0-9_$]+)\].*$"
-TYPE_HINT_PARAMETER_COMMENT_REGEX = r"#.*?(\[([a-zA-Z0-9_$]+)\]\s*{var_name}((\s*$)|[^a-zA-Z0-9_$]))|({var_name}\s*\[([a-zA-Z0-9_$]+)\]((\s*$)|[^a-zA-Z0-9_$]))"
-# Function regular expression. Matches:
-# methodName = (aas,bsa, casd ) ->
-FUNCTION_REGEX = r"(^|[^a-zA-Z0-9_$])(%s)\s*[:]\s*(\((.*?)\))?\s*[=\-]>"
-FUNCTION_REGEX_ANY = r"(^|[^a-zA-Z0-9_$])(([a-zA-Z0-9_$]+))\s*[:]\s*(\((.*?)\))?\s*[=\-]>"
-# Assignment regular expression. Matches:
-# asdadasd =
-ASSIGNMENT_REGEX = r"(^|[^a-zA-Z0-9_$])%s\s*="
-# Static assignment regex
-STATIC_ASSIGNMENT_REGEX = r"^\s*([@]|(this\s*[.]))\s*([a-zA-Z0-9_$]+)\s*[:=]"
-# Static function regex
-STATIC_FUNCTION_REGEX = r"(^|[^a-zA-Z0-9_$])\s*([@]|(this\s*[.]))\s*([a-zA-Z0-9_$]+)\s*[:]\s*(\((.*?)\))?\s*[=\-]>"
-# Regex for finding a function parameter. Call format on the string, with name=var_name
-PARAM_REGEX = r"\(\s*(({name})|({name}\s*=?.*?[,].*?)|(.*?[,]\s*{name}\s*=?.*?[,].*?)|(.*?[,]\s*{name}))\s*=?.*?\)\s*[=\-]>"
-# Regex for finding a variable declared in a for loop.
-FOR_LOOP_REGEX = r"for\s*.*?[^a-zA-Z0-9_$]%s[^a-zA-Z0-9_$]"
-# Regex for constructor @ params, used for type hinting.
-CONSTRUCTOR_SELF_ASSIGNMENT_PARAM_REGEX = r"(?:(?:constructor)|(?:initialize)|(?:init))\s*[:]\s*\(\s*((@{name})|(@{name}\s*[,].*?)|(.*?[,]\s*@{name}\s*[,].*?)|(.*?[,]\s*@{name}))\s*\)\s*[=\-]>\s*$"
-
-# Assignment with the value it's being assigned to. Matches:
-# blah = new Dinosaur()
-ASSIGNMENT_VALUE_WITH_DOT_REGEX = r"(^|[^a-zA-Z0-9_$])%s\s*=\s*(.*)"
-ASSIGNMENT_VALUE_WITHOUT_DOT_REGEX = r"(^|[^a-zA-Z0-9_$.])%s\s*=\s*(.*)"
-
-# Used to determining what class is being created with the new keyword. Matches:
-# new Macaroni
-NEW_OPERATION_REGEX = r"new\s+([a-zA-Z0-9_$.]+)"
-
-PROPERTY_INDICATOR = u'\u25CB'
-METHOD_INDICATOR = u'\u25CF'
-INHERITED_INDICATOR = u'\u2C75'
-
-BUILT_IN_TYPES_TYPE_NAME_KEY = "name"
-BUILT_IN_TYPES_TYPE_ENABLED_KEY = "enabled"
-BUILT_IN_TYPES_CONSTRUCTOR_KEY = "constructor"
-BUILT_IN_TYPES_STATIC_PROPERTIES_KEY = "static_properties"
-BUILT_IN_TYPES_STATIC_PROPERTY_NAME_KEY = "name"
-BUILT_IN_TYPES_STATIC_METHODS_KEY = "static_methods"
-BUILT_IN_TYPES_STATIC_METHOD_NAME_KEY = "name"
-BUILT_IN_TYPES_INSTANCE_PROPERTIES_KEY = "instance_properties"
-BUILT_IN_TYPES_INSTANCE_PROPERTY_NAME_KEY = "name"
-BUILT_IN_TYPES_INSTANCE_METHODS_KEY = "instance_methods"
-BUILT_IN_TYPES_INSTANCE_METHOD_NAME_KEY = "name"
-BUILT_IN_TYPES_METHOD_NAME_KEY = "name"
-BUILT_IN_TYPES_METHOD_INSERTION_KEY = "insertion"
-BUILT_IN_TYPES_METHOD_ARGS_KEY = "args"
-BUILT_IN_TYPES_METHOD_ARG_NAME_KEY = "name"
-BUILT_IN_TYPES_INHERITS_FROM_OBJECT_KEY = "inherits_from_object"
-
-
-# Utility functions
-def debug(message):
- if DEBUG:
- print message
-
-
-def select_current_word(view):
- if len(view.sel()) > 0:
- selected_text = view.sel()[0]
- word_region = view.word(selected_text)
- view.sel().clear()
- view.sel().add(word_region)
-
-
-def get_selected_word(view):
- word = ""
- if len(view.sel()) > 0:
- selected_text = view.sel()[0]
- word_region = view.word(selected_text)
- word = get_word_at(view, word_region)
- return word
-
-
-def get_word_at(view, region):
- word = ""
- word_region = view.word(region)
- word = view.substr(word_region)
- word = re.sub(r'[^a-zA-Z0-9_$]', '', word)
- word = word.strip()
- return word
-
-
-def get_token_at(view, region):
- token = ""
- if len(view.sel()) > 0:
- selected_line = view.line(region)
- preceding_text = view.substr(sublime.Region(selected_line.begin(), region.begin())).strip()
- token_regex = r"[^a-zA-Z0-9_$.@]*?([a-zA-Z0-9_$.@]+)$"
- match = re.search(token_regex, preceding_text)
- if match:
- token = match.group(1)
- token = token.strip()
- return token
-
-
-def get_preceding_symbol(view, prefix, locations):
- index = locations[0]
- symbol_region = sublime.Region(index - 1 - len(prefix), index - len(prefix))
- symbol = view.substr(symbol_region)
- return symbol
-
-
-def get_preceding_function_call(view):
- function_call = ""
- if len(view.sel()) > 0:
- selected_text = view.sel()[0]
- selected_line = view.line(sublime.Region(selected_text.begin() - 1, selected_text.begin() - 1))
- preceding_text = view.substr(sublime.Region(selected_line.begin(), selected_text.begin() - 1)).strip()
- function_call_regex = r".*?([a-zA-Z0-9_$]+)\s*\(.*?\)"
- match = re.search(function_call_regex, preceding_text)
- if match:
- function_call = match.group(1)
- return function_call
-
-
-def get_preceding_token(view):
- token = ""
- if len(view.sel()) > 0:
- selected_text = view.sel()[0]
- if selected_text.begin() > 2:
- token_region = sublime.Region(selected_text.begin() - 1, selected_text.begin() - 1)
- token = get_token_at(view, token_region)
- return token
-
-
-# Complete this.
-def get_preceding_call_chain(view):
- word = ""
- if len(view.sel()) > 0:
- selected_text = view.sel()[0]
- selected_text = view.sel()[0]
- selected_line = view.line(sublime.Region(selected_text.begin() - 1, selected_text.begin() - 1))
- preceding_text = view.substr(sublime.Region(selected_line.begin(), selected_text.begin() - 1)).strip()
- function_call_regex = r".*?([a-zA-Z0-9_$]+)\s*\(.*?\)"
- match = re.search(function_call_regex, preceding_text)
- if match:
- #function_call = match.group(1)
- pass
- return word
-
-
-def is_capitalized(word):
- capitalized = False
- # Underscores are sometimes used to indicate an internal property, so we
- # find the first occurrence of an a-zA-Z character. If not found, we assume lowercase.
- az_word = re.sub("[^a-zA-Z]", "", word)
- if len(az_word) > 0:
- first_letter = az_word[0]
- capitalized = first_letter.isupper()
-
- # Special case for $
- capitalized = capitalized | word.startswith("$")
-
- return capitalized
-
-
-def get_files_in(directory_list, filename_regex, excluded_dirs):
- files = []
- for next_directory in directory_list:
- # http://docs.python.org/2/library/os.html?highlight=os.walk#os.walk
- for path, dirs, filenames in os.walk(next_directory):
- # print str(path)
- for next_excluded_dir in excluded_dirs:
- try:
- dirs.remove(next_excluded_dir)
- except:
- pass
- for next_file_name in filenames:
- # http://docs.python.org/2/library/re.html
- match = re.search(filename_regex, next_file_name)
- if match:
- # http://docs.python.org/2/library/os.path.html?highlight=os.path.join#os.path.join
- next_full_path = os.path.join(path, next_file_name)
- files.append(next_full_path)
- return files
-
-
-def get_lines_for_file(file_path):
- lines = []
- try:
- # http://docs.python.org/2/tutorial/inputoutput.html
- opened_file = open(file_path, "r") # r = read only
- lines = opened_file.readlines()
- except:
- pass
- return lines
-
-
-# Returns a tuple with (row, column, match, row_start_index), or None
-def get_positions_of_regex_match_in_file(file_lines, regex):
- found_a_match = False
- matched_row = -1
- matched_column = -1
- match_found = None
- line_start_index = -1
-
- current_row = 0
-
- current_line_start_index = 0
- for next_line in file_lines:
- # Remove comments
- modified_next_line = re.sub(SINGLE_LINE_COMMENT_REGEX, "", next_line)
- match = re.search(regex, modified_next_line)
- if match:
- found_a_match = True
- matched_row = current_row
- matched_column = match.end()
- match_found = match
- line_start_index = current_line_start_index
- break
- current_row = current_row + 1
- current_line_start_index = current_line_start_index + len(next_line)
-
- positions_tuple = None
- if found_a_match:
- positions_tuple = (matched_row, matched_column, match_found, line_start_index)
-
- return positions_tuple
-
-
-def open_file_at_position(window, file_path, row, column):
- # Beef
- # http://www.sublimetext.com/docs/2/api_reference.html#sublime.Window
- path_with_position_encoding = file_path + ":" + str(row) + ":" + str(column)
- window.open_file(path_with_position_encoding, sublime.ENCODED_POSITION)
- return
-
-
-# Returns a tuple with (file_path, row, column, match, row_start_index)
-def find_location_of_regex_in_files(contents_regex, local_file_lines, global_file_path_list=[]):
- # The match tuple containing the filename and positions.
- # Will be returned as None if no matches are found.
- file_match_tuple = None
-
- if local_file_lines:
- # Search the file for the regex.
- positions_tuple = get_positions_of_regex_match_in_file(local_file_lines, contents_regex)
- if positions_tuple:
- # We've found a match! Save the file path plus the positions and the match itself
- file_match_tuple = tuple([None]) + positions_tuple
-
- # If we are to search globally...
- if not file_match_tuple and global_file_path_list:
- for next_file_path in global_file_path_list:
- if next_file_path:
- file_lines = get_lines_for_file(next_file_path)
- # Search the file for the regex.
- positions_tuple = get_positions_of_regex_match_in_file(file_lines, contents_regex)
- if positions_tuple:
- # We've found a match! Save the file path plus the positions and the match itself
- file_match_tuple = tuple([next_file_path]) + positions_tuple
- # Stop the for loop
- break
- return file_match_tuple
-
-
-def select_region_in_view(view, region):
- view.sel().clear()
- view.sel().add(region)
- # Refresh hack.
- original_position = view.viewport_position()
- view.set_viewport_position((original_position[0], original_position[1] + 1))
- view.set_viewport_position(original_position)
-
-
-def get_progress_indicator_tuple(previous_indicator_tuple):
- STATUS_MESSAGE_PROGRESS_INDICATOR = "[%s=%s]"
- if not previous_indicator_tuple:
- previous_indicator_tuple = ("", 0, 1)
- progress_indicator_position = previous_indicator_tuple[1]
- progress_indicator_direction = previous_indicator_tuple[2]
- # This animates a little activity indicator in the status area.
- # It animates an equals symbol bouncing back and fourth between square brackets.
- # We calculate the padding around the equal based on the last known position.
- num_spaces_before = progress_indicator_position % 8
- num_spaces_after = (7) - num_spaces_before
- # When the equals hits the edge, we change directions.
- # Direction is -1 for moving left and 1 for moving right.
- if not num_spaces_after:
- progress_indicator_direction = -1
- if not num_spaces_before:
- progress_indicator_direction = 1
- progress_indicator_position += progress_indicator_direction
- padding_before = ' ' * num_spaces_before
- padding_after = ' ' * num_spaces_after
- # Create the progress indication text
- progress_indicator_text = STATUS_MESSAGE_PROGRESS_INDICATOR % (padding_before, padding_after)
- # Return the progress indication tuple
- return (progress_indicator_text, progress_indicator_position, progress_indicator_direction)
-
-
-def get_syntax_name(view):
- syntax = os.path.splitext(os.path.basename(view.settings().get('syntax')))[0]
- return syntax
-
-
-def is_coffee_syntax(view):
- return bool(re.match(COFFEESCRIPT_SYNTAX, get_syntax_name(view)))
-
-
-def get_this_type(file_lines, start_region):
-
- type_found = None
- # Search backwards from current position for the type
- # We're looking for a class definition
- class_regex = CLASS_REGEX_ANY
-
- match_tuple = search_backwards_for(file_lines, class_regex, start_region)
- if match_tuple:
- # debug(str(match_tuple[0]) + ", " + str(match_tuple[1]) + ", " + match_tuple[2].group(1))
- type_found = match_tuple[2].group(1)
- else:
- debug("No match!")
-
- return type_found
-
-
-def get_variable_type(file_lines, token, start_region, global_file_path_list, built_in_types, previous_variable_names=[]):
-
- type_found = None
-
- # Check for "this"
- if token == "this":
- type_found = get_this_type(file_lines, start_region)
- elif token.startswith("@"):
- token = "this." + token[1:]
-
- # We're looking for a variable assignent
- assignment_regex = ASSIGNMENT_VALUE_WITH_DOT_REGEX % token
-
- # print "Assignment regex: " + assignment_regex
-
- # Search backwards from current position for the type
- if not type_found:
- match_tuple = search_backwards_for(file_lines, assignment_regex, start_region)
- if match_tuple:
- type_found = get_type_from_assignment_match_tuple(token, match_tuple, file_lines, previous_variable_names)
- # Well, we found the assignment. But we don't know what it is.
- # Let's try to find a variable name and get THAT variable type...
- if not type_found:
- type_found = get_type_from_assigned_variable_name(file_lines, token, match_tuple, global_file_path_list, built_in_types, previous_variable_names)
-
- # Let's try searching backwards for parameter hints in comments...
- if not type_found:
- # The regex used to search for the variable as a parameter in a method
- param_regex = PARAM_REGEX.format(name=re.escape(token))
- match_tuple = search_backwards_for(file_lines, param_regex, start_region)
- # We found the variable! it's a parameter. Let's find a comment with a type hint.
- if match_tuple:
- type_found = get_type_from_parameter_match_tuple(token, match_tuple, file_lines, previous_variable_names)
-
- # If backwards searching isn't working, at least try to find something...
- if not type_found:
- # Forward search from beginning for assignment:
- match_tuple = get_positions_of_regex_match_in_file(file_lines, assignment_regex)
- if match_tuple:
- type_found = get_type_from_assignment_match_tuple(token, match_tuple, file_lines, previous_variable_names)
- if not type_found:
- type_found = get_type_from_assigned_variable_name(file_lines, token, match_tuple, global_file_path_list, built_in_types, previous_variable_names)
-
- # If still nothing, maybe it's an @ parameter in the constructor?
- if not type_found:
-
- # Get the last word in the chain, if it's a chain.
- # E.g. Get variableName from this.variableName.[autocomplete]
- selected_word = token[token.rfind(".") + 1:]
-
- if token.startswith(THIS_KEYWORD + ".") or token.startswith(THIS_SUGAR_SYMBOL):
-
- # The regex used to search for the variable as a parameter in a method
- param_regex = CONSTRUCTOR_SELF_ASSIGNMENT_PARAM_REGEX.format(name=re.escape(selected_word))
-
- # Forward search from beginning for param:
- match_tuple = get_positions_of_regex_match_in_file(file_lines, param_regex)
- # We found the variable! it's a parameter. Let's find a comment with a type hint.
- if match_tuple:
- type_found = get_type_from_parameter_match_tuple(selected_word, match_tuple, file_lines)
-
- if not type_found:
- # Find something. Anything!
- word_assignment_regex = ASSIGNMENT_VALUE_WITHOUT_DOT_REGEX % selected_word
-
- # Forward search from beginning for assignment:
- match_tuple = get_positions_of_regex_match_in_file(file_lines, word_assignment_regex)
- if match_tuple:
- type_found = get_type_from_assignment_match_tuple(token, match_tuple, file_lines, previous_variable_names)
- if not type_found:
- type_found = get_type_from_assigned_variable_name(file_lines, token, match_tuple, global_file_path_list, built_in_types, previous_variable_names)
-
- return type_found
-
-
-def get_type_from_assigned_variable_name(file_lines, token, match_tuple, global_file_path_list, built_in_types, previous_variable_names=[]):
-
- type_found = None
-
- assignment_value_string = match_tuple[2].group(2).strip()
- # row start index + column index
- token_index = match_tuple[3] + match_tuple[1]
- token_region = sublime.Region(token_index, token_index)
- token_match = re.search(r"^([a-zA-Z0-9_$.]+)$", assignment_value_string)
- if token_match:
- next_token = token_match.group(1)
- if next_token not in previous_variable_names:
- previous_variable_names.append(token)
- type_found = get_variable_type(file_lines, next_token, token_region, global_file_path_list, built_in_types, previous_variable_names)
-
- # Determine what type a method returns
- if not type_found:
- # print "assignment_value_string: " + assignment_value_string
- method_call_regex = r"([a-zA-Z0-9_$.]+)\s*[.]\s*([a-zA-Z0-9_$]+)\s*\("
- method_call_match = re.search(method_call_regex, assignment_value_string)
- if method_call_match:
- object_name = method_call_match.group(1)
- method_name = method_call_match.group(2)
- object_type = get_variable_type(file_lines, object_name, token_region, global_file_path_list, built_in_types, previous_variable_names)
- if object_type:
- type_found = get_return_type_for_method(object_type, method_name, file_lines, global_file_path_list, built_in_types)
-
- return type_found
-
-
-def get_return_type_for_method(object_type, method_name, file_lines, global_file_path_list, built_in_types):
-
- type_found = None
-
- next_class_to_scan = object_type
-
- # Search the class and all super classes
- while next_class_to_scan and not type_found:
-
- class_regex = CLASS_REGEX % re.escape(next_class_to_scan)
- # (file_path, row, column, match, row_start_index)
- class_location_search_tuple = find_location_of_regex_in_files(class_regex, file_lines, global_file_path_list)
- if class_location_search_tuple:
-
- file_found = class_location_search_tuple[0]
-
- # Consider if it was found locally, in the view
- if not file_found:
- class_file_lines = file_lines
- else:
- class_file_lines = get_lines_for_file(file_found)
-
- # If found, search for the method in question.
- method_regex = FUNCTION_REGEX % re.escape(method_name)
- positions_tuple = get_positions_of_regex_match_in_file(class_file_lines, method_regex)
- # (row, column, match, row_start_index)
- if positions_tuple:
- # Check for comments, and hopefully the return hint, on previous rows.
- matched_row = positions_tuple[0]
- row_to_check_index = matched_row - 1
-
- non_comment_code_reached = False
- while not non_comment_code_reached and row_to_check_index >= 0 and not type_found:
- current_row_text = class_file_lines[row_to_check_index]
-
- # Make sure this line only contains comments.
- mod_line = re.sub(SINGLE_LINE_COMMENT_REGEX, "", current_row_text).strip()
- # If it wasn't just a comment line...
- if len(mod_line) > 0:
- non_comment_code_reached = True
- else:
- # Search for hint: @return [TYPE]
- return_type_hint_regex = r"@return\s*\[([a-zA-Z0-9_$]+)\]"
- hint_match = re.search(return_type_hint_regex, current_row_text)
- if hint_match:
- # We found it!
- type_found = hint_match.group(1)
- row_to_check_index = row_to_check_index - 1
-
- # If nothing was found, see if the class extends another one and is inheriting the method.
- if not type_found:
- extends_regex = CLASS_REGEX_WITH_EXTENDS % next_class_to_scan
- # (row, column, match, row_start_index)
- extends_match_positions = get_positions_of_regex_match_in_file(class_file_lines, extends_regex)
- if extends_match_positions:
- extends_match = extends_match_positions[2]
- next_class_to_scan = extends_match.group(3)
- else:
- next_class_to_scan = None
- return type_found
-
-
-def get_type_from_assignment_match_tuple(variable_name, match_tuple, file_lines, previous_variable_names=[]):
-
- type_found = None
- if match_tuple:
- match = match_tuple[2]
- assignment_value_string = match.group(2)
- # Check for a type hint on current row or previous row.
- # These will override anything else.
- matched_row = match_tuple[0]
- previous_row = matched_row - 1
- current_row_text = file_lines[matched_row]
- hint_match = re.search(TYPE_HINT_COMMENT_REGEX, current_row_text)
- if hint_match:
- type_found = hint_match.group(1)
- if not type_found and previous_row >= 0:
- previous_row_text = file_lines[previous_row]
- hint_match = re.search(TYPE_HINT_COMMENT_REGEX, previous_row_text)
- if hint_match:
- type_found = hint_match.group(1)
- if not type_found:
- assignment_value_string = re.sub(SINGLE_LINE_COMMENT_REGEX, "", assignment_value_string).strip()
- type_found = get_type_from_assignment_value(assignment_value_string)
- return type_found
-
-
-def get_type_from_parameter_match_tuple(variable_name, match_tuple, file_lines, previous_variable_names=[]):
-
- type_found = None
- if match_tuple:
- # Check for comments, and hopefully type hints, on previous rows.
- matched_row = match_tuple[0]
- row_to_check_index = matched_row - 1
-
- non_comment_code_reached = False
- while not non_comment_code_reached and row_to_check_index >= 0 and not type_found:
- current_row_text = file_lines[row_to_check_index]
-
- # Make sure this line only contains comments.
- mod_line = re.sub(SINGLE_LINE_COMMENT_REGEX, "", current_row_text).strip()
- # If it wasn't just a comment line...
- if len(mod_line) > 0:
- non_comment_code_reached = True
- else:
- # It's a comment. Let's look for a type hint in the form:
- # variable_name [TYPE] ~OR~ [TYPE] variable_name
- hint_regex = TYPE_HINT_PARAMETER_COMMENT_REGEX.format(var_name=re.escape(variable_name))
- hint_match = re.search(hint_regex, current_row_text)
- if hint_match:
- # One of these two groups contains the type...
- if hint_match.group(2):
- type_found = hint_match.group(2)
- else:
- type_found = hint_match.group(6)
- row_to_check_index = row_to_check_index - 1
- return type_found
-
-
-def get_type_from_assignment_value(assignment_value_string):
- determined_type = None
-
- assignment_value_string = assignment_value_string.strip()
-
- # Check for built in types
- object_regex = r"^\{.*\}$"
- if not determined_type:
- match = re.search(object_regex, assignment_value_string)
- if match:
- determined_type = "Object"
- double_quote_string_regex = r"(^\".*\"$)|(^.*?\+\s*\".*?\"$)|(^\".*?\"\s*\+.*?$)|(^.*?\s*\+\s*\".*?\"\s*\+\s*.*?$)"
- if not determined_type:
- match = re.search(double_quote_string_regex, assignment_value_string)
- if match:
- determined_type = "String"
- single_quote_string_regex = r"(^['].*[']$)|(^.*?\+\s*['].*?[']$)|(^['].*?[']\s*\+.*?$)|(^.*?\s*\+\s*['].*?[']\s*\+\s*.*?$)"
- if not determined_type:
- match = re.search(single_quote_string_regex, assignment_value_string)
- if match:
- determined_type = "String"
- array_regex = r"^\[.*\]\s*$"
- if not determined_type:
- match = re.search(array_regex, assignment_value_string)
- if match:
- determined_type = "Array"
- boolean_regex = r"^(true)|(false)$"
- if not determined_type:
- match = re.search(boolean_regex, assignment_value_string)
- if match:
- determined_type = "Boolean"
- # http://stackoverflow.com/questions/4703390/how-to-extract-a-floating-number-from-a-string-in-python
- number_regex = r"^[-+]?\d*\.\d+|\d+$"
- if not determined_type:
- match = re.search(number_regex, assignment_value_string)
- if match:
- determined_type = "Number"
- regexp_regex = r"^/.*/[a-z]*$"
- if not determined_type:
- match = re.search(regexp_regex, assignment_value_string)
- if match:
- determined_type = "RegExp"
- new_operation_regex = NEW_OPERATION_REGEX
- if not determined_type:
- match = re.search(new_operation_regex, assignment_value_string)
- if match:
- determined_type = get_class_from_end_of_chain(match.group(1))
-
- return determined_type
-
-
-# Tuple returned: (matched_row, matched_column, match, row_start_index)
-def search_backwards_for(file_lines, regex, start_region):
-
- matched_row = -1
- matched_column = -1
- match_found = None
- row_start_index = -1
-
- start_index = start_region.begin()
- # debug("start: " + str(start_index))
- characters_consumed = 0
- start_line = -1
- indentation_size = 0
- current_line_index = 0
- for next_line in file_lines:
- # Find the line we're starting on...
- offset = start_index - characters_consumed
- if offset <= len(next_line) + 1:
- # debug("Start line: " + next_line)
- characters_consumed = characters_consumed + len(next_line)
- indentation_size = get_indentation_size(next_line)
- start_line = current_line_index
- break
-
- characters_consumed = characters_consumed + len(next_line)
- current_line_index = current_line_index + 1
-
- row_start_index = characters_consumed
-
- if start_line >= 0:
- # debug("start line: " + str(start_line))
- # Go backwards, searching for the class definition.
- for i in reversed(range(start_line + 1)):
- previous_line = file_lines[i]
- # print "Next line: " + previous_line[:-1]
- row_start_index = row_start_index - len(previous_line)
- # debug("Line " + str(i) + ": " + re.sub("\n", "", previous_line))
- # Returns -1 for empty lines or lines with comments only.
- next_line_indentation = get_indentation_size(previous_line)
- #debug("Seeking <= indentation_size: " + str(indentation_size) + ", Current: " + str(next_line_indentation))
- # Ignore lines with larger indentation sizes and empty lines (or lines with comments only)
- if next_line_indentation >= 0 and next_line_indentation <= indentation_size:
- indentation_size = next_line_indentation
- # Check for the class
- match = re.search(regex, previous_line)
- if match:
- matched_row = i
- matched_column = match.end()
- match_found = match
- break
- match_tuple = None
- if match_found:
- match_tuple = (matched_row, matched_column, match_found, row_start_index)
- return match_tuple
-
-
-def get_indentation_size(line_of_text):
- size = -1
- mod_line = re.sub("\n", "", line_of_text)
- mod_line = re.sub(SINGLE_LINE_COMMENT_REGEX, "", mod_line)
- # If it wasn't just a comment line...
- if len(mod_line.strip()) > 0:
- mod_line = re.sub(r"[^\t ].*", "", mod_line)
- size = len(mod_line)
- # debug("Indent size [" + str(size) + "]:\n" + re.sub("\n", "", line_of_text))
- return size
-
-
-def get_completions_for_class(class_name, search_statically, local_file_lines, prefix, global_file_path_list, built_in_types, member_exclusion_regexes, show_private):
-
- # TODO: Use prefix to make suggestions.
-
- completions = []
- scanned_classes = []
- original_class_name_found = False
-
- function_completions = []
- object_completions = []
-
- # First, determine if it is a built in type and return those completions...
- # Built-in types include String, Number, etc, and are configurable in settings.
- for next_built_in_type in built_in_types:
- try:
- if next_built_in_type[BUILT_IN_TYPES_TYPE_ENABLED_KEY]:
- next_class_name = next_built_in_type[BUILT_IN_TYPES_TYPE_NAME_KEY]
- if next_class_name == class_name:
- # We are looking at a built-in type! Collect completions for it...
- completions = get_completions_for_built_in_type(next_built_in_type, search_statically, False, member_exclusion_regexes)
- original_class_name_found = True
- elif next_class_name == "Function" and not function_completions:
- function_completions = get_completions_for_built_in_type(next_built_in_type, False, True, member_exclusion_regexes)
- elif next_class_name == "Object" and not object_completions:
- object_completions = get_completions_for_built_in_type(next_built_in_type, False, True, member_exclusion_regexes)
- except Exception, e:
- print repr(e)
-
- # If we didn't find completions for a built-in type, look further...
- if not completions:
- current_class_name = class_name
- is_inherited = False
- while current_class_name and current_class_name not in scanned_classes:
- # print "Scanning " + current_class_name + "..."
- # (class_found, completions, next_class_to_scan)
- completion_tuple = (False, [], None)
- if local_file_lines:
- # print "Searching locally..."
- # Search in local file.
- if search_statically:
- completion_tuple = collect_static_completions_from_file(local_file_lines, current_class_name, is_inherited, member_exclusion_regexes, show_private)
- else:
- completion_tuple = collect_instance_completions_from_file(local_file_lines, current_class_name, is_inherited, member_exclusion_regexes, show_private)
-
- # Search globally if nothing found and not local only...
- if global_file_path_list and (not completion_tuple or not completion_tuple[0]):
- class_regex = CLASS_REGEX % re.escape(current_class_name)
- global_class_location_search_tuple = find_location_of_regex_in_files(class_regex, None, global_file_path_list)
- if global_class_location_search_tuple:
- # If found, perform Class method collection.
- file_to_open = global_class_location_search_tuple[0]
- class_file_lines = get_lines_for_file(file_to_open)
- if search_statically:
- completion_tuple = collect_static_completions_from_file(class_file_lines, current_class_name, is_inherited, member_exclusion_regexes, show_private)
- else:
- completion_tuple = collect_instance_completions_from_file(class_file_lines, current_class_name, is_inherited, member_exclusion_regexes, show_private)
-
- if current_class_name == class_name and completion_tuple[0]:
- original_class_name_found = True
-
- # print "Tuple: " + str(completion_tuple)
- completions.extend(completion_tuple[1])
- scanned_classes.append(current_class_name)
- current_class_name = completion_tuple[2]
- is_inherited = True
-
- if original_class_name_found:
- # Add Object completions (if available) -- Everything is an Object
- completions.extend(object_completions)
- if search_statically:
- completions.extend(function_completions)
-
- # Remove all duplicates
- completions = list(set(completions))
- # Sort
- completions.sort()
- return completions
-
-
-def case_insensitive_startswith(original_string, prefix):
- return original_string.lower().startswith(prefix.lower())
-
-
-def get_completions_for_built_in_type(built_in_type, is_static, is_inherited, member_exclusion_regexes):
- completions = []
- if is_static:
- static_properties = []
- static_property_objs = built_in_type[BUILT_IN_TYPES_STATIC_PROPERTIES_KEY]
- for next_static_property_obj in static_property_objs:
- next_static_property = next_static_property_obj[BUILT_IN_TYPES_STATIC_PROPERTY_NAME_KEY]
- if not is_member_excluded(next_static_property, member_exclusion_regexes):
- static_properties.append(next_static_property)
- for next_static_property in static_properties:
- next_completion = get_property_completion_tuple(next_static_property, is_inherited)
- completions.append(next_completion)
-
- static_methods = built_in_type[BUILT_IN_TYPES_STATIC_METHODS_KEY]
- for next_static_method in static_methods:
- method_name = next_static_method[BUILT_IN_TYPES_METHOD_NAME_KEY]
- if not is_member_excluded(method_name, member_exclusion_regexes):
- method_args = []
- method_insertions = []
- method_args_objs = next_static_method[BUILT_IN_TYPES_METHOD_ARGS_KEY]
- for next_method_arg_obj in method_args_objs:
- method_arg = next_method_arg_obj[BUILT_IN_TYPES_METHOD_ARG_NAME_KEY]
- method_args.append(method_arg)
- method_insertion = method_arg
- try:
- method_insertion = next_method_arg_obj[BUILT_IN_TYPES_METHOD_INSERTION_KEY]
- except:
- pass
- method_insertions.append(method_insertion)
- next_completion = get_method_completion_tuple(method_name, method_args, method_insertions, is_inherited)
- completions.append(next_completion)
- else:
- instance_properties = []
- instance_property_objs = built_in_type[BUILT_IN_TYPES_INSTANCE_PROPERTIES_KEY]
- for next_instance_property_obj in instance_property_objs:
- next_instance_property = next_instance_property_obj[BUILT_IN_TYPES_INSTANCE_PROPERTY_NAME_KEY]
- if not is_member_excluded(next_instance_property, member_exclusion_regexes):
- instance_properties.append(next_instance_property_obj[BUILT_IN_TYPES_INSTANCE_PROPERTY_NAME_KEY])
- for next_instance_property in instance_properties:
- next_completion = get_property_completion_tuple(next_instance_property, is_inherited)
- completions.append(next_completion)
-
- instance_methods = built_in_type[BUILT_IN_TYPES_INSTANCE_METHODS_KEY]
- for next_instance_method in instance_methods:
- method_name = next_instance_method[BUILT_IN_TYPES_METHOD_NAME_KEY]
- if not is_member_excluded(method_name, member_exclusion_regexes):
- method_args = []
- method_insertions = []
- method_args_objs = next_instance_method[BUILT_IN_TYPES_METHOD_ARGS_KEY]
- for next_method_arg_obj in method_args_objs:
- method_arg = next_method_arg_obj[BUILT_IN_TYPES_METHOD_ARG_NAME_KEY]
- method_args.append(method_arg)
- method_insertion = method_arg
- try:
- method_insertion = next_method_arg_obj[BUILT_IN_TYPES_METHOD_INSERTION_KEY]
- except:
- pass
- method_insertions.append(method_insertion)
- next_completion = get_method_completion_tuple(method_name, method_args, method_insertions, is_inherited)
- completions.append(next_completion)
- return completions
-
-
-def collect_instance_completions_from_file(file_lines, class_name, is_inherited, member_exclusion_regexes, show_private):
-
- completions = []
- extended_class = None
- class_found = False
-
- property_completions = []
- function_completions = []
-
- class_and_extends_regex = CLASS_REGEX_WITH_EXTENDS % class_name
-
- # Find class in file lines
- match_tuple = get_positions_of_regex_match_in_file(file_lines, class_and_extends_regex)
- if match_tuple:
- class_found = True
- row = match_tuple[0]
- match = match_tuple[2]
-
- extended_class = match.group(3)
- if extended_class:
- extended_class = get_class_from_end_of_chain(extended_class)
-
- # If anything is equal to this after the first line, stop looking.
- # At that point, the class definition has ended.
- indentation_size = get_indentation_size(file_lines[row])
- # print str(indentation_size) + ": " + file_lines[row]
- # Let's dig for some info on this class!
- if row + 1 < len(file_lines):
- inside_constructor = False
- constructor_indentation = -1
- for row_index in range(row + 1, len(file_lines)):
- next_row = file_lines[row_index]
- next_indentation = get_indentation_size(next_row)
- # print str(next_indentation) + ": " + next_row
- if next_indentation >= 0:
- if next_indentation > indentation_size:
- if inside_constructor and next_indentation <= constructor_indentation:
- inside_constructor = False
- if inside_constructor:
- this_assignment_regex = "([@]|(this\s*[.]))\s*([a-zA-Z0-9_$]+)\s*="
- match = re.search(this_assignment_regex, next_row)
- if match:
- prop = match.group(3)
- if show_private or not is_member_excluded(prop, member_exclusion_regexes):
- prop_completion_alias = get_property_completion_alias(prop, is_inherited)
- prop_completion_insertion = get_property_completion_insertion(prop)
- prop_completion = (prop_completion_alias, prop_completion_insertion)
- if prop_completion not in property_completions:
- property_completions.append(prop_completion)
- else: # Not in constructor
- # Look for method definitions
- function_regex = FUNCTION_REGEX_ANY
- match = re.search(function_regex, next_row)
- if match and not re.search(STATIC_FUNCTION_REGEX, next_row):
- function_name = match.group(2)
- function_args_string = match.group(5)
- if show_private or not is_member_excluded(function_name, member_exclusion_regexes):
- if not function_name in CONSTRUCTOR_KEYWORDS:
- function_args_list = []
- if function_args_string:
- function_args_list = function_args_string.split(",")
- for i in range(len(function_args_list)):
- # Fix each one up...
- next_arg = function_args_list[i]
- next_arg = next_arg.strip()
- next_arg = re.sub("[^a-zA-Z0-9_$].*", "", next_arg)
- function_args_list[i] = re.sub(THIS_SUGAR_SYMBOL, "", next_arg)
- function_alias = get_method_completion_alias(function_name, function_args_list, is_inherited)
- function_insertion = get_method_completion_insertion(function_name, function_args_list)
- function_completion = (function_alias, function_insertion)
- if function_completion not in function_completions:
- function_completions.append(function_completion)
- else:
- function_args_list = []
- if function_args_string:
- function_args_list = function_args_string.split(",")
- for i in range(len(function_args_list)):
- # Check if it starts with @ -- this indicates an auto-set class variable
- next_arg = function_args_list[i]
- next_arg = next_arg.strip()
- if next_arg.startswith(THIS_SUGAR_SYMBOL):
- # Clean it up...
- next_arg = re.sub(THIS_SUGAR_SYMBOL, "", next_arg)
- next_arg = re.sub("[^a-zA-Z0-9_$].*", "", next_arg)
- if show_private or not is_member_excluded(next_arg, member_exclusion_regexes):
- prop_completion_alias = get_property_completion_alias(next_arg, is_inherited)
- prop_completion_insertion = get_property_completion_insertion(next_arg)
- prop_completion = (prop_completion_alias, prop_completion_insertion)
- if prop_completion not in property_completions:
- property_completions.append(prop_completion)
- inside_constructor = True
- constructor_indentation = get_indentation_size(next_row)
- else:
- # Indentation limit hit. We're not in the class anymore.
- break
-
- completions = property_completions + function_completions
- completion_tuple = (class_found, completions, extended_class)
- return completion_tuple
-
-
-def get_class_from_end_of_chain(dot_operation_chain):
- class_at_end = dot_operation_chain
- next_period_index = class_at_end.find(PERIOD_OPERATOR)
- while next_period_index >= 0:
- class_at_end = class_at_end[(next_period_index + 1):]
- class_at_end.strip()
- next_period_index = class_at_end.find(PERIOD_OPERATOR)
- if len(class_at_end) == 0:
- class_at_end = None
- return class_at_end
-
-
-def collect_static_completions_from_file(file_lines, class_name, is_inherited, member_exclusion_regexes, show_private):
-
- completions = []
- extended_class = None
- class_found = False
-
- property_completions = []
- function_completions = []
-
- class_and_extends_regex = CLASS_REGEX_WITH_EXTENDS % class_name
-
- # Find class in file lines
- match_tuple = get_positions_of_regex_match_in_file(file_lines, class_and_extends_regex)
- if match_tuple:
- class_found = True
- row = match_tuple[0]
- match = match_tuple[2]
-
- extended_class = match.group(3)
- if extended_class:
- # Clean it up.
- next_period_index = extended_class.find(PERIOD_OPERATOR)
- while next_period_index >= 0:
- extended_class = extended_class[(next_period_index + 1):]
- extended_class.strip()
- next_period_index = extended_class.find(PERIOD_OPERATOR)
- if len(extended_class) == 0:
- extended_class = None
-
- # If anything is equal to this after the first line, stop looking.
- # At that point, the class definition has ended.
- indentation_size = get_indentation_size(file_lines[row])
-
- # Let's dig for some info on this class!
- if row + 1 < len(file_lines):
-
- previous_indentation = -1
-
- for row_index in range(row + 1, len(file_lines)):
- next_row = file_lines[row_index]
- next_indentation = get_indentation_size(next_row)
- # print str(next_indentation) + ": " + next_row
- if next_indentation >= 0:
- if next_indentation > indentation_size:
- # print "Next: " + str(next_indentation) + ", Prev: " + str(previous_indentation)
- # Haven't found anything yet...
- # Look for class-level definitions...
- # If current line indentation is greater than previous indentation, we're in a definition
- if next_indentation > previous_indentation and previous_indentation >= 0:
- pass
- # Otherwise, save this indentation and examine the current line, as it's class-level
- else:
- previous_indentation = next_indentation
- function_regex = STATIC_FUNCTION_REGEX
- match = re.search(function_regex, next_row)
- if match:
- function_name = match.group(4)
- if show_private or not is_member_excluded(function_name, member_exclusion_regexes):
- function_args_string = match.group(6)
- function_args_list = []
- if function_args_string:
- function_args_list = function_args_string.split(",")
- for i in range(len(function_args_list)):
- # Fix each one up...
- next_arg = function_args_list[i]
- next_arg = next_arg.strip()
- next_arg = re.sub("[^a-zA-Z0-9_$].*", "", next_arg)
- function_args_list[i] = next_arg
- function_alias = get_method_completion_alias(function_name, function_args_list, is_inherited)
- function_insertion = get_method_completion_insertion(function_name, function_args_list)
- function_completion = (function_alias, function_insertion)
- if function_completion not in function_completions:
- function_completions.append(function_completion)
- else:
- # Look for static assignment
- assignment_regex = STATIC_ASSIGNMENT_REGEX
- match = re.search(assignment_regex, next_row)
- if match:
- prop = match.group(3)
- if show_private or not is_member_excluded(prop, member_exclusion_regexes):
- prop_completion_alias = get_property_completion_alias(prop, is_inherited)
- prop_completion_insertion = get_property_completion_insertion(prop)
- prop_completion = (prop_completion_alias, prop_completion_insertion)
- if prop_completion not in property_completions:
- property_completions.append(prop_completion)
- else:
- # Indentation limit hit. We're not in the class anymore.
- break
-
- completions = property_completions + function_completions
- completion_tuple = (class_found, completions, extended_class)
- return completion_tuple
-
-
-def get_property_completion_alias(property_name, is_inherited=False):
- indicator = PROPERTY_INDICATOR
- if is_inherited:
- indicator = INHERITED_INDICATOR + indicator
- completion_string = indicator + " " + property_name
- return completion_string
-
-
-def get_property_completion_insertion(property_name):
- completion_string = property_name
- completion_string = re.sub("[$]", "\$", completion_string)
- return completion_string
-
-
-def get_property_completion_tuple(property_name, is_inherited=False):
- completion_tuple = (get_property_completion_alias(property_name, is_inherited), get_property_completion_insertion(property_name))
- return completion_tuple
-
-
-def get_method_completion_alias(method_name, args, is_inherited=False):
- indicator = METHOD_INDICATOR
- if is_inherited:
- indicator = INHERITED_INDICATOR + indicator
- completion_string = indicator + " " + method_name + "("
- for i in range(len(args)):
- completion_string = completion_string + args[i]
- if i < len(args) - 1:
- completion_string = completion_string + ", "
- completion_string = completion_string + ")"
- return completion_string
-
-
-def get_method_completion_insertion(method_name, args):
-
- no_parens = False
-
- completion_string = re.sub("[$]", "\$", method_name)
-
- if len(args) == 1:
- function_match = re.search(r".*?[=\-]>.*", args[0])
- if function_match:
- no_parens = True
-
- if no_parens:
- completion_string = completion_string + " "
- else:
- completion_string = completion_string + "("
-
- for i in range(len(args)):
- escaped_arg = re.sub("[$]", "\$", args[i])
- completion_string = completion_string + "${" + str(i + 1) + ":" + escaped_arg + "}"
- if i < len(args) - 1:
- completion_string = completion_string + ", "
-
- if not no_parens:
- completion_string = completion_string + ")"
-
- return completion_string
-
-
-def get_method_completion_tuple(method_name, arg_names, arg_insertions, is_inherited=False):
- completion_tuple = (get_method_completion_alias(method_name, arg_names, is_inherited), get_method_completion_insertion(method_name, arg_insertions))
- return completion_tuple
-
-
-def get_view_contents(view):
- contents = ""
- start = 0
- end = view.size() - 1
- if end > start:
- entire_doc_region = sublime.Region(start, end)
- contents = view.substr(entire_doc_region)
- return contents
-
-
-def convert_file_contents_to_lines(contents):
- lines = contents.split("\n")
- count = len(lines)
- for i in range(count):
- # Don't add to the last one--that would put an extra \n
- if i < count - 1:
- lines[i] = lines[i] + "\n"
- return lines
-
-
-def get_view_content_lines(view):
- return convert_file_contents_to_lines(get_view_contents(view))
-
-
-def is_autocomplete_trigger(text):
- trigger = False
- trigger = trigger or text == THIS_SUGAR_SYMBOL
- trigger = trigger or text == PERIOD_OPERATOR
- return trigger
-
-
-def is_member_excluded(member, exclusion_regexes):
- excluded = False
- for next_exclusion_regex in exclusion_regexes:
- if re.search(next_exclusion_regex, member):
- excluded = True
- return excluded
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/CoffeeComplete Plus (Autocompletion)/messages.json b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/CoffeeComplete Plus (Autocompletion)/messages.json
deleted file mode 100644
index 4f51010..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/CoffeeComplete Plus (Autocompletion)/messages.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "install": "README.md"
-}
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/CoffeeComplete Plus (Autocompletion)/package-metadata.json b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/CoffeeComplete Plus (Autocompletion)/package-metadata.json
deleted file mode 100644
index 92c9844..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/CoffeeComplete Plus (Autocompletion)/package-metadata.json
+++ /dev/null
@@ -1 +0,0 @@
-{"url": "https://github.com/justinmahar/SublimeCSAutocompletePlus", "version": "2013.04.05.11.19.57", "description": "CoffeeScript autocompletions and more!"}
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/DocBlockr/Add DocBlockr Line Before.sublime-macro b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/DocBlockr/Add DocBlockr Line Before.sublime-macro
deleted file mode 100644
index 0db4daf..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/DocBlockr/Add DocBlockr Line Before.sublime-macro
+++ /dev/null
@@ -1,7 +0,0 @@
-[
- {"command": "move_to", "args": {"to": "bol"}},
- {"command": "insert_snippet", "args": {
- "contents": "${TM_CURRENT_LINE/^\\s*(\\*\\s*).*$/$1/}\n"
- }},
- {"command": "move", "args": {"by": "lines", "forward": false}}
-]
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/DocBlockr/Add DocBlockr Line.sublime-macro b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/DocBlockr/Add DocBlockr Line.sublime-macro
deleted file mode 100644
index 2726a69..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/DocBlockr/Add DocBlockr Line.sublime-macro
+++ /dev/null
@@ -1,6 +0,0 @@
-[
- {"command": "move_to", "args": {"to": "hardeol"}},
- {"command": "insert_snippet", "args": {
- "contents": "\n${TM_CURRENT_LINE/^\\s*(\\*\\s*).*$/$1/}"
- }}
-]
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/DocBlockr/Base File.sublime-settings b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/DocBlockr/Base File.sublime-settings
deleted file mode 100644
index fcf1cb2..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/DocBlockr/Base File.sublime-settings
+++ /dev/null
@@ -1,94 +0,0 @@
-{
- // If true, when in a docblock, pressing tab after a @tag line (like @param, @return)
- // will indent to the description. This is useful if you are writing a long description
- // and want that block of text to stay aligned.
- "jsdocs_deep_indent": true,
-
- // If true, then pressing enter while in a double-slash comment (like this one)
- // will automatically add two slashes to the next line as well
- "jsdocs_extend_double_slash": true,
-
- // the number of spaces to add after the leading *
- "jsdocs_indentation_spaces": 1,
-
- // The number of spaces to add after the leading * in lines under the first line of each
- // paragraph. This is only used together with automatic line wrapping. For example, a value
- // of 3 might look like this:
- //
- // /**
- // * Duis sed arcu non tellus eleifend ullamcorper quis non erat. Curabitur
- // * metus elit, ultrices et tristique a, blandit at justo.
- // * @param {String} foo Lorem ipsum dolor sit amet.
- // * @param {Number} bar Nullam fringilla feugiat pretium. Quisque
- // * consectetur, risus eu pellentesque tincidunt, nulla ipsum imperdiet
- // * massa, sit amet adipiscing dolor.
- // * @return {[Type]}
- // */
- "jsdocs_indentation_spaces_same_para": 1,
-
- // whether the words following the @tags should align.
- // Possible values are 'no', 'shallow', 'deep'
- // For backwards compatibility, false is equivalent to 'no', true is equivalent to 'shallow'
- //
- // 'shallow' will just align the first words after the tag. eg:
- // @param {MyCustomClass} myVariable desc1
- // @return {String} foo desc2
- // @property {Number} blahblah desc3
- //
- // 'deep' will align each component of the tags, eg:
- // @param {MyCustomClass} myVariable desc1
- // @return {String} foo desc2
- // @property {Number} blahblah desc3
- "jsdocs_align_tags": "deep",
-
- // Any additional boilerplate tags which should be added to each block. Should be an array of strings.
- // Note that this only applies when a docblock is opened directly preceding a function.
- // Tab points can be added by using snippet syntax, eg: ${1:default text}
- "jsdocs_extra_tags": [],
-
- // A map to determine the value of variables, should hungarian notation (or similar) be in use
- "jsdocs_notation_map": [],
-
- // Since there seems to be no agreed standard for "@return" or "@returns", use this setting to rename it as you wish.
- "jsdocs_return_tag": "@return",
-
- // Add a '[description]' placeholder for the return tag?
- "jsdocs_return_description": true,
-
- // Add a '[description]' placeholder for the param tag?
- "jsdocs_param_description": true,
-
- // Whether there should be blank lines added between the description line, and between tags of different types.
- // If true, the output might look like this:
- //
- // /**
- // * [description]
- // *
- // * @param {String} foo
- // * @param {Number} bar
- // *
- // * @return {[Type]}
- // */
- "jsdocs_spacer_between_sections": false,
-
- // Whether each section should be indented to the same level, or indent each one individually.
- // (When true, the @param section will lose the extra space immediately after each '@param').
- "jsdocs_per_section_indent": false,
-
- // Minimum spaces between cols (default is 1). For example, a value
- // of 2 might look like this:
- //
- // /**
- // * Duis sed arcu non tellus eleifend ullamcorper quis non erat. Curabitur
- // *
- // * @param {String} foo Lorem ipsum dolor sit amet.
- // * @param {Number} bar Nullam fringilla feugiat pretium. Quisque
- // *
- // * @return {[Type]} description
- // */
- "jsdocs_min_spaces_between_columns": 1,
-
- // indicates whether the @method tag should be added automatically
- "jsdocs_autoadd_method_tag": false
-
-}
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/DocBlockr/Default (Linux).sublime-keymap b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/DocBlockr/Default (Linux).sublime-keymap
deleted file mode 100644
index bab2c68..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/DocBlockr/Default (Linux).sublime-keymap
+++ /dev/null
@@ -1,7 +0,0 @@
-[
- { "keys": ["alt+shift+tab"], "command": "jsdocs_reparse", "context":
- [
- { "key": "selector", "operator": "equal", "operand": "comment.block" }
- ]
- }
-]
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/DocBlockr/Default (OSX).sublime-keymap b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/DocBlockr/Default (OSX).sublime-keymap
deleted file mode 100644
index 17ed188..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/DocBlockr/Default (OSX).sublime-keymap
+++ /dev/null
@@ -1,36 +0,0 @@
-[
- { "keys": ["super+j"], "command": "jsdocs_join", "context":
- [
- { "key": "selector", "operator": "equal", "operand": "comment.block" }
- ]
- },
- { "keys": ["super+j"], "command": "jsdocs_join", "context":
- [
- { "key": "selector", "operator": "equal", "operand": "comment.line" }
- ]
- },
- { "keys": ["super+alt+q"], "command": "jsdocs_wrap_lines",
- "context": [
- { "key": "selector", "operator": "equal", "operand": "comment.block", "match_all": true }
- ]
- },
- // add line after, in a DocBlock
- { "keys": ["super+enter"], "command": "run_macro_file", "args": {"file": "Packages/DocBlockr/Add DocBlockr Line.sublime-macro"},
- "context": [
- { "key": "setting.auto_indent", "operator": "equal", "operand": true, "match_all": true },
- { "key": "selector", "operator": "equal", "operand": "comment.block", "match_all": true },
- { "key": "auto_complete_visible", "operator": "equal", "operand": false, "match_all": true },
- { "key": "preceding_text", "operator": "regex_contains", "operand": "^\\s*\\*", "match_all": true }
- ]
- },
-
- // add line before, in a DocBlock
- { "keys": ["super+shift+enter"], "command": "run_macro_file", "args": {"file": "Packages/DocBlockr/Add DocBlockr Line Before.sublime-macro"},
- "context": [
- { "key": "setting.auto_indent", "operator": "equal", "operand": true, "match_all": true },
- { "key": "selector", "operator": "equal", "operand": "comment.block", "match_all": true },
- { "key": "auto_complete_visible", "operator": "equal", "operand": false, "match_all": true },
- { "key": "preceding_text", "operator": "regex_contains", "operand": "^\\s*\\*", "match_all": true }
- ]
- }
-]
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/DocBlockr/Default.sublime-commands b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/DocBlockr/Default.sublime-commands
deleted file mode 100644
index 338c837..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/DocBlockr/Default.sublime-commands
+++ /dev/null
@@ -1,10 +0,0 @@
-[
- {
- "caption": "DocBlockr: Decorate line comment",
- "command": "jsdocs_decorate"
- },
- {
- "caption": "DocBlockr: Reparse comment block",
- "command": "jsdocs_reparse"
- }
-]
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/DocBlockr/Default.sublime-keymap b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/DocBlockr/Default.sublime-keymap
deleted file mode 100644
index 73897e1..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/DocBlockr/Default.sublime-keymap
+++ /dev/null
@@ -1,246 +0,0 @@
-[
- // open a docblock with enter
- { "keys": ["enter"], "command": "jsdocs",
- "context": [
- { "key": "setting.auto_indent", "operator": "equal", "operand": true, "match_all": true },
- { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
- { "key": "auto_complete_visible", "operator": "equal", "operand": false, "match_all": true },
- { "key": "preceding_text", "operator": "regex_contains", "operand": "^\\s*(\\/\\*|###)\\*$", "match_all": true }
- ]
- },
- // open a docblock with keypad enter
- { "keys": ["keypad_enter"], "command": "jsdocs",
- "context": [
- { "key": "setting.auto_indent", "operator": "equal", "operand": true, "match_all": true },
- { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
- { "key": "auto_complete_visible", "operator": "equal", "operand": false, "match_all": true },
- { "key": "preceding_text", "operator": "regex_contains", "operand": "^\\s*(\\/\\*|###)\\*$", "match_all": true }
- ]
- },
- // open a docblock with tab
- { "keys": ["tab"], "command": "jsdocs",
- "context": [
- { "key": "setting.auto_indent", "operator": "equal", "operand": true, "match_all": true },
- { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
- { "key": "auto_complete_visible", "operator": "equal", "operand": false, "match_all": true },
- { "key": "preceding_text", "operator": "regex_contains", "operand": "^\\s*(\\/\\*|###)\\*$", "match_all": true }
- ]
- },
- // extend a docblock by adding an asterisk at the start
- { "keys": ["enter"], "command": "insert_snippet", "args": {"contents": "\n${TM_CURRENT_LINE/^\\s*(\\*\\s*).*$/$1/}"},
- "context": [
- { "key": "setting.auto_indent", "operator": "equal", "operand": true, "match_all": true },
- { "key": "selector", "operator": "equal", "operand": "comment.block", "match_all": true },
- { "key": "auto_complete_visible", "operator": "equal", "operand": false, "match_all": true },
- { "key": "preceding_text", "operator": "regex_contains", "operand": "^\\s*\\*\\s*\\S", "match_all": true }
- ]
- },
- // extend a docblock by adding an asterisk at the start
- { "keys": ["enter"], "command": "insert_snippet", "args": {"contents": "\n${TM_CURRENT_LINE/^\\s*(\\*\\s*).*$/$1/}"},
- "context": [
- { "key": "setting.auto_indent", "operator": "equal", "operand": true, "match_all": true },
- { "key": "selector", "operator": "equal", "operand": "comment.block", "match_all": true },
- { "key": "auto_complete_visible", "operator": "equal", "operand": false, "match_all": true },
- { "key": "preceding_text", "operator": "regex_contains", "operand": "^\\s*\\*", "match_all": true }
- ]
- },
- // extend a docblock with keypad enter by adding an asterisk at the start
- { "keys": ["keypad_enter"], "command": "insert_snippet", "args": {"contents": "\n${TM_CURRENT_LINE/^\\s*(\\*\\s*).*$/$1/}"},
- "context": [
- { "key": "setting.auto_indent", "operator": "equal", "operand": true, "match_all": true },
- { "key": "selector", "operator": "equal", "operand": "comment.block", "match_all": true },
- { "key": "auto_complete_visible", "operator": "equal", "operand": false, "match_all": true },
- { "key": "preceding_text", "operator": "regex_contains", "operand": "^\\s*\\*", "match_all": true }
- ]
- },
- // trim the automatically added whitespace
- { "keys": ["enter"], "command": "jsdocs_trim_auto_whitespace",
- "context": [
- { "key": "setting.auto_indent", "operator": "equal", "operand": true, "match_all": true },
- { "key": "selector", "operator": "equal", "operand": "comment.block", "match_all": true },
- { "key": "auto_complete_visible", "operator": "equal", "operand": false, "match_all": true },
- { "key": "setting.trim_automatic_white_space", "operator": "equal", "operand": true, "match_all": true },
- { "key": "preceding_text", "operator": "regex_contains", "operand": "^\\s*\\*\\s*$", "match_all": true },
- { "key": "following_text", "operator": "regex_contains", "operand": "^\\s*$", "match_all": true }
- ]
- },
- // trim the automatically added whitespace
- { "keys": ["keypad_enter"], "command": "jsdocs_trim_auto_whitespace",
- "context": [
- { "key": "setting.auto_indent", "operator": "equal", "operand": true, "match_all": true },
- { "key": "selector", "operator": "equal", "operand": "comment.block", "match_all": true },
- { "key": "auto_complete_visible", "operator": "equal", "operand": false, "match_all": true },
- { "key": "setting.trim_automatic_white_space", "operator": "equal", "operand": true, "match_all": true },
- { "key": "preceding_text", "operator": "regex_contains", "operand": "^\\s*\\*\\s*$", "match_all": true },
- { "key": "following_text", "operator": "regex_contains", "operand": "^\\s*$", "match_all": true }
- ]
- },
- // extend line comments (// and #)
- { "keys": ["enter"], "command": "insert_snippet", "args": {"contents": "\n${TM_CURRENT_LINE/^\\s*((?:#|\\/\\/)\\s*).*/$1/}"},
- "context": [
- { "key": "setting.auto_indent", "operator": "equal", "operand": true, "match_all": true },
- { "key": "setting.jsdocs_extend_double_slash", "operator": "equal", "operand": true, "match_all": true },
- { "key": "selector", "operator": "equal", "operand": "comment.line", "match_all": true },
- { "key": "auto_complete_visible", "operator": "equal", "operand": false, "match_all": true },
- { "key": "preceding_text", "operator": "regex_contains", "operand": "^\\s*(\\/\\/|#)", "match_all": true }
- ]
- },
- // extend line comments (// #) with keypad enter
- { "keys": ["keypad_enter"], "command": "insert_snippet", "args": {"contents": "\n${TM_CURRENT_LINE/^\\s*((?:#|\\/\\/)\\s*).*$/$1/}"},
- "context": [
- { "key": "setting.auto_indent", "operator": "equal", "operand": true, "match_all": true },
- { "key": "setting.jsdocs_extend_double_slash", "operator": "equal", "operand": true, "match_all": true },
- { "key": "selector", "operator": "equal", "operand": "comment.line", "match_all": true },
- { "key": "auto_complete_visible", "operator": "equal", "operand": false, "match_all": true },
- { "key": "preceding_text", "operator": "regex_contains", "operand": "^\\s*\\/\\/", "match_all": true }
- ]
- },
- // close a block comment (/* */)
- { "keys": ["enter"], "command": "insert_snippet", "args": {"contents": "\n$0\n */"},
- "context": [
- { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
- { "key": "preceding_text", "operator": "regex_contains", "operand": "^\\s*\\/\\*$", "match_all": true }
- ]
- },
- // close a block comment (/* */)
- { "keys": ["keypad_enter"], "command": "insert_snippet", "args": {"contents": "\n$0\n */"},
- "context": [
- { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
- { "key": "preceding_text", "operator": "regex_contains", "operand": "^\\s*\\/\\*$", "match_all": true }
- ]
- },
- { "keys": ["tab"], "command": "insert_snippet", "args": {"contents": "\n$0\n */"},
- "context": [
- { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
- { "key": "preceding_text", "operator": "regex_contains", "operand": "^\\s*\\/\\*$", "match_all": true }
- ]
- },
- { "keys": ["enter"], "command": "insert_snippet", "args": {"contents": "\n$0\n "}, "context":
- [
- { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true},
- { "key": "preceding_text", "operator": "regex_contains", "operand": "^\\s*\\/\\*$", "match_all": true},
- { "key": "following_text", "operator": "regex_contains", "operand": "^\\*\\/\\s*$", "match_all": true}
- ]
- },
- { "keys": ["keypad_enter"], "command": "insert_snippet", "args": {"contents": "\n$0\n "}, "context":
- [
- { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true},
- { "key": "preceding_text", "operator": "regex_contains", "operand": "^\\s*\\/\\*$", "match_all": true},
- { "key": "following_text", "operator": "regex_contains", "operand": "^\\*\\/$", "match_all": true}
- ]
- },
- // De-indent at the end of a comment block
- { "keys": ["enter"], "command": "jsdocs_deindent",
- "context": [
- { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
- { "key": "preceding_text", "operator": "regex_contains", "operand": "^\\s+\\*/", "match_all": true }
- ]
- },
- // de-indent at the end of a comment block with keypad-enter
- { "keys": ["keypad_enter"], "command": "jsdocs_deindent",
- "context": [
- { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
- { "key": "preceding_text", "operator": "regex_contains", "operand": "^\\s+\\*/", "match_all": true }
- ]
- },
- // Open an inline docblock (/** */)
- { "keys": ["shift+enter"], "command": "jsdocs", "args": {"inline": true},
- "context": [
- { "key": "setting.auto_indent", "operator": "equal", "operand": true, "match_all": true },
- { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
- { "key": "auto_complete_visible", "operator": "equal", "operand": false, "match_all": true },
- { "key": "preceding_text", "operator": "regex_contains", "operand": "^\\s*\\/\\*{2}$", "match_all": true }
- ]
- },
- // Open an inline docblock
- { "keys": ["shift+keypad_enter"], "command": "jsdocs", "args": {"inline": true},
- "context": [
- { "key": "setting.auto_indent", "operator": "equal", "operand": true, "match_all": true },
- { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
- { "key": "auto_complete_visible", "operator": "equal", "operand": false, "match_all": true },
- { "key": "preceding_text", "operator": "regex_contains", "operand": "^\\s*\\/\\*{2}$", "match_all": true }
- ]
- },
- // show the autocomplete
- { "keys": ["@"], "command": "run_macro_file", "args": {"file": "Packages/DocBlockr/jsdocs-auto-complete.sublime-macro"},
- "context": [
- { "key": "setting.auto_complete", "operator": "equal", "operand": true, "match_all": true },
- { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
- { "key": "preceding_text", "operator": "regex_contains", "operand": "^\\s*(?:\\/\\*|###)?\\*\\s*$", "match_all": true },
- { "key": "selector", "operator": "equal", "operand": "comment.block", "match_all": true }
- ]
- },
- // show the autocomplete in a coffee doc block
- { "keys": ["@"], "command": "run_macro_file", "args": {"file": "Packages/DocBlockr/jsdocs-auto-complete.sublime-macro"},
- "context": [
- { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
- { "key": "preceding_text", "operator": "regex_contains", "operand": "^\\s*#\\s*$", "match_all": true },
- { "key": "selector", "operator": "equal", "operand": "comment.line.number-sign.coffee", "match_all": true }
- ]
- },
- // indent to align with the previous line
- { "keys": ["tab"], "command": "jsdocs_indent",
- "context": [
- { "key": "setting.jsdocs_deep_indent", "operator": "equal", "operand": true, "match_all": true },
- { "key": "setting.auto_indent", "operator": "equal", "operand": true, "match_all": true },
- { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
- { "key": "preceding_text", "operator": "regex_contains", "operand": "^\\s*\\*\\s*$", "match_all": true },
- { "key": "selector", "operator": "equal", "operand": "comment.block", "match_all": true }
- ]
- },
- // decorate a double-slash comment
- { "keys": ["ctrl+enter"], "command": "jsdocs_decorate",
- "context": [
- { "key": "selector", "operator": "equal", "operand": "comment.line.double-slash"}
- ]
- },
- // decorate a double-slash comment
- { "keys": ["ctrl+keypad_enter"], "command": "jsdocs_decorate",
- "context": [
- { "key": "selector", "operator": "equal", "operand": "comment.line.double-slash"}
- ]
- },
- // join lines inside a comment block, stripping the leading asterisk
- { "keys": ["ctrl+j"], "command": "jsdocs_join",
- "context": [
- { "key": "selector", "operator": "equal", "operand": "comment.block" }
- ]
- },
- // join lines in a line comment, stripping the leading // or #
- { "keys": ["ctrl+j"], "command": "jsdocs_join",
- "context": [
- { "key": "selector", "operator": "equal", "operand": "comment.line" }
- ]
- },
- // reparse a comment block's placeholders
- { "keys": ["ctrl+alt+tab"], "command": "jsdocs_reparse",
- "context": [
- { "key": "selector", "operator": "equal", "operand": "comment.block" }
- ]
- },
- { "keys": ["alt+q"], "command": "jsdocs_wrap_lines",
- "context": [
- { "key": "selector", "operator": "equal", "operand": "comment.block", "match_all": true }
- ]
- },
-
- // add line after, in a DocBlock
- { "keys": ["ctrl+enter"], "command": "run_macro_file", "args": {"file": "Packages/DocBlockr/Add DocBlockr Line.sublime-macro"},
- "context": [
- { "key": "setting.auto_indent", "operator": "equal", "operand": true, "match_all": true },
- { "key": "selector", "operator": "equal", "operand": "comment.block", "match_all": true },
- { "key": "auto_complete_visible", "operator": "equal", "operand": false, "match_all": true },
- { "key": "preceding_text", "operator": "regex_contains", "operand": "^\\s*\\*", "match_all": true }
- ]
- },
-
- // add line before, in a DocBlock
- { "keys": ["ctrl+shift+enter"], "command": "run_macro_file", "args": {"file": "Packages/DocBlockr/Add DocBlockr Line Before.sublime-macro"},
- "context": [
- { "key": "setting.auto_indent", "operator": "equal", "operand": true, "match_all": true },
- { "key": "selector", "operator": "equal", "operand": "comment.block", "match_all": true },
- { "key": "auto_complete_visible", "operator": "equal", "operand": false, "match_all": true },
- { "key": "preceding_text", "operator": "regex_contains", "operand": "^\\s*\\*", "match_all": true }
- ]
- }
-]
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/DocBlockr/HISTORY.md b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/DocBlockr/HISTORY.md
deleted file mode 100644
index 72063ff..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/DocBlockr/HISTORY.md
+++ /dev/null
@@ -1,119 +0,0 @@
-# DocBlockr Extended Changelog
-
-- **v2.10.0**, *21 February 2013*
- - Adds Sublime Text 3 support (thanks to @lxe and @rmarscher)
- - YUI-style `@method` tags can be automatically added with the `jsdocs_autoadd_method_tag` setting (thanks to @maheshjag)
- - Variables starting with `$` are not wiped out when reparsing a doc block (thanks @ryrun)
-- **v2.9.3**, *12 December 2012*
- - Fixed bug which stopped regular comments from closing automatically
-- **v2.9.2**, *11 December 2012*
- - This one goes out to [Thanasis Polychronakis](https://github.com/thanpolas).
- - Structure of the modules greatly improved
- - Fixes bug with matching languages with hyphens in the name
- - Adds support for CUDA-C++
-- **v2.9.1**, *31 October 2012*
- - Thanks to [wronex](https://github.com/wronex), Alt+Q will reformat the entire DocBlock, with customisable indentation.
- - Thanks to [Pavel Voronin](https://github.com/pavel-voronin), spaces around arguments are handled properly.
- - **C/C++**: Array arguments are accepted
- - **C/C++**: An argument list containing only `void` doesn't output any `@param` tags
- - **PHP**: Arguments with an array as a default value inside multi-line arguments are handled properly
- - Ctrl/Cmd + Enter and Ctrl/Cmd + Shift + Enter work inside DocBlocks.
-- **v2.9.0**, *1 October 2012*
- - Adds ObjectiveC and ObjectiveC++ support, thanks to some help from [Robb Böhnke](https://github.com/robb)
- - Very buggy code, support isn't great but it's better than nothing (hopefully).
- - Single-line comments inside function definitions are handled
- - Notation rules are applied to functions, which means they can define a return type by their name, eg: `strFoo`
- - Notation rules can define arbitrary tags, for example: functions with a prefix of "_" should get the `@private` tag.
- - Given the above addition, JS functions starting with an underscore are no longer marked as `@private` by default.
-- **v2.8.2**, *28 September 2012*
- - When a function is defined across many lines, the parser will find the arguments on extra lines.
-- **v2.8.1**, *13 September 2012*
- - Pressing tab on an empty line will perform a deep indentation instead of moving to the next field
- - Functions starting with `_` will get a `@private` tag in Javascript (thanks to [Andrew Hanna](https://github.com/percyhanna))
-- **v2.8.0**, *26 August 2012*
- - New feature: Alt+Q to reformat the description field of a docblock to make it fit nicely within your ruler.
- - Adds support for C++ (thanks to [Rafał Chłodnicki](https://github.com/rchl))
- - Indenting to the description field works in languages which don't require type information in the docblock.
-- **v2.7.4**, *8 August 2012*
- - Fix for Actionscript docblocks not working
-- **v2.7.3**, *7 August 2012*
- - No trailing whitespace added on the spacer lines added when `jsdocs_spacer_between_sections` is on (thanks to [Rafał Chłodnicki](https://github.com/rchl))
- - Fixes a bug with detecting variable names when they have a default value in PHP
- - Changes the notation map to not ignore the leading `$` or `_`, meaning that (for example), you could specify that variables starting with `$` are `HTMLElement`s.
-- **v2.7.2**, *6 August 2012*
- - Small bug fix, thanks to [djuliusl](https://github.com/djuliusl)
-- **v2.7.1**, *5 August 2012*
- - Adds per-section alignment (can be set using `jsdocs_per_section_indent`)
- - Description field for `@return` tag can be disabled using `jsdocs_return_description`. *(Both thanks to [Drarok](https://github.com/Drarok))*
-- **v2.7.0**, *5 August 2012*
- - Adds support for ASDocs (Actionscript)
- - Changes Linux shortcut for reparsing a comment block to Alt+Shift+Tab
-- **v2.6.5**, *19 June 2012*
- - Bugfix for adding linebreaks when not at the start or end of a line
-- **v2.6.4**, *4 June 2012*
- - Better support for indentation using tabs
- - YUI tags are supported by the autocomplete
- - When only whitespace exists on a docblock line, and `trim_automatic_white_space` is set to true, the whitespace is removed.
- - Better support for comment blocks opened with `/*`
-- **v2.6.3**, *30 April 2012*
- - Fixes the join-lines command Ctrl+J for CoffeeScript.
-- **v2.6.2**, *22 March 2012*
- - PHP `__destruct` functions don't get a return value *(thanks to [Alex Whitman](https://github.com/whitman))*.
-- **v2.6.1**, *16 March 2012*
- - Fixes bug whereby the return values of functions which are named `set` or `add`, *etc* were not being guessed correctly.
- - `@return` tags are now given a description field *(thanks to [Nick Dowdell](https://github.com/mikulad13))*.
-- **v2.6.0**, *4 March 2012*
- - Added CoffeeScript support
-- **v2.5.0**, *11 February 2012*
- - Implemented DocBlock reparsing to re-enable tabstop fields. Hotkey is `Ctrl+Alt+Tab`.
-- **v2.4.1**, *2 February 2012*
- - Fixed bug [#36](https://github.com/spadgos/sublime-jsdocs/issues/36) whereby docblocks were not being properly extended inside of `$0]]>
- script
- source.php,text.html
- <script>
- text.html
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Entities/ampersand.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Entities/ampersand.sublime-snippet
deleted file mode 100644
index 91020d7..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Entities/ampersand.sublime-snippet
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
- &
- source.php,text.html
- &
- text.html
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Entities/non-breaking space.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Entities/non-breaking space.sublime-snippet
deleted file mode 100644
index d74934f..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Entities/non-breaking space.sublime-snippet
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
- nbsp
- source.php,text.html
-
- text.html
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Internet Explorer Conditional Comments/IE Conditional Comment - HTML 5 Shim.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Internet Explorer Conditional Comments/IE Conditional Comment - HTML 5 Shim.sublime-snippet
deleted file mode 100644
index b4352ee..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Internet Explorer Conditional Comments/IE Conditional Comment - HTML 5 Shim.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
- ]]>
- !
- IE Conditional Comment: HTML5 Shim
- source.php,text.html
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Internet Explorer Conditional Comments/IE Conditional Comment - Internet Explorer 5_0 only.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Internet Explorer Conditional Comments/IE Conditional Comment - Internet Explorer 5_0 only.sublime-snippet
deleted file mode 100644
index cf35945..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Internet Explorer Conditional Comments/IE Conditional Comment - Internet Explorer 5_0 only.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
- $1]]>
- !
- IE Conditional Comment: IE5 only
- source.php,text.html
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Internet Explorer Conditional Comments/IE Conditional Comment - Internet Explorer 5_5 only.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Internet Explorer Conditional Comments/IE Conditional Comment - Internet Explorer 5_5 only.sublime-snippet
deleted file mode 100644
index 735c25a..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Internet Explorer Conditional Comments/IE Conditional Comment - Internet Explorer 5_5 only.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
- $1]]>
- !
- IE Conditional Comment: IE5.5 only
- source.php,text.html
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Internet Explorer Conditional Comments/IE Conditional Comment - Internet Explorer 5_x.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Internet Explorer Conditional Comments/IE Conditional Comment - Internet Explorer 5_x.sublime-snippet
deleted file mode 100644
index cdb31ff..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Internet Explorer Conditional Comments/IE Conditional Comment - Internet Explorer 5_x.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
- $1]]>
- !
- IE Conditional Comment: IE5.x
- source.php,text.html
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Internet Explorer Conditional Comments/IE Conditional Comment - Internet Explorer 6 and below.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Internet Explorer Conditional Comments/IE Conditional Comment - Internet Explorer 6 and below.sublime-snippet
deleted file mode 100644
index 22e3877..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Internet Explorer Conditional Comments/IE Conditional Comment - Internet Explorer 6 and below.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
- $1]]>
- !
- IE Conditional Comment: <IE6
- source.php,text.html
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Internet Explorer Conditional Comments/IE Conditional Comment - Internet Explorer 6 only.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Internet Explorer Conditional Comments/IE Conditional Comment - Internet Explorer 6 only.sublime-snippet
deleted file mode 100644
index 7e1606d..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Internet Explorer Conditional Comments/IE Conditional Comment - Internet Explorer 6 only.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
- $1]]>
- !
- IE Conditional Comment: IE6
- source.php,text.html
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Internet Explorer Conditional Comments/IE Conditional Comment - Internet Explorer 7 and above.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Internet Explorer Conditional Comments/IE Conditional Comment - Internet Explorer 7 and above.sublime-snippet
deleted file mode 100644
index ef45bed..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Internet Explorer Conditional Comments/IE Conditional Comment - Internet Explorer 7 and above.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
- $1]]>
- !
- IE Conditional Comment: IE7>
- source.php,text.html
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Internet Explorer Conditional Comments/IE Conditional Comment - Internet Explorer 7 and below.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Internet Explorer Conditional Comments/IE Conditional Comment - Internet Explorer 7 and below.sublime-snippet
deleted file mode 100644
index c9c8cba..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Internet Explorer Conditional Comments/IE Conditional Comment - Internet Explorer 7 and below.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
- $1]]>
- !
- IE Conditional Comment: <IE7
- source.php,text.html
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Internet Explorer Conditional Comments/IE Conditional Comment - Internet Explorer 8 and below.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Internet Explorer Conditional Comments/IE Conditional Comment - Internet Explorer 8 and below.sublime-snippet
deleted file mode 100644
index 6768ec7..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Internet Explorer Conditional Comments/IE Conditional Comment - Internet Explorer 8 and below.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
- $1]]>
- !
- IE Conditional Comment: <IE8
- source.php,text.html
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Internet Explorer Conditional Comments/IE Conditional Comment - Internet Explorer 9 and below.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Internet Explorer Conditional Comments/IE Conditional Comment - Internet Explorer 9 and below.sublime-snippet
deleted file mode 100644
index 9f99f2f..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Internet Explorer Conditional Comments/IE Conditional Comment - Internet Explorer 9 and below.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
- $1]]>
- !
- IE Conditional Comment: <IE9
- source.php,text.html
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Internet Explorer Conditional Comments/IE Conditional Comment - Internet Explorer.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Internet Explorer Conditional Comments/IE Conditional Comment - Internet Explorer.sublime-snippet
deleted file mode 100644
index b347030..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Internet Explorer Conditional Comments/IE Conditional Comment - Internet Explorer.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
- $1]]>
- !
- IE Conditional Comment: IE
- source.php,text.html
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Internet Explorer Conditional Comments/IE Conditional Comment - NOT Internet Explorer.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Internet Explorer Conditional Comments/IE Conditional Comment - NOT Internet Explorer.sublime-snippet
deleted file mode 100644
index 2bb8eb7..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Internet Explorer Conditional Comments/IE Conditional Comment - NOT Internet Explorer.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
- $1]]>
- !
- IE Conditional Comment: Not IE
- source.php,text.html
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Javascript Libraries/Google AJAX Libraries - Chrome Frame.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Javascript Libraries/Google AJAX Libraries - Chrome Frame.sublime-snippet
deleted file mode 100644
index dcf2ef2..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Javascript Libraries/Google AJAX Libraries - Chrome Frame.sublime-snippet
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-]]>
- Google AJAX Libraries: Chrome Frame
- source.php,text.html
- ajax
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Javascript Libraries/Google AJAX Libraries - Dojo.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Javascript Libraries/Google AJAX Libraries - Dojo.sublime-snippet
deleted file mode 100644
index 75e7286..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Javascript Libraries/Google AJAX Libraries - Dojo.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
- $0]]>
- Google AJAX Libraries: Dojo
- text.html
- source.php,text.html
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Javascript Libraries/Google AJAX Libraries - Ext Core.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Javascript Libraries/Google AJAX Libraries - Ext Core.sublime-snippet
deleted file mode 100644
index 4e1409a..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Javascript Libraries/Google AJAX Libraries - Ext Core.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
- $0]]>
- ajax
- Google AJAX Libraries: Ext Core
- source.php,text.html
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Javascript Libraries/Google AJAX Libraries - MooTools.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Javascript Libraries/Google AJAX Libraries - MooTools.sublime-snippet
deleted file mode 100644
index 6af0521..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Javascript Libraries/Google AJAX Libraries - MooTools.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
- $0]]>
- ajax
- Google AJAX Libraries: MooTools
- source.php,text.html
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Javascript Libraries/Google AJAX Libraries - Prototype.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Javascript Libraries/Google AJAX Libraries - Prototype.sublime-snippet
deleted file mode 100644
index dba0a01..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Javascript Libraries/Google AJAX Libraries - Prototype.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
- $0]]>
- ajax
- Google AJAX Libraries: Prototype
- source.php,text.html
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Javascript Libraries/Google AJAX Libraries - SWFObject.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Javascript Libraries/Google AJAX Libraries - SWFObject.sublime-snippet
deleted file mode 100644
index eebd6b3..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Javascript Libraries/Google AJAX Libraries - SWFObject.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
- $0]]>
- ajax
- Google AJAX Libraries: SWFObject
- source.php,text.html
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Javascript Libraries/Google AJAX Libraries - WebFont Loader.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Javascript Libraries/Google AJAX Libraries - WebFont Loader.sublime-snippet
deleted file mode 100644
index adca419..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Javascript Libraries/Google AJAX Libraries - WebFont Loader.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
- $0]]>
- ajax
- Google AJAX Libraries: WebFont Loader
- source.php,text.html
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Javascript Libraries/Google AJAX Libraries - YUI!.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Javascript Libraries/Google AJAX Libraries - YUI!.sublime-snippet
deleted file mode 100644
index 30df7bd..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Javascript Libraries/Google AJAX Libraries - YUI!.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
- $0]]>
- ajax
- Google AJAX Libraries: YUI!
- source.php,text.html
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Javascript Libraries/Google AJAX Libraries - jQuery UI.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Javascript Libraries/Google AJAX Libraries - jQuery UI.sublime-snippet
deleted file mode 100644
index 568be94..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Javascript Libraries/Google AJAX Libraries - jQuery UI.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
- $0]]>
- ajax
- Google AJAX Libraries: jQuery UI
- source.php,text.html
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Javascript Libraries/Google AJAX Libraries - jQuery.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Javascript Libraries/Google AJAX Libraries - jQuery.sublime-snippet
deleted file mode 100644
index c8017f4..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Javascript Libraries/Google AJAX Libraries - jQuery.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
- $0]]>
- ajax
- Google AJAX Libraries: jQuery
- source.php,text.html
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Javascript Libraries/Google AJAX Libraries - script_aculo_us.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Javascript Libraries/Google AJAX Libraries - script_aculo_us.sublime-snippet
deleted file mode 100644
index 2c7421c..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Javascript Libraries/Google AJAX Libraries - script_aculo_us.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
- $0]]>
- ajax
- Google AJAX Libraries: Scriptaculous
- source.php,text.html
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Macros/Forward Delete All Whitespace.tmMacro b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Macros/Forward Delete All Whitespace.tmMacro
deleted file mode 100644
index 5e1561c..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Macros/Forward Delete All Whitespace.tmMacro
+++ /dev/null
@@ -1,42 +0,0 @@
-
-
-
-
- commands
-
-
- argument
-
- action
- findNext
- findInProjectIgnoreCase
- 0
- findString
- (?=\S)|\s+
- ignoreCase
- 0
- regularExpression
- 1
- replaceAllScope
- document
- wrapAround
- 0
-
- command
- findWithOptions:
-
-
- command
- deleteBackward:
-
-
- keyEquivalent
- ^~
- name
- Forward Delete All Whitespace
- scope
- text.html
- uuid
- 7B7E945E-A112-11D9-A5A2-000D93C8BE28
-
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Preferences/Comments.tmPreferences b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Preferences/Comments.tmPreferences
deleted file mode 100644
index 3aab8ef..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Preferences/Comments.tmPreferences
+++ /dev/null
@@ -1,30 +0,0 @@
-
-
-
-
- name
- Comments
- scope
- text.html
- settings
-
- shellVariables
-
-
- name
- TM_COMMENT_START
- value
- <!--
-
-
- name
- TM_COMMENT_END
- value
- -->
-
-
-
- uuid
- B79BDBCF-D0C9-468E-BE62-744074D7825F
-
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Preferences/Completions HTML Attributes.tmPreferences b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Preferences/Completions HTML Attributes.tmPreferences
deleted file mode 100644
index 7891a7b..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Preferences/Completions HTML Attributes.tmPreferences
+++ /dev/null
@@ -1,346 +0,0 @@
-
-
-
-
- name
- Completions HTML Attributes
- scope
- text.html meta.tag -(entity.other.attribute-name | source | entity.name.tag | string | invalid.illegal.incomplete.html)
- settings
-
- completions
-
- ABBR
- abbr
- ABOVE
- above
- ACCEPT
- accept
- ACCESSKEY
- accesskey
- ACTION
- action
- ALIGN
- align
- ALINK
- alink
- ALT
- alt
- ARCHIVE
- archive
- AUTOSTART
- autostart
- AXIS
- axis
- BACKGROUND
- background
- BALANCE
- balance
- BEHAVIOR
- behavior
- BELOW
- below
- BGCOLOR
- bgcolor
- BGPROPERTIES
- bgproperties
- BORDER
- border
- BORDERCOLOR
- bordercolor
- BORDERCOLORDARK
- bordercolordark
- BORDERCOLORLIGHT
- bordercolorlight
- BOTTOMMARGIN
- bottommargin
- CABBASE
- cabbase
- CELLPADDING
- cellpadding
- CELLSPACING
- cellspacing
- CHARSET
- charset
- CHECKED
- checked
- CITE
- cite
- CLASS
- class
- CLASSID
- classid
- CLEAR
- clear
- CLIP
- clip
- CODE
- code
- CODEBASE
- codebase
- CODETYPE
- codetype
- COLOR
- color
- COLS
- cols
- COLSPAN
- colspan
- COMPACT
- compact
- CONTENT
- content
- CONTROLS
- controls
- COORDS
- coords
- DATA
- data
- DATAPAGESIZE
- datapagesize
- DATETIME
- datetime
- DECLARE
- declare
- DEFER
- defer
- DELAY
- delay
- DIR
- dir
- DIRECTION
- direction
- DISABLED
- disabled
- DYNSRC
- dynsrc
- ENCTYPE
- enctype
- FACE
- face
- FOR
- for
- FRAME
- frame
- FRAMEBORDER
- frameborder
- FRAMESPACING
- framespacing
- GUTTER
- gutter
- HEADERS
- headers
- HEIGHT
- height
- HIDDEN
- hidden
- HREF
- href
- HREFLANG
- hreflang
- HSPACE
- hspace
- HTTP-EQUIV
- http-equiv
- ID
- id
- ISMAP
- ismap
- LABEL
- label
- LANG
- lang
- lang
- language
- LEFT
- left
- LEFTMARGIN
- leftmargin
- LINK
- link
- LONGDESC
- longdesc
- LOOP
- loop
- LOWSRC
- lowsrc
- MARGINHEIGHT
- marginheight
- MARGINWIDTH
- marginwidth
- MAXLENGTH
- maxlength
- MAYSCRIPT
- mayscript
- MEDIA
- media
- METHOD
- method
- MULTIPLE
- multiple
- NAME
- name
- NOEXTERNALDATA
- noexternaldata
- NORESIZE
- noresize
- NOSHADE
- noshade
- NOWRAP
- nowrap
- onBlur
- onblur
- onChange
- onchange
- onClick
- onclick
- onDblClick
- ondblclick
- onError
- onerror
- onFocus
- onfocus
- onKeyDown
- onkeydown
- onKeyPress
- onkeypress
- onKeyUp
- onkeyup
- onLoad
- onload
- onMouseDown
- onmousedown
- onMouseMove
- onmousemove
- onMouseOut
- onmouseout
- onMouseOver
- onmouseover
- onMouseUp
- onmouseup
- onReset
- onreset
- onResize
- onresize
- onSelect
- onselect
- onSubmit
- onsubmit
- onUnload
- onunload
- PAGEX
- pagex
- PAGEY
- pagey
- POINTSIZE
- pointsize
- READONLY
- readonly
- REL
- rel
- REV
- rev
- RIGHTMARGIN
- rightmargin
- ROWS
- rows
- ROWSPAN
- rowspan
- RULES
- rules
- runat
- SCOPE
- scope
- SCROLLAMOUNT
- scrollamount
- SCROLLDELAY
- scrolldelay
- SCROLLING
- scrolling
- SELECTED
- selected
- SHAPE
- shape
- SIZE
- size
- SPAN
- span
- SRC
- src
- STANDBY
- standby
- START
- start
- STYLE
- style
- SUMMARY
- summary
- TABINDEX
- tabindex
- TARGET
- target
- TEXT
- text
- TITLE
- title
- TOP
- top
- TOPMARGIN
- topmargin
- TRUESPEED
- truespeed
- TYPE
- type
- USEMAP
- usemap
- VALIGN
- valign
- VALUE
- value
- VALUETYPE
- valuetype
- VISIBILITY
- visibility
- VLINK
- vlink
- VOLUME
- volume
- VSPACE
- vspace
- WIDTH
- width
- WRAP
- wrap
- xml:lang
- xmlns
- Z-INDEX
- z-index
-
- disableDefaultCompletion
- 1
- shellVariables
-
-
- name
- TM_COMPLETION_split
- value
- ,
-
-
- name
- TM_COMPLETION_scope
- value
- html_attributes
-
-
- name
- TM_COMPLETIONS
- value
- <a href="",<a name="",<a title="",<a target="",<a charset="",<a class="",<a id="",<a style="",<a hreflang="",<a accesskey="",<a tabindex="",<a rel="",<a rev="",<a shape="",<a coords="",<a dir="",<a lang="",<a onfocus="",<a onblur="",<a onclick="",<a ondblclick="",<a onmousedown="",<a onmouseup="",<a onmouseover="",<a onmousemove="",<a onmouseout="",<a onkeypress="",<a onkeydown="",<a onkeyup="",<abbr class="",<abbr id="",<abbr style="",<abbr title="",<abbr dir="",<abbr lang="",<abbr onclick="",<abbr ondblclick="",<abbr onmousedown="",<abbr onmouseup="",<abbr onmouseover="",<abbr onmousemove="",<abbr onmouseout="",<abbr onkeypress="",<abbr onkeydown="",<abbr onkeyup="",<acronym class="",<acronym id="",<acronym style="",<acronym title="",<acronym dir="",<acronym lang="",<acronym onclick="",<acronym ondblclick="",<acronym onmousedown="",<acronym onmouseup="",<acronym onmouseover="",<acronym onmousemove="",<acronym onmouseout="",<acronym onkeypress="",<acronym onkeydown="",<acronym onkeyup="",<address class="",<address id="",<address style="",<address title="",<address dir="",<address lang="",<address onclick="",<address ondblclick="",<address onmousedown="",<address onmouseup="",<address onmouseover="",<address onmousemove="",<address onmouseout="",<address onkeypress="",<address onkeydown="",<address onkeyup="",<applet noexternaldata="",<applet code="",<applet codebase="",<applet name="",<applet alt="",<applet width="",<applet height="",<applet hspace="",<applet vspace="",<applet align="",<applet cabbase="",<applet mayscript="",<applet archive="",<applet class="",<applet id="",<applet style="",<area name="",<area value="",<area shape="",<area coords="",<area href="",<area target="",<area alt="",<area disabled="disabled",<area class="",<area id="",<area style="",<area accesskey="",<area tabindex="",<area title="",<area dir="",<area lang="",<area onfocus="",<area onblur="",<area onclick="",<area ondblclick="",<area onmousedown="",<area onmouseup="",<area onmouseover="",<area onmousemove="",<area onmouseout="",<area onkeypress="",<area onkeydown="",<area onkeyup="",<b class="",<b id="",<b style="",<b title="",<b dir="",<b lang="",<b onclick="",<b ondblclick="",<b onmousedown="",<b onmouseup="",<b onmouseover="",<b onmousemove="",<b onmouseout="",<b onkeypress="",<b onkeydown="",<b onkeyup="",<base href="",<base target="",<basefont size="",<basefont face="",<basefont color="#333333",<basefont id="",<bdo dir="",<bdo lang="",<bdo class="",<bdo id="",<bdo style="",<bdo title="",<bgsound src="",<bgsound loop="",<bgsound balance="",<bgsound volume="",<bgsound delay="",<big class="",<big id="",<big style="",<big title="",<big dir="",<big lang="",<big onclick="",<big ondblclick="",<big onmousedown="",<big onmouseup="",<big onmouseover="",<big onmousemove="",<big onmouseout="",<big onkeypress="",<big onkeydown="",<big onkeyup="",<blockquote cite="",<blockquote class="",<blockquote id="",<blockquote style="",<blockquote title="",<blockquote dir="",<blockquote lang="",<blockquote onclick="",<blockquote ondblclick="",<blockquote onmousedown="",<blockquote onmouseup="",<blockquote onmouseover="",<blockquote onmousemove="",<blockquote onmouseout="",<blockquote onkeypress="",<blockquote onkeydown="",<blockquote onkeyup="",<body bgcolor="",<body background="",<body text="",<body link="",<body vlink="",<body alink="",<body leftmargin="",<body topmargin="",<body bgproperties="",<body rightmargin="",<body bottommargin="",<body marginwidth="",<body marginheight="",<body class="",<body id="",<body style="",<body title="",<body dir="",<body lang="",<body onload="",<body onunload="",<body onblur="",<body onerror="",<body onfocus="",<body onresize="",<br clear="",<br class="",<br id="",<br style="",<br title="",<button name="",<button value="",<button type="",<button disabled="disabled",<button class="",<button id="",<button style="",<button accesskey="",<button tabindex="",<button title="",<button dir="",<button lang="",<button onfocus="",<button onblur="",<button onclick="",<button ondblclick="",<button onmousedown="",<button onmouseup="",<button onmouseover="",<button onmousemove="",<button onmouseout="",<button onkeypress="",<button onkeydown="",<button onkeyup="",<caption align="",<caption valign="",<caption class="",<caption id="",<caption style="",<caption title="",<caption dir="",<caption lang="",<caption onclick="",<caption ondblclick="",<caption onmousedown="",<caption onmouseup="",<caption onmouseover="",<caption onmousemove="",<caption onmouseout="",<caption onkeypress="",<caption onkeydown="",<caption onkeyup="",<cite class="",<cite id="",<cite style="",<cite title="",<cite dir="",<cite lang="",<cite onclick="",<cite ondblclick="",<cite onmousedown="",<cite onmouseup="",<cite onmouseover="",<cite onmousemove="",<cite onmouseout="",<cite onkeypress="",<cite onkeydown="",<cite onkeyup="",<code class="",<code id="",<code style="",<code title="",<code dir="",<code lang="",<code onclick="",<code ondblclick="",<code onmousedown="",<code onmouseup="",<code onmouseover="",<code onmousemove="",<code onmouseout="",<code onkeypress="",<code onkeydown="",<code onkeyup="",<col align="",<col valign="",<col span="",<col width="",<col class="",<col id="",<col style="",<col title="",<col dir="",<col lang="",<col onclick="",<col ondblclick="",<col onmousedown="",<col onmouseup="",<col onmouseover="",<col onmousemove="",<col onmouseout="",<col onkeypress="",<col onkeydown="",<col onkeyup="",<colgroup align="",<colgroup valign="",<colgroup span="",<colgroup width="",<colgroup class="",<colgroup id="",<colgroup style="",<colgroup title="",<colgroup dir="",<colgroup lang="",<colgroup onclick="",<colgroup ondblclick="",<colgroup onmousedown="",<colgroup onmouseup="",<colgroup onmouseover="",<colgroup onmousemove="",<colgroup onmouseout="",<colgroup onkeypress="",<colgroup onkeydown="",<colgroup onkeyup="",<dd class="",<dd id="",<dd style="",<dd title="",<dd dir="",<dd lang="",<dd onclick="",<dd ondblclick="",<dd onmousedown="",<dd onmouseup="",<dd onmouseover="",<dd onmousemove="",<dd onmouseout="",<dd onkeypress="",<dd onkeydown="",<dd onkeyup="",<del cite="",<del datetime="",<del class="",<del id="",<del style="",<del title="",<del dir="",<del lang="",<del onclick="",<del ondblclick="",<del onmousedown="",<del onmouseup="",<del onmouseover="",<del onmousemove="",<del onmouseout="",<del onkeypress="",<del onkeydown="",<del onkeyup="",<dfn class="",<dfn id="",<dfn style="",<dfn title="",<dfn dir="",<dfn lang="",<dfn onclick="",<dfn ondblclick="",<dfn onmousedown="",<dfn onmouseup="",<dfn onmouseover="",<dfn onmousemove="",<dfn onmouseout="",<dfn onkeypress="",<dfn onkeydown="",<dfn onkeyup="",<div align="",<div class="",<div id="",<div style="",<div title="",<div dir="",<div lang="",<div onclick="",<div ondblclick="",<div onmousedown="",<div onmouseup="",<div onmouseover="",<div onmousemove="",<div onmouseout="",<div onkeypress="",<div onkeydown="",<div onkeyup="",<dl compact="",<dl class="",<dl id="",<dl style="",<dl title="",<dl dir="",<dl lang="",<dl onclick="",<dl ondblclick="",<dl onmousedown="",<dl onmouseup="",<dl onmouseover="",<dl onmousemove="",<dl onmouseout="",<dl onkeypress="",<dl onkeydown="",<dl onkeyup="",<dt class="",<dt id="",<dt style="",<dt title="",<dt dir="",<dt lang="",<dt onclick="",<dt ondblclick="",<dt onmousedown="",<dt onmouseup="",<dt onmouseover="",<dt onmousemove="",<dt onmouseout="",<dt onkeypress="",<dt onkeydown="",<dt onkeyup="",<em class="",<em id="",<em style="",<em title="",<em dir="",<em lang="",<em onclick="",<em ondblclick="",<em onmousedown="",<em onmouseup="",<em onmouseover="",<em onmousemove="",<em onmouseout="",<em onkeypress="",<em onkeydown="",<em onkeyup="",<embed src="",<embed width="",<embed height="",<embed hspace="",<embed vspace="",<embed hidden="",<embed autostart="",<embed loop="",<embed align="",<embed class="",<embed style="",<embed dir="",<embed lang="",<fieldset class="",<fieldset id="",<fieldset style="",<fieldset title="",<fieldset accesskey="",<fieldset dir="",<fieldset lang="",<fieldset onclick="",<fieldset ondblclick="",<fieldset onmousedown="",<fieldset onmouseup="",<fieldset onmouseover="",<fieldset onmousemove="",<fieldset onmouseout="",<fieldset onkeypress="",<fieldset onkeydown="",<fieldset onkeyup="",<font color="#333333",<font size="",<font face="",<font pointsize="",<font class="",<font id="",<font style="",<font title="",<font dir="",<font lang="",<form action="",<form method="",<form enctype="",<form name="",<form target="",<form class="",<form id="",<form style="",<form title="",<form dir="",<form lang="",<form runat="",<form onsubmit="",<form onreset="",<form onclick="",<form ondblclick="",<form onmousedown="",<form onmouseup="",<form onmouseover="",<form onmousemove="",<form onmouseout="",<form onkeypress="",<form onkeydown="",<form onkeyup="",<frame src="",<frame name="",<frame frameborder="",<frame scrolling="",<frame noresize="",<frame marginwidth="",<frame marginheight="",<frame bordercolor="#CCCCCC",<frame class="",<frame id="",<frame style="",<frame title="",<frame longdesc="",<frameset rows="",<frameset cols="",<frameset framespacing="",<frameset frameborder="",<frameset border="",<frameset bordercolor="#CCCCCC",<frameset class="",<frameset id="",<frameset style="",<frameset title="",<frameset onload="",<frameset onunload="",<h1 align="",<h1 class="",<h1 id="",<h1 style="",<h1 title="",<h1 dir="",<h1 lang="",<h1 onclick="",<h1 ondblclick="",<h1 onmousedown="",<h1 onmouseup="",<h1 onmouseover="",<h1 onmousemove="",<h1 onmouseout="",<h1 onkeypress="",<h1 onkeydown="",<h1 onkeyup="",<h2 align="",<h2 class="",<h2 id="",<h2 style="",<h2 title="",<h2 dir="",<h2 lang="",<h2 onclick="",<h2 ondblclick="",<h2 onmousedown="",<h2 onmouseup="",<h2 onmouseover="",<h2 onmousemove="",<h2 onmouseout="",<h2 onkeypress="",<h2 onkeydown="",<h2 onkeyup="",<h3 align="",<h3 class="",<h3 id="",<h3 style="",<h3 title="",<h3 dir="",<h3 lang="",<h3 onclick="",<h3 ondblclick="",<h3 onmousedown="",<h3 onmouseup="",<h3 onmouseover="",<h3 onmousemove="",<h3 onmouseout="",<h3 onkeypress="",<h3 onkeydown="",<h3 onkeyup="",<h4 align="",<h4 class="",<h4 id="",<h4 style="",<h4 title="",<h4 dir="",<h4 lang="",<h4 onclick="",<h4 ondblclick="",<h4 onmousedown="",<h4 onmouseup="",<h4 onmouseover="",<h4 onmousemove="",<h4 onmouseout="",<h4 onkeypress="",<h4 onkeydown="",<h4 onkeyup="",<h5 align="",<h5 class="",<h5 id="",<h5 style="",<h5 title="",<h5 dir="",<h5 lang="",<h5 onclick="",<h5 ondblclick="",<h5 onmousedown="",<h5 onmouseup="",<h5 onmouseover="",<h5 onmousemove="",<h5 onmouseout="",<h5 onkeypress="",<h5 onkeydown="",<h5 onkeyup="",<h6 align="",<h6 class="",<h6 id="",<h6 style="",<h6 title="",<h6 dir="",<h6 lang="",<h6 onclick="",<h6 ondblclick="",<h6 onmousedown="",<h6 onmouseup="",<h6 onmouseover="",<h6 onmousemove="",<h6 onmouseout="",<h6 onkeypress="",<h6 onkeydown="",<h6 onkeyup="",<hr align="",<hr width="",<hr size="",<hr noshade="",<hr color="#333333",<hr class="",<hr id="",<hr style="",<hr title="",<hr onclick="",<hr ondblclick="",<hr onmousedown="",<hr onmouseup="",<hr onmouseover="",<hr onmousemove="",<hr onmouseout="",<hr onkeypress="",<hr onkeydown="",<hr onkeyup="",<html xmlns="",<html xml:lang="",<html lang="",<html dir="",<i class="",<i id="",<i style="",<i title="",<i dir="",<i lang="",<i onclick="",<i ondblclick="",<i onmousedown="",<i onmouseup="",<i onmouseover="",<i onmousemove="",<i onmouseout="",<i onkeypress="",<i onkeydown="",<i onkeyup="",<iframe src="",<iframe name="",<iframe width="",<iframe marginwidth="",<iframe height="",<iframe marginheight="",<iframe align="",<iframe scrolling="",<iframe frameborder="",<iframe hspace="",<iframe vspace="",<iframe class="",<iframe id="",<iframe style="",<iframe title="",<iframe longdesc="",<ilayer name="",<ilayer id="",<ilayer left="",<ilayer top="",<ilayer pagex="",<ilayer pagey="",<ilayer above="",<ilayer below="",<ilayer z-index="",<ilayer width="",<ilayer height="",<ilayer visibility="",<ilayer clip="",<ilayer bgcolor="",<ilayer background="",<ilayer src="",<ilayer onfocus="",<ilayer onblur="",<ilayer onload="",<ilayer onmouseover="",<ilayer onmouseout="",<img src="",<img alt="",<img name="",<img width="",<img height="",<img hspace="",<img vspace="",<img border="",<img align="",<img usemap="",<img ismap="ismap",<img dynsrc="",<img controls="",<img start="",<img loop="",<img lowsrc="",<img class="",<img id="",<img style="",<img title="",<img longdesc="",<img dir="",<img lang="",<img onclick="",<img ondblclick="",<img onmousedown="",<img onmouseup="",<img onmouseover="",<img onmousemove="",<img onmouseout="",<img onkeypress="",<img onkeydown="",<img onkeyup="",<input name="",<input type="",<input disabled="disabled",<input class="",<input id="",<input style="",<input accesskey="",<input tabindex="",<input title="",<input dir="",<input lang="",<input onfocus="",<input onblur="",<input onselect="",<input onchange="",<input onclick="",<input ondblclick="",<input onmousedown="",<input onmouseup="",<input onmouseover="",<input onmousemove="",<input onmouseout="",<input onkeypress="",<input onkeydown="",<input onkeyup="",<input value="",<input size="",<input maxlength="",<input readonly="readonly",<input checked="checked",<input src="",<input alt="",<input align="",<input usemap="",<input width="",<input height="",<input hspace="",<input vspace="",<input border="",<input accept="",<ins cite="",<ins datetime="",<ins class="",<ins id="",<ins style="",<ins title="",<ins dir="",<ins lang="",<ins onclick="",<ins ondblclick="",<ins onmousedown="",<ins onmouseup="",<ins onmouseover="",<ins onmousemove="",<ins onmouseout="",<ins onkeypress="",<ins onkeydown="",<ins onkeyup="",<kbd class="",<kbd id="",<kbd style="",<kbd title="",<kbd dir="",<kbd lang="",<kbd onclick="",<kbd ondblclick="",<kbd onmousedown="",<kbd onmouseup="",<kbd onmouseover="",<kbd onmousemove="",<kbd onmouseout="",<kbd onkeypress="",<kbd onkeydown="",<kbd onkeyup="",<label for="",<label class="",<label id="",<label style="",<label accesskey="",<label title="",<label dir="",<label lang="",<label onfocus="",<label onblur="",<label onclick="",<label ondblclick="",<label onmousedown="",<label onmouseup="",<label onmouseover="",<label onmousemove="",<label onmouseout="",<label onkeypress="",<label onkeydown="",<label onkeyup="",<layer name="",<layer left="",<layer top="",<layer pagex="",<layer pagey="",<layer above="",<layer below="",<layer z-index="",<layer width="",<layer height="",<layer visibility="",<layer clip="",<layer bgcolor="",<layer background="",<layer src="",<layer onfocus="",<layer onblur="",<layer onload="",<layer onmouseover="",<layer onmouseout="",<legend align="",<legend class="",<legend id="",<legend style="",<legend accesskey="",<legend title="",<legend dir="",<legend lang="",<legend onclick="",<legend ondblclick="",<legend onmousedown="",<legend onmouseup="",<legend onmouseover="",<legend onmousemove="",<legend onmouseout="",<legend onkeypress="",<legend onkeydown="",<legend onkeyup="",<li type="",<li value="",<li class="",<li id="",<li style="",<li title="",<li dir="",<li lang="",<li onclick="",<li ondblclick="",<li onmousedown="",<li onmouseup="",<li onmouseover="",<li onmousemove="",<li onmouseout="",<li onkeypress="",<li onkeydown="",<li onkeyup="",<link href="",<link rel="",<link rev="",<link title="",<link type="",<link media="",<link disabled="disabled",<link class="",<link id="",<link hreflang="",<link style="",<map name="",<map class="",<map id="",<map style="",<map title="",<map dir="",<map lang="",<map onfocus="",<map onblur="",<map onclick="",<map ondblclick="",<map onmousedown="",<map onmouseup="",<map onmouseover="",<map onmousemove="",<map onmouseout="",<map onkeypress="",<map onkeydown="",<map onkeyup="",<var class="",<var id="",<var style="",<var title="",<var dir="",<var lang="",<var onclick="",<var ondblclick="",<var onmousedown="",<var onmouseup="",<var onmouseover="",<var onmousemove="",<var onmouseout="",<var onkeypress="",<var onkeydown="",<var onkeyup="",<ul type="",<ul compact="",<ul class="",<ul id="",<ul style="",<ul title="",<ul dir="",<ul lang="",<ul onclick="",<ul ondblclick="",<ul onmousedown="",<ul onmouseup="",<ul onmouseover="",<ul onmousemove="",<ul onmouseout="",<ul onkeypress="",<ul onkeydown="",<ul onkeyup="",<tt class="",<tt id="",<tt style="",<tt title="",<tt dir="",<tt lang="",<tt onclick="",<tt ondblclick="",<tt onmousedown="",<tt onmouseup="",<tt onmouseover="",<tt onmousemove="",<tt onmouseout="",<tt onkeypress="",<tt onkeydown="",<tt onkeyup="",<tr align="",<tr valign="",<tr bordercolor="#CCCCCC",<tr bordercolorlight="",<tr bordercolordark="",<tr nowrap="",<tr bgcolor="",<tr class="",<tr id="",<tr style="",<tr title="",<tr dir="",<tr lang="en",<tr onclick="",<tr ondblclick="",<tr onmousedown="",<tr onmouseup="",<tr onmouseover="",<tr onmousemove="",<tr onmouseout="",<tr onkeypress="",<tr onkeydown="",<tr onkeyup="",<thead align="",<thead valign="",<thead bgcolor="",<thead class="",<thead id="",<thead style="",<thead title="",<thead dir="",<thead lang="",<thead onclick="",<thead ondblclick="",<thead onmousedown="",<thead onmouseup="",<thead onmouseover="",<thead onmousemove="",<thead onmouseout="",<thead onkeypress="",<thead onkeydown="",<thead onkeyup="",<th width="",<th height="",<th colspan="",<th rowspan="",<th align="",<th valign="",<th nowrap="",<th bordercolor="#CCCCCC",<th bordercolorlight="",<th bordercolordark="",<th background="",<th bgcolor="",<th class="",<th id="",<th style="",<th title="",<th axis="",<th headers="",<th scope="",<th abbr="",<th dir="",<th lang="",<th onclick="",<th ondblclick="",<th onmousedown="",<th onmouseup="",<th onmouseover="",<th onmousemove="",<th onmouseout="",<th onkeypress="",<th onkeydown="",<th onkeyup="",<tfoot align="",<tfoot valign="",<tfoot bgcolor="",<tfoot class="",<tfoot id="",<tfoot style="",<tfoot title="",<tfoot dir="",<tfoot lang="",<tfoot onclick="",<tfoot ondblclick="",<tfoot onmousedown="",<tfoot onmouseup="",<tfoot onmouseover="",<tfoot onmousemove="",<tfoot onmouseout="",<tfoot onkeypress="",<tfoot onkeydown="",<tfoot onkeyup="",<textarea name="",<textarea cols="",<textarea rows="",<textarea disabled="disabled",<textarea readonly="readonly",<textarea wrap="",<textarea class="",<textarea id="",<textarea style="",<textarea accesskey="",<textarea tabindex="",<textarea title="",<textarea dir="",<textarea lang="",<textarea onfocus="",<textarea onblur="",<textarea onselect="",<textarea onchange="",<textarea onclick="",<textarea ondblclick="",<textarea onmousedown="",<textarea onmouseup="",<textarea onmouseover="",<textarea onmousemove="",<textarea onmouseout="",<textarea onkeypress="",<textarea onkeydown="",<textarea onkeyup="",<td width="",<td height="",<td colspan="",<td rowspan="",<td align="",<td valign="",<td nowrap="",<td bordercolor="#CCCCCC",<td bordercolorlight="",<td bordercolordark="",<td background="",<td bgcolor="",<td class="",<td id="",<td style="",<td title="",<td axis="",<td headers="",<td scope="",<td abbr="",<td dir="",<td lang="",<td onclick="",<td ondblclick="",<td onmousedown="",<td onmouseup="",<td onmouseover="",<td onmousemove="",<td onmouseout="",<td onkeypress="",<td onkeydown="",<td onkeyup="",<tbody align="",<tbody valign="",<tbody bgcolor="",<tbody class="",<tbody id="",<tbody style="",<tbody title="",<tbody dir="",<tbody lang="",<tbody onclick="",<tbody ondblclick="",<tbody onmousedown="",<tbody onmouseup="",<tbody onmouseover="",<tbody onmousemove="",<tbody onmouseout="",<tbody onkeypress="",<tbody onkeydown="",<tbody onkeyup="",<table width="",<table height="",<table border="",<table align="",<table cellpadding="0",<table cellspacing="0",<table bordercolor="#CCCCCC",<table bordercolorlight="",<table bordercolordark="",<table datapagesize="",<table background="",<table cols="",<table bgcolor="",<table frame="",<table rules="",<table dir="",<table lang="",<table onclick="",<table ondblclick="",<table onmousedown="",<table onmouseup="",<table onmouseover="",<table onmousemove="",<table onmouseout="",<table onkeypress="",<table onkeydown="",<table onkeyup="",<table class="",<table id="",<table style="",<table title="",<table summary="",<sup class="",<sup id="",<sup style="",<sup title="",<sup dir="",<sup lang="",<sup onclick="",<sup ondblclick="",<sup onmousedown="",<sup onmouseup="",<sup onmouseover="",<sup onmousemove="",<sup onmouseout="",<sup onkeypress="",<sup onkeydown="",<sup onkeyup="",<sub class="",<sub id="",<sub style="",<sub title="",<sub dir="",<sub lang="",<sub onclick="",<sub ondblclick="",<sub onmousedown="",<sub onmouseup="",<sub onmouseover="",<sub onmousemove="",<sub onmouseout="",<sub onkeypress="",<sub onkeydown="",<sub onkeyup="",<style type="",<style media="",<style disabled="disabled",<style title="",<strong class="",<strong id="",<strong style="",<strong title="",<strong dir="",<strong lang="",<strong onclick="",<strong ondblclick="",<strong onmousedown="",<strong onmouseup="",<strong onmouseover="",<strong onmousemove="",<strong onmouseout="",<strong onkeypress="",<strong onkeydown="",<strong onkeyup="",<span class="",<span id="",<span style="",<span title="",<span dir="",<span lang="",<span onclick="",<span ondblclick="",<span onmousedown="",<span onmouseup="",<span onmouseover="",<span onmousemove="",<span onmouseout="",<span onkeypress="",<span onkeydown="",<span onkeyup="",<sound src="",<sound loop="",<sound delay="",<small class="",<small id="",<small style="",<small title="",<small dir="",<small lang="",<small onclick="",<small ondblclick="",<small onmousedown="",<small onmouseup="",<small onmouseover="",<small onmousemove="",<small onmouseout="",<small onkeypress="",<small onkeydown="",<small onkeyup="",<select name="",<select size="",<select multiple="",<select disabled="disabled",<select class="",<select id="",<select style="",<select accesskey="",<select tabindex="",<select title="",<select dir="",<select lang="",<select onfocus="",<select onblur="",<select onchange="",<script language="",<script src="",<script type="",<script runat="",<script defer="defer",<samp class="",<samp id="",<samp style="",<samp title="",<samp dir="",<samp lang="",<samp onclick="",<samp ondblclick="",<samp onmousedown="",<samp onmouseup="",<samp onmouseover="",<samp onmousemove="",<samp onmouseout="",<samp onkeypress="",<samp onkeydown="",<samp onkeyup="",<q cite="",<q class="",<q id="",<q style="",<q title="",<q dir="",<q lang="",<q onclick="",<q ondblclick="",<q onmousedown="",<q onmouseup="",<q onmouseover="",<q onmousemove="",<q onmouseout="",<q onkeypress="",<q onkeydown="",<q onkeyup="",<pre class="",<pre id="",<pre style="",<pre title="",<pre dir="",<pre lang="",<pre onclick="",<pre ondblclick="",<pre onmousedown="",<pre onmouseup="",<pre onmouseover="",<pre onmousemove="",<pre onmouseout="",<pre onkeypress="",<pre onkeydown="",<pre onkeyup="",<param name="",<param value="",<param valuetype="",<param type="",<param id="",<p align="",<p class="",<p id="",<p style="",<p title="",<p dir="",<p lang="",<p onclick="",<p ondblclick="",<p onmousedown="",<p onmouseup="",<p onmouseover="",<p onmousemove="",<p onmouseout="",<p onkeypress="",<p onkeydown="",<p onkeyup="",<option value="",<option selected="",<option disabled="disabled",<option class="",<option id="",<option style="",<option title="",<option label="",<option dir="",<option lang="",<option onfocus="",<option onblur="",<option onchange="",<option onclick="",<option ondblclick="",<option onmousedown="",<option onmouseup="",<option onmouseover="",<option onmousemove="",<option onmouseout="",<option onkeypress="",<option onkeydown="",<option onkeyup="",<optgroup label="",<optgroup disabled="disabled",<optgroup class="",<optgroup id="",<optgroup style="",<optgroup title="",<optgroup dir="",<optgroup lang="",<optgroup onfocus="",<optgroup onblur="",<optgroup onchange="",<optgroup onclick="",<optgroup ondblclick="",<optgroup onmousedown="",<optgroup onmouseup="",<optgroup onmouseover="",<optgroup onmousemove="",<optgroup onmouseout="",<optgroup onkeypress="",<optgroup onkeydown="",<optgroup onkeyup="",<ol start="",<ol type="",<ol compact="",<ol class="",<ol id="",<ol style="",<ol title="",<ol dir="",<ol lang="",<ol onclick="",<ol ondblclick="",<ol onmousedown="",<ol onmouseup="",<ol onmouseover="",<ol onmousemove="",<ol onmouseout="",<ol onkeypress="",<ol onkeydown="",<ol onkeyup="",<object noexternaldata="",<object classid="",<object codebase="",<object codetype="",<object data="",<object type="",<object archive="",<object declare="",<object name="",<object width="",<object height="",<object hspace="",<object vspace="",<object align="",<object border="",<object standby="",<object class="",<object id="",<object style="",<object accesskey="",<object tabindex="",<object title="",<object usemap="",<object dir="",<object lang="",<object onclick="",<object ondblclick="",<object onmousedown="",<object onmouseup="",<object onmouseover="",<object onmousemove="",<object onmouseout="",<object onkeypress="",<object onkeydown="",<object onkeyup="",<noscript class="",<noscript id="",<noscript style="",<noscript title="",<noframes class="",<noframes id="",<noframes style="",<noframes title="",<multicol cols="",<multicol width="",<multicol gutter="",<meta name="",<meta http-equiv="",<meta content="",<marquee behavior="",<marquee align="",<marquee direction="",<marquee bgcolor="",<marquee width="",<marquee hspace="",<marquee height="",<marquee vspace="",<marquee loop="",<marquee scrollamount="",<marquee scrolldelay="",<marquee truespeed="",<marquee class="",<marquee id="",<marquee style="",<marquee title="",<marquee dir="",<marquee lang="",<marquee onclick="",<marquee ondblclick="",<marquee onmousedown="",<marquee onmouseup="",<marquee onmouseover="",<marquee onmousemove="",<marquee onmouseout="",<marquee onkeypress="",<marquee onkeydown="",<marquee onkeyup="",<A HREF="",<A NAME="",<A TITLE="",<A TARGET="",<A CHARSET="",<A CLASS="",<A ID="",<A STYLE="",<A HREFLANG="",<A ACCESSKEY="",<A TABINDEX="",<A REL="",<A REV="",<A SHAPE="",<A COORDS="",<A DIR="",<A LANG="",<A onFocus="",<A onBlur="",<A onClick="",<A onDblClick="",<A onMouseDown="",<A onMouseUp="",<A onMouseOver="",<A onMouseMove="",<A onMouseOut="",<A onKeyPress="",<A onKeyDown="",<A onKeyUp="",<ABBR CLASS="",<ABBR ID="",<ABBR STYLE="",<ABBR TITLE="",<ABBR DIR="",<ABBR LANG="",<ABBR onClick="",<ABBR onDblClick="",<ABBR onMouseDown="",<ABBR onMouseUp="",<ABBR onMouseOver="",<ABBR onMouseMove="",<ABBR onMouseOut="",<ABBR onKeyPress="",<ABBR onKeyDown="",<ABBR onKeyUp="",<ACRONYM CLASS="",<ACRONYM ID="",<ACRONYM STYLE="",<ACRONYM TITLE="",<ACRONYM DIR="",<ACRONYM LANG="",<ACRONYM onClick="",<ACRONYM onDblClick="",<ACRONYM onMouseDown="",<ACRONYM onMouseUp="",<ACRONYM onMouseOver="",<ACRONYM onMouseMove="",<ACRONYM onMouseOut="",<ACRONYM onKeyPress="",<ACRONYM onKeyDown="",<ACRONYM onKeyUp="",<ADDRESS CLASS="",<ADDRESS ID="",<ADDRESS STYLE="",<ADDRESS TITLE="",<ADDRESS DIR="",<ADDRESS LANG="",<ADDRESS onClick="",<ADDRESS onDblClick="",<ADDRESS onMouseDown="",<ADDRESS onMouseUp="",<ADDRESS onMouseOver="",<ADDRESS onMouseMove="",<ADDRESS onMouseOut="",<ADDRESS onKeyPress="",<ADDRESS onKeyDown="",<ADDRESS onKeyUp="",<APPLET NOEXTERNALDATA="",<APPLET CODE="",<APPLET CODEBASE="",<APPLET NAME="",<APPLET ALT="",<APPLET WIDTH="",<APPLET HEIGHT="",<APPLET HSPACE="",<APPLET VSPACE="",<APPLET ALIGN="",<APPLET CABBASE="",<APPLET MAYSCRIPT="",<APPLET ARCHIVE="",<APPLET CLASS="",<APPLET ID="",<APPLET STYLE="",<AREA NAME="",<AREA VALUE="",<AREA SHAPE="",<AREA COORDS="",<AREA HREF="",<AREA TARGET="",<AREA ALT="",<AREA DISABLED="DISABLED",<AREA CLASS="",<AREA ID="",<AREA STYLE="",<AREA ACCESSKEY="",<AREA TABINDEX="",<AREA TITLE="",<AREA DIR="",<AREA LANG="",<AREA onFocus="",<AREA onBlur="",<AREA onClick="",<AREA onDblClick="",<AREA onMouseDown="",<AREA onMouseUp="",<AREA onMouseOver="",<AREA onMouseMove="",<AREA onMouseOut="",<AREA onKeyPress="",<AREA onKeyDown="",<AREA onKeyUp="",<B CLASS="",<B ID="",<B STYLE="",<B TITLE="",<B DIR="",<B LANG="",<B onClick="",<B onDblClick="",<B onMouseDown="",<B onMouseUp="",<B onMouseOver="",<B onMouseMove="",<B onMouseOut="",<B onKeyPress="",<B onKeyDown="",<B onKeyUp="",<BASE HREF="",<BASE TARGET="",<BASEFONT SIZE="",<BASEFONT FACE="",<BASEFONT COLOR="",<BASEFONT ID="",<BDO DIR="",<BDO LANG="",<BDO CLASS="",<BDO ID="",<BDO STYLE="",<BDO TITLE="",<BGSOUND SRC="",<BGSOUND LOOP="",<BGSOUND BALANCE="",<BGSOUND VOLUME="",<BGSOUND DELAY="",<BIG CLASS="",<BIG ID="",<BIG STYLE="",<BIG TITLE="",<BIG DIR="",<BIG LANG="",<BIG onClick="",<BIG onDblClick="",<BIG onMouseDown="",<BIG onMouseUp="",<BIG onMouseOver="",<BIG onMouseMove="",<BIG onMouseOut="",<BIG onKeyPress="",<BIG onKeyDown="",<BIG onKeyUp="",<BLOCKQUOTE CITE="",<BLOCKQUOTE CLASS="",<BLOCKQUOTE ID="",<BLOCKQUOTE STYLE="",<BLOCKQUOTE TITLE="",<BLOCKQUOTE DIR="",<BLOCKQUOTE LANG="",<BLOCKQUOTE onClick="",<BLOCKQUOTE onDblClick="",<BLOCKQUOTE onMouseDown="",<BLOCKQUOTE onMouseUp="",<BLOCKQUOTE onMouseOver="",<BLOCKQUOTE onMouseMove="",<BLOCKQUOTE onMouseOut="",<BLOCKQUOTE onKeyPress="",<BLOCKQUOTE onKeyDown="",<BLOCKQUOTE onKeyUp="",<BODY BGCOLOR="",<BODY BACKGROUND="",<BODY TEXT="",<BODY LINK="",<BODY VLINK="",<BODY ALINK="",<BODY LEFTMARGIN="",<BODY TOPMARGIN="",<BODY BGPROPERTIES="",<BODY RIGHTMARGIN="",<BODY BOTTOMMARGIN="",<BODY MARGINWIDTH="",<BODY MARGINHEIGHT="",<BODY CLASS="",<BODY ID="",<BODY STYLE="",<BODY TITLE="",<BODY DIR="",<BODY LANG="",<BODY onLoad="",<BODY onUnload="",<BODY onBlur="",<BODY onError="",<BODY onFocus="",<BODY onResize="",<BR CLEAR="",<BR CLASS="",<BR ID="",<BR STYLE="",<BR TITLE="",<BUTTON NAME="",<BUTTON VALUE="",<BUTTON TYPE="",<BUTTON DISABLED="DISABLED",<BUTTON CLASS="",<BUTTON ID="",<BUTTON STYLE="",<BUTTON ACCESSKEY="",<BUTTON TABINDEX="",<BUTTON TITLE="",<BUTTON DIR="",<BUTTON LANG="",<BUTTON onFocus="",<BUTTON onBlur="",<BUTTON onClick="",<BUTTON onDblClick="",<BUTTON onMouseDown="",<BUTTON onMouseUp="",<BUTTON onMouseOver="",<BUTTON onMouseMove="",<BUTTON onMouseOut="",<BUTTON onKeyPress="",<BUTTON onKeyDown="",<BUTTON onKeyUp="",<CAPTION ALIGN="",<CAPTION VALIGN="",<CAPTION CLASS="",<CAPTION ID="",<CAPTION STYLE="",<CAPTION TITLE="",<CAPTION DIR="",<CAPTION LANG="",<CAPTION onClick="",<CAPTION onDblClick="",<CAPTION onMouseDown="",<CAPTION onMouseUp="",<CAPTION onMouseOver="",<CAPTION onMouseMove="",<CAPTION onMouseOut="",<CAPTION onKeyPress="",<CAPTION onKeyDown="",<CAPTION onKeyUp="",<CITE CLASS="",<CITE ID="",<CITE STYLE="",<CITE TITLE="",<CITE DIR="",<CITE LANG="",<CITE onClick="",<CITE onDblClick="",<CITE onMouseDown="",<CITE onMouseUp="",<CITE onMouseOver="",<CITE onMouseMove="",<CITE onMouseOut="",<CITE onKeyPress="",<CITE onKeyDown="",<CITE onKeyUp="",<CODE CLASS="",<CODE ID="",<CODE STYLE="",<CODE TITLE="",<CODE DIR="",<CODE LANG="",<CODE onClick="",<CODE onDblClick="",<CODE onMouseDown="",<CODE onMouseUp="",<CODE onMouseOver="",<CODE onMouseMove="",<CODE onMouseOut="",<CODE onKeyPress="",<CODE onKeyDown="",<CODE onKeyUp="",<COL ALIGN="",<COL VALIGN="",<COL SPAN="",<COL WIDTH="",<COL CLASS="",<COL ID="",<COL STYLE="",<COL TITLE="",<COL DIR="",<COL LANG="",<COL onClick="",<COL onDblClick="",<COL onMouseDown="",<COL onMouseUp="",<COL onMouseOver="",<COL onMouseMove="",<COL onMouseOut="",<COL onKeyPress="",<COL onKeyDown="",<COL onKeyUp="",<COLGROUP ALIGN="",<COLGROUP VALIGN="",<COLGROUP SPAN="",<COLGROUP WIDTH="",<COLGROUP CLASS="",<COLGROUP ID="",<COLGROUP STYLE="",<COLGROUP TITLE="",<COLGROUP DIR="",<COLGROUP LANG="",<COLGROUP onClick="",<COLGROUP onDblClick="",<COLGROUP onMouseDown="",<COLGROUP onMouseUp="",<COLGROUP onMouseOver="",<COLGROUP onMouseMove="",<COLGROUP onMouseOut="",<COLGROUP onKeyPress="",<COLGROUP onKeyDown="",<COLGROUP onKeyUp="",<DD CLASS="",<DD ID="",<DD STYLE="",<DD TITLE="",<DD DIR="",<DD LANG="",<DD onClick="",<DD onDblClick="",<DD onMouseDown="",<DD onMouseUp="",<DD onMouseOver="",<DD onMouseMove="",<DD onMouseOut="",<DD onKeyPress="",<DD onKeyDown="",<DD onKeyUp="",<DEL CITE="",<DEL DATETIME="",<DEL CLASS="",<DEL ID="",<DEL STYLE="",<DEL TITLE="",<DEL DIR="",<DEL LANG="",<DEL onClick="",<DEL onDblClick="",<DEL onMouseDown="",<DEL onMouseUp="",<DEL onMouseOver="",<DEL onMouseMove="",<DEL onMouseOut="",<DEL onKeyPress="",<DEL onKeyDown="",<DEL onKeyUp="",<DFN CLASS="",<DFN ID="",<DFN STYLE="",<DFN TITLE="",<DFN DIR="",<DFN LANG="",<DFN onClick="",<DFN onDblClick="",<DFN onMouseDown="",<DFN onMouseUp="",<DFN onMouseOver="",<DFN onMouseMove="",<DFN onMouseOut="",<DFN onKeyPress="",<DFN onKeyDown="",<DFN onKeyUp="",<DIV ALIGN="",<DIV CLASS="",<DIV ID="",<DIV STYLE="",<DIV TITLE="",<DIV DIR="",<DIV LANG="",<DIV onClick="",<DIV onDblClick="",<DIV onMouseDown="",<DIV onMouseUp="",<DIV onMouseOver="",<DIV onMouseMove="",<DIV onMouseOut="",<DIV onKeyPress="",<DIV onKeyDown="",<DIV onKeyUp="",<DL COMPACT="",<DL CLASS="",<DL ID="",<DL STYLE="",<DL TITLE="",<DL DIR="",<DL LANG="",<DL onClick="",<DL onDblClick="",<DL onMouseDown="",<DL onMouseUp="",<DL onMouseOver="",<DL onMouseMove="",<DL onMouseOut="",<DL onKeyPress="",<DL onKeyDown="",<DL onKeyUp="",<DT CLASS="",<DT ID="",<DT STYLE="",<DT TITLE="",<DT DIR="",<DT LANG="",<DT onClick="",<DT onDblClick="",<DT onMouseDown="",<DT onMouseUp="",<DT onMouseOver="",<DT onMouseMove="",<DT onMouseOut="",<DT onKeyPress="",<DT onKeyDown="",<DT onKeyUp="",<EM CLASS="",<EM ID="",<EM STYLE="",<EM TITLE="",<EM DIR="",<EM LANG="",<EM onClick="",<EM onDblClick="",<EM onMouseDown="",<EM onMouseUp="",<EM onMouseOver="",<EM onMouseMove="",<EM onMouseOut="",<EM onKeyPress="",<EM onKeyDown="",<EM onKeyUp="",<EMBED SRC="",<EMBED WIDTH="",<EMBED HEIGHT="",<EMBED HSPACE="",<EMBED VSPACE="",<EMBED HIDDEN="",<EMBED AUTOSTART="",<EMBED LOOP="",<EMBED ALIGN="",<EMBED CLASS="",<EMBED STYLE="",<EMBED DIR="",<EMBED LANG="",<FIELDSET CLASS="",<FIELDSET ID="",<FIELDSET STYLE="",<FIELDSET TITLE="",<FIELDSET ACCESSKEY="",<FIELDSET DIR="",<FIELDSET LANG="",<FIELDSET onClick="",<FIELDSET onDblClick="",<FIELDSET onMouseDown="",<FIELDSET onMouseUp="",<FIELDSET onMouseOver="",<FIELDSET onMouseMove="",<FIELDSET onMouseOut="",<FIELDSET onKeyPress="",<FIELDSET onKeyDown="",<FIELDSET onKeyUp="",<FONT COLOR="",<FONT SIZE="",<FONT FACE="",<FONT POINTSIZE="",<FONT CLASS="",<FONT ID="",<FONT STYLE="",<FONT TITLE="",<FONT DIR="",<FONT LANG="",<FORM ACTION="",<FORM METHOD="",<FORM ENCTYPE="",<FORM NAME="",<FORM TARGET="",<FORM CLASS="",<FORM ID="",<FORM STYLE="",<FORM TITLE="",<FORM DIR="",<FORM LANG="",<FORM runat="",<FORM onSubmit="",<FORM onReset="",<FORM onClick="",<FORM onDblClick="",<FORM onMouseDown="",<FORM onMouseUp="",<FORM onMouseOver="",<FORM onMouseMove="",<FORM onMouseOut="",<FORM onKeyPress="",<FORM onKeyDown="",<FORM onKeyUp="",<FRAME SRC="",<FRAME NAME="",<FRAME FRAMEBORDER="",<FRAME SCROLLING="",<FRAME NORESIZE="",<FRAME MARGINWIDTH="",<FRAME MARGINHEIGHT="",<FRAME BORDERCOLOR="",<FRAME CLASS="",<FRAME ID="",<FRAME STYLE="",<FRAME TITLE="",<FRAME LONGDESC="",<FRAMESET ROWS="",<FRAMESET COLS="",<FRAMESET FRAMESPACING="",<FRAMESET FRAMEBORDER="",<FRAMESET BORDER="",<FRAMESET BORDERCOLOR="",<FRAMESET CLASS="",<FRAMESET ID="",<FRAMESET STYLE="",<FRAMESET TITLE="",<FRAMESET onLoad="",<FRAMESET onUnload="",<H1 ALIGN="",<H1 CLASS="",<H1 ID="",<H1 STYLE="",<H1 TITLE="",<H1 DIR="",<H1 LANG="",<H1 onClick="",<H1 onDblClick="",<H1 onMouseDown="",<H1 onMouseUp="",<H1 onMouseOver="",<H1 onMouseMove="",<H1 onMouseOut="",<H1 onKeyPress="",<H1 onKeyDown="",<H1 onKeyUp="",<H2 ALIGN="",<H2 CLASS="",<H2 ID="",<H2 STYLE="",<H2 TITLE="",<H2 DIR="",<H2 LANG="",<H2 onClick="",<H2 onDblClick="",<H2 onMouseDown="",<H2 onMouseUp="",<H2 onMouseOver="",<H2 onMouseMove="",<H2 onMouseOut="",<H2 onKeyPress="",<H2 onKeyDown="",<H2 onKeyUp="",<H3 ALIGN="",<H3 CLASS="",<H3 ID="",<H3 STYLE="",<H3 TITLE="",<H3 DIR="",<H3 LANG="",<H3 onClick="",<H3 onDblClick="",<H3 onMouseDown="",<H3 onMouseUp="",<H3 onMouseOver="",<H3 onMouseMove="",<H3 onMouseOut="",<H3 onKeyPress="",<H3 onKeyDown="",<H3 onKeyUp="",<H4 ALIGN="",<H4 CLASS="",<H4 ID="",<H4 STYLE="",<H4 TITLE="",<H4 DIR="",<H4 LANG="",<H4 onClick="",<H4 onDblClick="",<H4 onMouseDown="",<H4 onMouseUp="",<H4 onMouseOver="",<H4 onMouseMove="",<H4 onMouseOut="",<H4 onKeyPress="",<H4 onKeyDown="",<H4 onKeyUp="",<H5 ALIGN="",<H5 CLASS="",<H5 ID="",<H5 STYLE="",<H5 TITLE="",<H5 DIR="",<H5 LANG="",<H5 onClick="",<H5 onDblClick="",<H5 onMouseDown="",<H5 onMouseUp="",<H5 onMouseOver="",<H5 onMouseMove="",<H5 onMouseOut="",<H5 onKeyPress="",<H5 onKeyDown="",<H5 onKeyUp="",<H6 ALIGN="",<H6 CLASS="",<H6 ID="",<H6 STYLE="",<H6 TITLE="",<H6 DIR="",<H6 LANG="",<H6 onClick="",<H6 onDblClick="",<H6 onMouseDown="",<H6 onMouseUp="",<H6 onMouseOver="",<H6 onMouseMove="",<H6 onMouseOut="",<H6 onKeyPress="",<H6 onKeyDown="",<H6 onKeyUp="",<HR ALIGN="",<HR WIDTH="",<HR SIZE="",<HR NOSHADE="",<HR COLOR="",<HR CLASS="",<HR ID="",<HR STYLE="",<HR TITLE="",<HR onClick="",<HR onDblClick="",<HR onMouseDown="",<HR onMouseUp="",<HR onMouseOver="",<HR onMouseMove="",<HR onMouseOut="",<HR onKeyPress="",<HR onKeyDown="",<HR onKeyUp="",<HTML xmlns="",<HTML xml:lang="",<HTML lang="",<HTML dir="",<I CLASS="",<I ID="",<I STYLE="",<I TITLE="",<I DIR="",<I LANG="",<I onClick="",<I onDblClick="",<I onMouseDown="",<I onMouseUp="",<I onMouseOver="",<I onMouseMove="",<I onMouseOut="",<I onKeyPress="",<I onKeyDown="",<I onKeyUp="",<IFRAME SRC="",<IFRAME NAME="",<IFRAME WIDTH="",<IFRAME MARGINWIDTH="",<IFRAME HEIGHT="",<IFRAME MARGINHEIGHT="",<IFRAME ALIGN="",<IFRAME SCROLLING="",<IFRAME FRAMEBORDER="",<IFRAME HSPACE="",<IFRAME VSPACE="",<IFRAME CLASS="",<IFRAME ID="",<IFRAME STYLE="",<IFRAME TITLE="",<IFRAME LONGDESC="",<ILAYER NAME="",<ILAYER ID="",<ILAYER LEFT="",<ILAYER TOP="",<ILAYER PAGEX="",<ILAYER PAGEY="",<ILAYER ABOVE="",<ILAYER BELOW="",<ILAYER Z-INDEX="",<ILAYER WIDTH="",<ILAYER HEIGHT="",<ILAYER VISIBILITY="",<ILAYER CLIP="",<ILAYER BGCOLOR="",<ILAYER BACKGROUND="",<ILAYER SRC="",<ILAYER onFocus="",<ILAYER onBlur="",<ILAYER onLoad="",<ILAYER onMouseOver="",<ILAYER onMouseOut="",<IMG SRC="",<IMG ALT="",<IMG NAME="",<IMG WIDTH="",<IMG HEIGHT="",<IMG HSPACE="",<IMG VSPACE="",<IMG BORDER="",<IMG ALIGN="",<IMG USEMAP="",<IMG ISMAP="ISMAP",<IMG DYNSRC="",<IMG CONTROLS="",<IMG START="",<IMG LOOP="",<IMG LOWSRC="",<IMG CLASS="",<IMG ID="",<IMG STYLE="",<IMG TITLE="",<IMG LONGDESC="",<IMG DIR="",<IMG LANG="",<IMG onClick="",<IMG onDblClick="",<IMG onMouseDown="",<IMG onMouseUp="",<IMG onMouseOver="",<IMG onMouseMove="",<IMG onMouseOut="",<IMG onKeyPress="",<IMG onKeyDown="",<IMG onKeyUp="",<INPUT NAME="",<INPUT TYPE="",<INPUT DISABLED="DISABLED",<INPUT CLASS="",<INPUT ID="",<INPUT STYLE="",<INPUT ACCESSKEY="",<INPUT TABINDEX="",<INPUT TITLE="",<INPUT DIR="",<INPUT LANG="",<INPUT onFocus="",<INPUT onBlur="",<INPUT onSelect="",<INPUT onChange="",<INPUT onClick="",<INPUT onDblClick="",<INPUT onMouseDown="",<INPUT onMouseUp="",<INPUT onMouseOver="",<INPUT onMouseMove="",<INPUT onMouseOut="",<INPUT onKeyPress="",<INPUT onKeyDown="",<INPUT onKeyUp="",<INPUT VALUE="",<INPUT SIZE="",<INPUT MAXLENGTH="",<INPUT READONLY="READONLY",<INPUT CHECKED="CHECKED",<INPUT SRC="",<INPUT ALT="",<INPUT ALIGN="",<INPUT USEMAP="",<INPUT WIDTH="",<INPUT HEIGHT="",<INPUT HSPACE="",<INPUT VSPACE="",<INPUT BORDER="",<INPUT ACCEPT="",<INS CITE="",<INS DATETIME="",<INS CLASS="",<INS ID="",<INS STYLE="",<INS TITLE="",<INS DIR="",<INS LANG="",<INS onClick="",<INS onDblClick="",<INS onMouseDown="",<INS onMouseUp="",<INS onMouseOver="",<INS onMouseMove="",<INS onMouseOut="",<INS onKeyPress="",<INS onKeyDown="",<INS onKeyUp="",<KBD CLASS="",<KBD ID="",<KBD STYLE="",<KBD TITLE="",<KBD DIR="",<KBD LANG="",<KBD onClick="",<KBD onDblClick="",<KBD onMouseDown="",<KBD onMouseUp="",<KBD onMouseOver="",<KBD onMouseMove="",<KBD onMouseOut="",<KBD onKeyPress="",<KBD onKeyDown="",<KBD onKeyUp="",<LABEL FOR="",<LABEL CLASS="",<LABEL ID="",<LABEL STYLE="",<LABEL ACCESSKEY="",<LABEL TITLE="",<LABEL DIR="",<LABEL LANG="",<LABEL onFocus="",<LABEL onBlur="",<LABEL onClick="",<LABEL onDblClick="",<LABEL onMouseDown="",<LABEL onMouseUp="",<LABEL onMouseOver="",<LABEL onMouseMove="",<LABEL onMouseOut="",<LABEL onKeyPress="",<LABEL onKeyDown="",<LABEL onKeyUp="",<LAYER NAME="",<LAYER LEFT="",<LAYER TOP="",<LAYER PAGEX="",<LAYER PAGEY="",<LAYER ABOVE="",<LAYER BELOW="",<LAYER Z-INDEX="",<LAYER WIDTH="",<LAYER HEIGHT="",<LAYER VISIBILITY="",<LAYER CLIP="",<LAYER BGCOLOR="",<LAYER BACKGROUND="",<LAYER SRC="",<LAYER onFocus="",<LAYER onBlur="",<LAYER onLoad="",<LAYER onMouseOver="",<LAYER onMouseOut="",<LEGEND ALIGN="",<LEGEND CLASS="",<LEGEND ID="",<LEGEND STYLE="",<LEGEND ACCESSKEY="",<LEGEND TITLE="",<LEGEND DIR="",<LEGEND LANG="",<LEGEND onClick="",<LEGEND onDblClick="",<LEGEND onMouseDown="",<LEGEND onMouseUp="",<LEGEND onMouseOver="",<LEGEND onMouseMove="",<LEGEND onMouseOut="",<LEGEND onKeyPress="",<LEGEND onKeyDown="",<LEGEND onKeyUp="",<LI TYPE="",<LI VALUE="",<LI CLASS="",<LI ID="",<LI STYLE="",<LI TITLE="",<LI DIR="",<LI LANG="",<LI onClick="",<LI onDblClick="",<LI onMouseDown="",<LI onMouseUp="",<LI onMouseOver="",<LI onMouseMove="",<LI onMouseOut="",<LI onKeyPress="",<LI onKeyDown="",<LI onKeyUp="",<LINK HREF="",<LINK REL="",<LINK REV="",<LINK TITLE="",<LINK TYPE="",<LINK MEDIA="",<LINK DISABLED="DISABLED",<LINK CLASS="",<LINK ID="",<LINK HREFLANG="",<LINK STYLE="",<MAP NAME="",<MAP CLASS="",<MAP ID="",<MAP STYLE="",<MAP TITLE="",<MAP DIR="",<MAP LANG="",<MAP onFocus="",<MAP onBlur="",<MAP onClick="",<MAP onDblClick="",<MAP onMouseDown="",<MAP onMouseUp="",<MAP onMouseOver="",<MAP onMouseMove="",<MAP onMouseOut="",<MAP onKeyPress="",<MAP onKeyDown="",<MAP onKeyUp="",<VAR CLASS="",<VAR ID="",<VAR STYLE="",<VAR TITLE="",<VAR DIR="",<VAR LANG="",<VAR onClick="",<VAR onDblClick="",<VAR onMouseDown="",<VAR onMouseUp="",<VAR onMouseOver="",<VAR onMouseMove="",<VAR onMouseOut="",<VAR onKeyPress="",<VAR onKeyDown="",<VAR onKeyUp="",<UL TYPE="",<UL COMPACT="",<UL CLASS="",<UL ID="",<UL STYLE="",<UL TITLE="",<UL DIR="",<UL LANG="",<UL onClick="",<UL onDblClick="",<UL onMouseDown="",<UL onMouseUp="",<UL onMouseOver="",<UL onMouseMove="",<UL onMouseOut="",<UL onKeyPress="",<UL onKeyDown="",<UL onKeyUp="",<TT CLASS="",<TT ID="",<TT STYLE="",<TT TITLE="",<TT DIR="",<TT LANG="",<TT onClick="",<TT onDblClick="",<TT onMouseDown="",<TT onMouseUp="",<TT onMouseOver="",<TT onMouseMove="",<TT onMouseOut="",<TT onKeyPress="",<TT onKeyDown="",<TT onKeyUp="",<TR ALIGN="",<TR VALIGN="",<TR BORDERCOLOR="",<TR BORDERCOLORLIGHT="",<TR BORDERCOLORDARK="",<TR NOWRAP="",<TR BGCOLOR="",<TR CLASS="",<TR ID="",<TR STYLE="",<TR TITLE="",<TR DIR="",<TR LANG="",<TR onClick="",<TR onDblClick="",<TR onMouseDown="",<TR onMouseUp="",<TR onMouseOver="",<TR onMouseMove="",<TR onMouseOut="",<TR onKeyPress="",<TR onKeyDown="",<TR onKeyUp="",<THEAD ALIGN="",<THEAD VALIGN="",<THEAD BGCOLOR="",<THEAD CLASS="",<THEAD ID="",<THEAD STYLE="",<THEAD TITLE="",<THEAD DIR="",<THEAD LANG="",<THEAD onClick="",<THEAD onDblClick="",<THEAD onMouseDown="",<THEAD onMouseUp="",<THEAD onMouseOver="",<THEAD onMouseMove="",<THEAD onMouseOut="",<THEAD onKeyPress="",<THEAD onKeyDown="",<THEAD onKeyUp="",<TH WIDTH="",<TH HEIGHT="",<TH COLSPAN="",<TH ROWSPAN="",<TH ALIGN="",<TH VALIGN="",<TH NOWRAP="",<TH BORDERCOLOR="",<TH BORDERCOLORLIGHT="",<TH BORDERCOLORDARK="",<TH BACKGROUND="",<TH BGCOLOR="",<TH CLASS="",<TH ID="",<TH STYLE="",<TH TITLE="",<TH AXIS="",<TH HEADERS="",<TH SCOPE="",<TH ABBR="",<TH DIR="",<TH LANG="",<TH onClick="",<TH onDblClick="",<TH onMouseDown="",<TH onMouseUp="",<TH onMouseOver="",<TH onMouseMove="",<TH onMouseOut="",<TH onKeyPress="",<TH onKeyDown="",<TH onKeyUp="",<TFOOT ALIGN="",<TFOOT VALIGN="",<TFOOT BGCOLOR="",<TFOOT CLASS="",<TFOOT ID="",<TFOOT STYLE="",<TFOOT TITLE="",<TFOOT DIR="",<TFOOT LANG="",<TFOOT onClick="",<TFOOT onDblClick="",<TFOOT onMouseDown="",<TFOOT onMouseUp="",<TFOOT onMouseOver="",<TFOOT onMouseMove="",<TFOOT onMouseOut="",<TFOOT onKeyPress="",<TFOOT onKeyDown="",<TFOOT onKeyUp="",<TEXTAREA NAME="",<TEXTAREA COLS="",<TEXTAREA ROWS="",<TEXTAREA DISABLED="DISABLED",<TEXTAREA READONLY="READONLY",<TEXTAREA WRAP="",<TEXTAREA CLASS="",<TEXTAREA ID="",<TEXTAREA STYLE="",<TEXTAREA ACCESSKEY="",<TEXTAREA TABINDEX="",<TEXTAREA TITLE="",<TEXTAREA DIR="",<TEXTAREA LANG="",<TEXTAREA onFocus="",<TEXTAREA onBlur="",<TEXTAREA onSelect="",<TEXTAREA onChange="",<TEXTAREA onClick="",<TEXTAREA onDblClick="",<TEXTAREA onMouseDown="",<TEXTAREA onMouseUp="",<TEXTAREA onMouseOver="",<TEXTAREA onMouseMove="",<TEXTAREA onMouseOut="",<TEXTAREA onKeyPress="",<TEXTAREA onKeyDown="",<TEXTAREA onKeyUp="",<TD WIDTH="",<TD HEIGHT="",<TD COLSPAN="",<TD ROWSPAN="",<TD ALIGN="",<TD VALIGN="",<TD NOWRAP="",<TD BORDERCOLOR="",<TD BORDERCOLORLIGHT="",<TD BORDERCOLORDARK="",<TD BACKGROUND="",<TD BGCOLOR="",<TD CLASS="",<TD ID="",<TD STYLE="",<TD TITLE="",<TD AXIS="",<TD HEADERS="",<TD SCOPE="",<TD ABBR="",<TD DIR="",<TD LANG="",<TD onClick="",<TD onDblClick="",<TD onMouseDown="",<TD onMouseUp="",<TD onMouseOver="",<TD onMouseMove="",<TD onMouseOut="",<TD onKeyPress="",<TD onKeyDown="",<TD onKeyUp="",<TBODY ALIGN="",<TBODY VALIGN="",<TBODY BGCOLOR="",<TBODY CLASS="",<TBODY ID="",<TBODY STYLE="",<TBODY TITLE="",<TBODY DIR="",<TBODY LANG="",<TBODY onClick="",<TBODY onDblClick="",<TBODY onMouseDown="",<TBODY onMouseUp="",<TBODY onMouseOver="",<TBODY onMouseMove="",<TBODY onMouseOut="",<TBODY onKeyPress="",<TBODY onKeyDown="",<TBODY onKeyUp="",<TABLE WIDTH="",<TABLE HEIGHT="",<TABLE BORDER="",<TABLE ALIGN="",<TABLE CELLPADDING="0",<TABLE CELLSPACING="0",<TABLE BORDERCOLOR="",<TABLE BORDERCOLORLIGHT="",<TABLE BORDERCOLORDARK="",<TABLE DATAPAGESIZE="",<TABLE BACKGROUND="",<TABLE COLS="",<TABLE BGCOLOR="",<TABLE FRAME="",<TABLE RULES="",<TABLE DIR="",<TABLE LANG="",<TABLE onClick="",<TABLE onDblClick="",<TABLE onMouseDown="",<TABLE onMouseUp="",<TABLE onMouseOver="",<TABLE onMouseMove="",<TABLE onMouseOut="",<TABLE onKeyPress="",<TABLE onKeyDown="",<TABLE onKeyUp="",<TABLE CLASS="",<TABLE ID="",<TABLE STYLE="",<TABLE TITLE="",<TABLE SUMMARY="",<SUP CLASS="",<SUP ID="",<SUP STYLE="",<SUP TITLE="",<SUP DIR="",<SUP LANG="",<SUP onClick="",<SUP onDblClick="",<SUP onMouseDown="",<SUP onMouseUp="",<SUP onMouseOver="",<SUP onMouseMove="",<SUP onMouseOut="",<SUP onKeyPress="",<SUP onKeyDown="",<SUP onKeyUp="",<SUB CLASS="",<SUB ID="",<SUB STYLE="",<SUB TITLE="",<SUB DIR="",<SUB LANG="",<SUB onClick="",<SUB onDblClick="",<SUB onMouseDown="",<SUB onMouseUp="",<SUB onMouseOver="",<SUB onMouseMove="",<SUB onMouseOut="",<SUB onKeyPress="",<SUB onKeyDown="",<SUB onKeyUp="",<STYLE TYPE="",<STYLE MEDIA="",<STYLE DISABLED="DISABLED",<STYLE TITLE="",<STRONG CLASS="",<STRONG ID="",<STRONG STYLE="",<STRONG TITLE="",<STRONG DIR="",<STRONG LANG="",<STRONG onClick="",<STRONG onDblClick="",<STRONG onMouseDown="",<STRONG onMouseUp="",<STRONG onMouseOver="",<STRONG onMouseMove="",<STRONG onMouseOut="",<STRONG onKeyPress="",<STRONG onKeyDown="",<STRONG onKeyUp="",<SPAN CLASS="",<SPAN ID="",<SPAN STYLE="",<SPAN TITLE="",<SPAN DIR="",<SPAN LANG="",<SPAN onClick="",<SPAN onDblClick="",<SPAN onMouseDown="",<SPAN onMouseUp="",<SPAN onMouseOver="",<SPAN onMouseMove="",<SPAN onMouseOut="",<SPAN onKeyPress="",<SPAN onKeyDown="",<SPAN onKeyUp="",<SOUND SRC="",<SOUND LOOP="",<SOUND DELAY="",<SMALL CLASS="",<SMALL ID="",<SMALL STYLE="",<SMALL TITLE="",<SMALL DIR="",<SMALL LANG="",<SMALL onClick="",<SMALL onDblClick="",<SMALL onMouseDown="",<SMALL onMouseUp="",<SMALL onMouseOver="",<SMALL onMouseMove="",<SMALL onMouseOut="",<SMALL onKeyPress="",<SMALL onKeyDown="",<SMALL onKeyUp="",<SELECT NAME="",<SELECT SIZE="",<SELECT MULTIPLE="",<SELECT DISABLED="DISABLED",<SELECT CLASS="",<SELECT ID="",<SELECT STYLE="",<SELECT ACCESSKEY="",<SELECT TABINDEX="",<SELECT TITLE="",<SELECT DIR="",<SELECT LANG="",<SELECT onFocus="",<SELECT onBlur="",<SELECT onChange="",<SCRIPT language="",<SCRIPT SRC="",<SCRIPT TYPE="",<SCRIPT runat="",<SCRIPT DEFER="DEFER",<SAMP CLASS="",<SAMP ID="",<SAMP STYLE="",<SAMP TITLE="",<SAMP DIR="",<SAMP LANG="",<SAMP onClick="",<SAMP onDblClick="",<SAMP onMouseDown="",<SAMP onMouseUp="",<SAMP onMouseOver="",<SAMP onMouseMove="",<SAMP onMouseOut="",<SAMP onKeyPress="",<SAMP onKeyDown="",<SAMP onKeyUp="",<Q CITE="",<Q CLASS="",<Q ID="",<Q STYLE="",<Q TITLE="",<Q DIR="",<Q LANG="",<Q onClick="",<Q onDblClick="",<Q onMouseDown="",<Q onMouseUp="",<Q onMouseOver="",<Q onMouseMove="",<Q onMouseOut="",<Q onKeyPress="",<Q onKeyDown="",<Q onKeyUp="",<PRE CLASS="",<PRE ID="",<PRE STYLE="",<PRE TITLE="",<PRE DIR="",<PRE LANG="",<PRE onClick="",<PRE onDblClick="",<PRE onMouseDown="",<PRE onMouseUp="",<PRE onMouseOver="",<PRE onMouseMove="",<PRE onMouseOut="",<PRE onKeyPress="",<PRE onKeyDown="",<PRE onKeyUp="",<PARAM NAME="",<PARAM VALUE="",<PARAM VALUETYPE="",<PARAM TYPE="",<PARAM ID="",<P ALIGN="",<P CLASS="",<P ID="",<P STYLE="",<P TITLE="",<P DIR="",<P LANG="",<P onClick="",<P onDblClick="",<P onMouseDown="",<P onMouseUp="",<P onMouseOver="",<P onMouseMove="",<P onMouseOut="",<P onKeyPress="",<P onKeyDown="",<P onKeyUp="",<OPTION VALUE="",<OPTION SELECTED="",<OPTION DISABLED="DISABLED",<OPTION CLASS="",<OPTION ID="",<OPTION STYLE="",<OPTION TITLE="",<OPTION LABEL="",<OPTION DIR="",<OPTION LANG="",<OPTION onFocus="",<OPTION onBlur="",<OPTION onChange="",<OPTION onClick="",<OPTION onDblClick="",<OPTION onMouseDown="",<OPTION onMouseUp="",<OPTION onMouseOver="",<OPTION onMouseMove="",<OPTION onMouseOut="",<OPTION onKeyPress="",<OPTION onKeyDown="",<OPTION onKeyUp="",<OPTGROUP LABEL="",<OPTGROUP DISABLED="DISABLED",<OPTGROUP CLASS="",<OPTGROUP ID="",<OPTGROUP STYLE="",<OPTGROUP TITLE="",<OPTGROUP DIR="",<OPTGROUP LANG="",<OPTGROUP onFocus="",<OPTGROUP onBlur="",<OPTGROUP onChange="",<OPTGROUP onClick="",<OPTGROUP onDblClick="",<OPTGROUP onMouseDown="",<OPTGROUP onMouseUp="",<OPTGROUP onMouseOver="",<OPTGROUP onMouseMove="",<OPTGROUP onMouseOut="",<OPTGROUP onKeyPress="",<OPTGROUP onKeyDown="",<OPTGROUP onKeyUp="",<OL START="",<OL type="",<OL COMPACT="",<OL CLASS="",<OL ID="",<OL STYLE="",<OL TITLE="",<OL DIR="",<OL LANG="",<OL onClick="",<OL onDblClick="",<OL onMouseDown="",<OL onMouseUp="",<OL onMouseOver="",<OL onMouseMove="",<OL onMouseOut="",<OL onKeyPress="",<OL onKeyDown="",<OL onKeyUp="",<OBJECT NOEXTERNALDATA="",<OBJECT CLASSID="",<OBJECT CODEBASE="",<OBJECT CODETYPE="",<OBJECT DATA="",<OBJECT TYPE="",<OBJECT ARCHIVE="",<OBJECT DECLARE="",<OBJECT NAME="",<OBJECT WIDTH="",<OBJECT HEIGHT="",<OBJECT HSPACE="",<OBJECT VSPACE="",<OBJECT ALIGN="",<OBJECT BORDER="",<OBJECT STANDBY="",<OBJECT CLASS="",<OBJECT ID="",<OBJECT STYLE="",<OBJECT ACCESSKEY="",<OBJECT TABINDEX="",<OBJECT TITLE="",<OBJECT USEMAP="",<OBJECT DIR="",<OBJECT LANG="",<OBJECT onClick="",<OBJECT onDblClick="",<OBJECT onMouseDown="",<OBJECT onMouseUp="",<OBJECT onMouseOver="",<OBJECT onMouseMove="",<OBJECT onMouseOut="",<OBJECT onKeyPress="",<OBJECT onKeyDown="",<OBJECT onKeyUp="",<NOSCRIPT CLASS="",<NOSCRIPT ID="",<NOSCRIPT STYLE="",<NOSCRIPT TITLE="",<NOFRAMES CLASS="",<NOFRAMES ID="",<NOFRAMES STYLE="",<NOFRAMES TITLE="",<MULTICOL COLS="",<MULTICOL WIDTH="",<MULTICOL GUTTER="",<META NAME="",<META HTTP-EQUIV="",<META CONTENT="",<MARQUEE BEHAVIOR="",<MARQUEE ALIGN="",<MARQUEE DIRECTION="",<MARQUEE BGCOLOR="",<MARQUEE WIDTH="",<MARQUEE HSPACE="",<MARQUEE HEIGHT="",<MARQUEE VSPACE="",<MARQUEE LOOP="",<MARQUEE SCROLLAMOUNT="",<MARQUEE SCROLLDELAY="",<MARQUEE TRUESPEED="",<MARQUEE CLASS="",<MARQUEE ID="",<MARQUEE STYLE="",<MARQUEE TITLE="",<MARQUEE DIR="",<MARQUEE LANG="",<MARQUEE onClick="",<MARQUEE onDblClick="",<MARQUEE onMouseDown="",<MARQUEE onMouseUp="",<MARQUEE onMouseOver="",<MARQUEE onMouseMove="",<MARQUEE onMouseOut="",<MARQUEE onKeyPress="",<MARQUEE onKeyDown="",<MARQUEE onKeyUp="",
-
-
-
- uuid
- 69BD9C8F-15C0-4F67-8B7E-64E48B5E9E71
-
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Preferences/Completions HTML Tags.tmPreferences b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Preferences/Completions HTML Tags.tmPreferences
deleted file mode 100644
index 8470801..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Preferences/Completions HTML Tags.tmPreferences
+++ /dev/null
@@ -1,30 +0,0 @@
-
-
-
-
- name
- Completions HTML Tags
- scope
- text.html -(meta.tag | source), invalid.illegal.incomplete.html -source
- settings
-
- shellVariables
-
-
- name
- TM_COMPLETION_split
- value
- ,
-
-
- name
- TM_COMPLETIONS
- value
- html,head,title,base,link,meta,style,script,noscript,body,section,nav,article,aside,h1,h2,h3,h4,h5,h6,hgroup,header,footer,address,p,hr,br,pre,dialog,blockquote,ol,ul,li,dl,dt,dd,a,q,cite,em,strong,small,mark,dfn,abbr,time,progress,meter,code,var,samp,kbd,sub,sup,span,i,b,bdo,ruby,rt,rp,ins,del,figure,img,iframe,embed,object,param,video,audio,source,canvas,map,area,table,caption,colgroup,col,tbody,thead,tfoot,tr,td,th,form,fieldset,label,input,button,select,datalist,optgroup,option,textarea,output,details,datagrid,command,bb,menu,legend,div
-
-
-
- uuid
- 4720ADB8-DD17-4F97-A715-AFD72E22CE45
-
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Preferences/Miscellaneous.tmPreferences b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Preferences/Miscellaneous.tmPreferences
deleted file mode 100644
index b875dff..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Preferences/Miscellaneous.tmPreferences
+++ /dev/null
@@ -1,93 +0,0 @@
-
-
-
-
- name
- Miscellaneous
- scope
- text.html
- settings
-
- decreaseIndentPattern
- (?x)
- ^\s*
- (</(?!html)
- [A-Za-z0-9]+\b[^>]*>
- |-->
- |<\?(php)?\s+(else(if)?|end(if|for(each)?|while))
- |\}
- )
- highlightPairs
-
-
- (
- )
-
-
- {
- }
-
-
- [
- ]
-
-
- “
- ”
-
-
- <
- >
-
-
- increaseIndentPattern
- (?x)
- <(?!\?|area|base|br|col|frame|hr|html|img|input|link|meta|param|[^>]*/>)
- ([A-Za-z0-9]+)(?=\s|>)\b[^>]*>(?!.*</\1>)
- |<!--(?!.*-->)
- |<\?php.+?\b(if|else(?:if)?|for(?:each)?|while)\b.*:(?!.*end\1)
- |\{[^}"']*$
-
- indentNextLinePattern
- <!DOCTYPE(?!.*>)
- shellVariables
-
-
- name
- TM_HTML_EMPTY_TAGS
- value
- area|base|basefont|br|col|frame|hr|img|input|isindex|link|meta|param
-
-
- smartTypingPairs
-
-
- "
- "
-
-
- (
- )
-
-
- {
- }
-
-
- [
- ]
-
-
- “
- ”
-
-
- <
- >
-
-
-
- uuid
- FC34BE82-69DC-47B0-997A-37A8763D4E69
-
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Preferences/Symbol List - ID.tmPreferences b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Preferences/Symbol List - ID.tmPreferences
deleted file mode 100644
index 6769182..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Preferences/Symbol List - ID.tmPreferences
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-
-
- name
- Symbol List: ID
- scope
- text.html meta.toc-list.id.html
- settings
-
- symbolTransformation
- s/^/ID: /
-
- uuid
- E7C5859E-122D-4382-84BE-5AB584DC2409
-
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Preferences/Tag Preferences.tmPreferences b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Preferences/Tag Preferences.tmPreferences
deleted file mode 100644
index 85b6497..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Preferences/Tag Preferences.tmPreferences
+++ /dev/null
@@ -1,48 +0,0 @@
-
-
-
-
- name
- Tag Preferences
- scope
- meta.tag
- settings
-
- smartTypingPairs
-
-
- "
- "
-
-
- (
- )
-
-
- {
- }
-
-
- [
- ]
-
-
- “
- ”
-
-
- <
- >
-
-
- '
- '
-
-
- spellChecking
- 0
-
- uuid
- 73251DBE-EBD2-470F-8148-E6F2EC1A9641
-
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Preferences/Typing Pairs - Empty Tag.tmPreferences b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Preferences/Typing Pairs - Empty Tag.tmPreferences
deleted file mode 100644
index 8ca2a5e..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Preferences/Typing Pairs - Empty Tag.tmPreferences
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-
-
- name
- Typing Pairs: Empty Tag
- scope
- text.html invalid.illegal.incomplete
- settings
-
- smartTypingPairs
-
-
- ?
- ?
-
-
- %
- %
-
-
-
- uuid
- 6D6B631D-0D6C-413C-B4FA-1D535CBCE890
-
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Support/entities.txt b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Support/entities.txt
deleted file mode 100644
index 2949b04..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Support/entities.txt
+++ /dev/null
@@ -1,252 +0,0 @@
-160 nbsp
-161 iexcl
-162 cent
-163 pound
-164 curren
-165 yen
-166 brvbar
-167 sect
-168 uml
-169 copy
-170 ordf
-171 laquo
-172 not
-173 shy
-174 reg
-175 macr
-176 deg
-177 plusmn
-178 sup2
-179 sup3
-180 acute
-181 micro
-182 para
-183 middot
-184 cedil
-185 sup1
-186 ordm
-187 raquo
-188 frac14
-189 frac12
-190 frac34
-191 iquest
-192 Agrave
-193 Aacute
-194 Acirc
-195 Atilde
-196 Auml
-197 Aring
-198 AElig
-199 Ccedil
-200 Egrave
-201 Eacute
-202 Ecirc
-203 Euml
-204 Igrave
-205 Iacute
-206 Icirc
-207 Iuml
-208 ETH
-209 Ntilde
-210 Ograve
-211 Oacute
-212 Ocirc
-213 Otilde
-214 Ouml
-215 times
-216 Oslash
-217 Ugrave
-218 Uacute
-219 Ucirc
-220 Uuml
-221 Yacute
-222 THORN
-223 szlig
-224 agrave
-225 aacute
-226 acirc
-227 atilde
-228 auml
-229 aring
-230 aelig
-231 ccedil
-232 egrave
-233 eacute
-234 ecirc
-235 euml
-236 igrave
-237 iacute
-238 icirc
-239 iuml
-240 eth
-241 ntilde
-242 ograve
-243 oacute
-244 ocirc
-245 otilde
-246 ouml
-247 divide
-248 oslash
-249 ugrave
-250 uacute
-251 ucirc
-252 uuml
-253 yacute
-254 thorn
-255 yuml
-402 fnof
-913 Alpha
-914 Beta
-915 Gamma
-916 Delta
-917 Epsilon
-918 Zeta
-919 Eta
-920 Theta
-921 Iota
-922 Kappa
-923 Lambda
-924 Mu
-925 Nu
-926 Xi
-927 Omicron
-928 Pi
-929 Rho
-931 Sigma
-932 Tau
-933 Upsilon
-934 Phi
-935 Chi
-936 Psi
-937 Omega
-945 alpha
-946 beta
-947 gamma
-948 delta
-949 epsilon
-950 zeta
-951 eta
-952 theta
-953 iota
-954 kappa
-955 lambda
-956 mu
-957 nu
-958 xi
-959 omicron
-960 pi
-961 rho
-962 sigmaf
-963 sigma
-964 tau
-965 upsilon
-966 phi
-967 chi
-968 psi
-969 omega
-977 thetasym
-978 upsih
-982 piv
-8226 bull
-8230 hellip
-8242 prime
-8243 Prime
-8254 oline
-8260 frasl
-8472 weierp
-8465 image
-8476 real
-8482 trade
-8501 alefsym
-8592 larr
-8593 uarr
-8594 rarr
-8595 darr
-8596 harr
-8629 crarr
-8656 lArr
-8657 uArr
-8658 rArr
-8659 dArr
-8660 hArr
-8704 forall
-8706 part
-8707 exist
-8709 empty
-8711 nabla
-8712 isin
-8713 notin
-8715 ni
-8719 prod
-8721 sum
-8722 minus
-8727 lowast
-8730 radic
-8733 prop
-8734 infin
-8736 ang
-8743 and
-8744 or
-8745 cap
-8746 cup
-8747 int
-8756 there4
-8764 sim
-8773 cong
-8776 asymp
-8800 ne
-8801 equiv
-8804 le
-8805 ge
-8834 sub
-8835 sup
-8836 nsub
-8838 sube
-8839 supe
-8853 oplus
-8855 otimes
-8869 perp
-8901 sdot
-8968 lceil
-8969 rceil
-8970 lfloor
-8971 rfloor
-9001 lang
-9002 rang
-9674 loz
-9824 spades
-9827 clubs
-9829 hearts
-9830 diams
-34 quot
-38 amp
-60 lt
-62 gt
-338 OElig
-339 oelig
-352 Scaron
-353 scaron
-376 Yuml
-710 circ
-732 tilde
-8194 ensp
-8195 emsp
-8201 thinsp
-8204 zwnj
-8205 zwj
-8206 lrm
-8207 rlm
-8211 ndash
-8212 mdash
-8216 lsquo
-8217 rsquo
-8218 sbquo
-8220 ldquo
-8221 rdquo
-8222 bdquo
-8224 dagger
-8225 Dagger
-8240 permil
-8249 lsaquo
-8250 rsaquo
-8364 euro
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Support/nibs/Insert Entity.nib/classes.nib b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Support/nibs/Insert Entity.nib/classes.nib
deleted file mode 100644
index a731b33..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Support/nibs/Insert Entity.nib/classes.nib
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- IBClasses = (
- {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; },
- {ACTIONS = {performButtonClick = id; }; CLASS = NSObject; LANGUAGE = ObjC; }
- );
- IBVersion = 1;
-}
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Support/nibs/Insert Entity.nib/info.nib b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Support/nibs/Insert Entity.nib/info.nib
deleted file mode 100644
index 42c6d2f..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Support/nibs/Insert Entity.nib/info.nib
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
- IBDocumentLocation
- 69 14 356 240 0 0 1920 1178
- IBFramework Version
- 446.1
- IBOpenObjects
-
- 5
-
- IBSystem Version
- 8L127
-
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Support/nibs/Insert Entity.nib/keyedobjects.nib b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Support/nibs/Insert Entity.nib/keyedobjects.nib
deleted file mode 100644
index 2a9ea60..0000000
Binary files a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Support/nibs/Insert Entity.nib/keyedobjects.nib and /dev/null differ
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Syntaxes/HTML 5.tmLanguage b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Syntaxes/HTML 5.tmLanguage
deleted file mode 100644
index 454da19..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Syntaxes/HTML 5.tmLanguage
+++ /dev/null
@@ -1,938 +0,0 @@
-
-
-
-
- fileTypes
-
- html
- htm
- shtml
- xhtml
- phtml
- php
- inc
- tmpl
- tpl
- ctp
-
- firstLineMatch
- <!DOCTYPE|doctype|<(?i:html)|<\?(?i:php)
- foldingStartMarker
- (?x)
- (<(?i:a|article|aside|audio|blockquote|body|canvas|datalist|details|div|dl|fieldset|figcaption|figure|footer|form|head|header|hgroup|li|mark|meter|nav|ol|output|p|progress|rp|rt|ruby|script|section|select|small|style|summary|table|tbody|tfoot|thead|time|tr|ul|video)\b.*?>
- |<!--(?!.*--\s*>)
- |^<!--\ \#tminclude\ (?>.*?-->)$
- |<\?(?:php)?.*\b(if|for(each)?|while)\b.+:
- |\{\{?(if|foreach|capture|literal|foreach|php|section|strip)
- |\{\s*($|\?>\s*$|//|/\*(.*\*/\s*$|(?!.*?\*/)))
- )
- foldingStopMarker
- (?x)
- (</(?i:a|article|aside|audio|blockquote|body|canvas|datalist|details|div|dl|fieldset|figcaption|figure|footer|form|head|header|hgroup|li|mark|meter|nav|ol|output|p|progress|rp|rt|ruby|script|section|select|small|style|summary|table|tbody|tfoot|thead|time|tr|ul|video)>
- |^(?!.*?<!--).*?--\s*>
- |^<!--\ end\ tminclude\ -->$
- |<\?(?:php)?.*\bend(if|for(each)?|while)\b
- |\{\{?/(if|foreach|capture|literal|foreach|php|section|strip)
- |^[^{]*\}
- )
- keyEquivalent
- ^~H
- name
- HTML5
- patterns
-
-
- begin
- (<)([a-zA-Z0-9:]+)(?=[^>]*></\2>)
- beginCaptures
-
- 1
-
- name
- punctuation.definition.tag.html
-
- 2
-
- name
- entity.name.tag.html
-
-
- end
- (>(<)/)(\2)(>)
- endCaptures
-
- 1
-
- name
- punctuation.definition.tag.html
-
- 2
-
- name
- meta.scope.between-tag-pair.html
-
- 3
-
- name
- entity.name.tag.html
-
- 4
-
- name
- punctuation.definition.tag.html
-
-
- name
- meta.tag.any.html
- patterns
-
-
- include
- #tag-stuff
-
-
-
-
- begin
- (<\?)(xml)
- captures
-
- 1
-
- name
- punctuation.definition.tag.html
-
- 2
-
- name
- entity.name.tag.xml.html
-
-
- end
- (\?>)
- name
- meta.tag.preprocessor.xml.html
- patterns
-
-
- include
- #tag-generic-attribute
-
-
- include
- #string-double-quoted
-
-
- include
- #string-single-quoted
-
-
-
-
- begin
- <!--
- captures
-
- 0
-
- name
- punctuation.definition.comment.html
-
-
- end
- --\s*>
- name
- comment.block.html
- patterns
-
-
- match
- --
- name
- invalid.illegal.bad-comments-or-CDATA.html
-
-
- include
- #embedded-code
-
-
-
-
- begin
- <!
- captures
-
- 0
-
- name
- punctuation.definition.tag.html
-
-
- end
- >
- name
- meta.tag.sgml.html
- patterns
-
-
- begin
- (DOCTYPE|doctype)
- captures
-
- 1
-
- name
- entity.name.tag.doctype.html
-
-
- end
- (?=>)
- name
- meta.tag.sgml.doctype.html
- patterns
-
-
- match
- "[^">]*"
- name
- string.quoted.double.doctype.identifiers-and-DTDs.html
-
-
-
-
- begin
- \[CDATA\[
- end
- ]](?=>)
- name
- constant.other.inline-data.html
-
-
- match
- (\s*)(?!--|>)\S(\s*)
- name
- invalid.illegal.bad-comments-or-CDATA.html
-
-
-
-
- include
- #embedded-code
-
-
- begin
- (?:^\s+)?(<)((?i:style))\b(?![^>]*/>)
- captures
-
- 1
-
- name
- punctuation.definition.tag.html
-
- 2
-
- name
- entity.name.tag.style.html
-
- 3
-
- name
- punctuation.definition.tag.html
-
-
- end
- (</)((?i:style))(>)(?:\s*\n)?
- name
- source.css.embedded.html
- patterns
-
-
- include
- #tag-stuff
-
-
- begin
- (>)
- beginCaptures
-
- 1
-
- name
- punctuation.definition.tag.html
-
-
- end
- (?=</(?i:style))
- patterns
-
-
- include
- #embedded-code
-
-
- include
- source.css
-
-
-
-
-
-
- begin
- (?:^\s+)?(<)((?i:script))\b(?![^>]*/>)
- beginCaptures
-
- 1
-
- name
- punctuation.definition.tag.html
-
- 2
-
- name
- entity.name.tag.script.html
-
-
- end
- (?<=</(script|SCRIPT))(>)(?:\s*\n)?
- endCaptures
-
- 2
-
- name
- punctuation.definition.tag.html
-
-
- name
- source.js.embedded.html
- patterns
-
-
- include
- #tag-stuff
-
-
- begin
- (?<!</(?:script|SCRIPT))(>)
- captures
-
- 1
-
- name
- punctuation.definition.tag.html
-
- 2
-
- name
- entity.name.tag.script.html
-
-
- end
- (</)((?i:script))
- patterns
-
-
- captures
-
- 1
-
- name
- punctuation.definition.comment.js
-
-
- match
- (//).*?((?=</script)|$\n?)
- name
- comment.line.double-slash.js
-
-
- begin
- /\*
- captures
-
- 0
-
- name
- punctuation.definition.comment.js
-
-
- end
- \*/|(?=</script)
- name
- comment.block.js
-
-
- include
- #php
-
-
- include
- source.js
-
-
-
-
-
-
- begin
- (</?)((?i:body|head|html)\b)
- captures
-
- 1
-
- name
- punctuation.definition.tag.html
-
- 2
-
- name
- entity.name.tag.structure.any.html
-
-
- end
- (>)
- name
- meta.tag.structure.any.html
- patterns
-
-
- include
- #tag-stuff
-
-
-
-
- begin
- (</?)((?i:address|blockquote|dd|div|header|section|footer|aside|nav|dl|dt|fieldset|form|frame|frameset|h1|h2|h3|h4|h5|h6|iframe|noframes|object|ol|p|ul|applet|center|dir|hr|menu|pre)\b)
- captures
-
- 1
-
- name
- punctuation.definition.tag.html
-
- 2
-
- name
- entity.name.tag.block.any.html
-
-
- end
- (>)
- name
- meta.tag.block.any.html
- patterns
-
-
- include
- #tag-stuff
-
-
-
-
- begin
- (</?)((?i:a|abbr|acronym|area|b|base|basefont|bdo|big|br|button|caption|cite|code|col|colgroup|del|dfn|em|font|head|html|i|img|input|ins|isindex|kbd|label|legend|li|link|map|meta|noscript|optgroup|option|param|q|s|samp|script|select|small|span|strike|strong|style|sub|sup|table|tbody|td|textarea|tfoot|th|thead|title|tr|tt|u|var)\b)
- captures
-
- 1
-
- name
- punctuation.definition.tag.html
-
- 2
-
- name
- entity.name.tag.inline.any.html
-
-
- end
- ((?: ?/)?>)
- name
- meta.tag.inline.any.html
- patterns
-
-
- include
- #tag-stuff
-
-
-
-
- begin
- (</?)([a-zA-Z0-9:]+)
- captures
-
- 1
-
- name
- punctuation.definition.tag.html
-
- 2
-
- name
- entity.name.tag.other.html
-
-
- end
- (>)
- name
- meta.tag.other.html
- patterns
-
-
- include
- #tag-stuff
-
-
-
-
- include
- #entities
-
-
- match
- <>
- name
- invalid.illegal.incomplete.html
-
-
- match
- <
- name
- invalid.illegal.bad-angle-bracket.html
-
-
- repository
-
- embedded-code
-
- patterns
-
-
- include
- #ruby
-
-
- include
- #php
-
-
- include
- #smarty
-
-
- include
- #python
-
-
-
- entities
-
- patterns
-
-
- captures
-
- 1
-
- name
- punctuation.definition.entity.html
-
- 3
-
- name
- punctuation.definition.entity.html
-
-
- match
- (&)([a-zA-Z0-9]+|#[0-9]+|#x[0-9a-fA-F]+)(;)
- name
- constant.character.entity.html
-
-
- match
- &
- name
- invalid.illegal.bad-ampersand.html
-
-
-
- php
-
- begin
- (?=(^\s*)?<\?)
- end
- (?!(^\s*)?<\?)
- patterns
-
-
- include
- source.php
-
-
-
- python
-
- begin
- (?:^\s*)<\?python(?!.*\?>)
- end
- \?>(?:\s*$\n)?
- name
- source.python.embedded.html
- patterns
-
-
- include
- source.python
-
-
-
- ruby
-
- patterns
-
-
- begin
- <%+#
- captures
-
- 0
-
- name
- punctuation.definition.comment.erb
-
-
- end
- %>
- name
- comment.block.erb
-
-
- begin
- <%+(?!>)=?
- captures
-
- 0
-
- name
- punctuation.section.embedded.ruby
-
-
- end
- -?%>
- name
- source.ruby.embedded.html
- patterns
-
-
- captures
-
- 1
-
- name
- punctuation.definition.comment.ruby
-
-
- match
- (#).*?(?=-?%>)
- name
- comment.line.number-sign.ruby
-
-
- include
- source.ruby
-
-
-
-
- begin
- <\?r(?!>)=?
- captures
-
- 0
-
- name
- punctuation.section.embedded.ruby.nitro
-
-
- end
- -?\?>
- name
- source.ruby.nitro.embedded.html
- patterns
-
-
- captures
-
- 1
-
- name
- punctuation.definition.comment.ruby.nitro
-
-
- match
- (#).*?(?=-?\?>)
- name
- comment.line.number-sign.ruby.nitro
-
-
- include
- source.ruby
-
-
-
-
-
- smarty
-
- patterns
-
-
- begin
- (\{(literal)\})
- captures
-
- 1
-
- name
- source.smarty.embedded.html
-
- 2
-
- name
- support.function.built-in.smarty
-
-
- end
- (\{/(literal)\})
-
-
- begin
- {{|{
- disabled
- 1
- end
- }}|}
- name
- source.smarty.embedded.html
- patterns
-
-
- include
- source.smarty
-
-
-
-
-
- string-double-quoted
-
- begin
- "
- beginCaptures
-
- 0
-
- name
- punctuation.definition.string.begin.html
-
-
- end
- "
- endCaptures
-
- 0
-
- name
- punctuation.definition.string.end.html
-
-
- name
- string.quoted.double.html
- patterns
-
-
- include
- #embedded-code
-
-
- include
- #entities
-
-
-
- string-single-quoted
-
- begin
- '
- beginCaptures
-
- 0
-
- name
- punctuation.definition.string.begin.html
-
-
- end
- '
- endCaptures
-
- 0
-
- name
- punctuation.definition.string.end.html
-
-
- name
- string.quoted.single.html
- patterns
-
-
- include
- #embedded-code
-
-
- include
- #entities
-
-
-
- tag-generic-attribute
-
- match
- \b([a-zA-Z\-:]+)
- name
- entity.other.attribute-name.html
-
- tag-id-attribute
-
- begin
- \b(id)\b\s*(=)
- captures
-
- 1
-
- name
- entity.other.attribute-name.id.html
-
- 2
-
- name
- punctuation.separator.key-value.html
-
-
- end
- (?<='|")
- name
- meta.attribute-with-value.id.html
- patterns
-
-
- begin
- "
- beginCaptures
-
- 0
-
- name
- punctuation.definition.string.begin.html
-
-
- contentName
- meta.toc-list.id.html
- end
- "
- endCaptures
-
- 0
-
- name
- punctuation.definition.string.end.html
-
-
- name
- string.quoted.double.html
- patterns
-
-
- include
- #embedded-code
-
-
- include
- #entities
-
-
-
-
- begin
- '
- beginCaptures
-
- 0
-
- name
- punctuation.definition.string.begin.html
-
-
- contentName
- meta.toc-list.id.html
- end
- '
- endCaptures
-
- 0
-
- name
- punctuation.definition.string.end.html
-
-
- name
- string.quoted.single.html
- patterns
-
-
- include
- #embedded-code
-
-
- include
- #entities
-
-
-
-
-
- tag-stuff
-
- patterns
-
-
- include
- #tag-id-attribute
-
-
- include
- #tag-generic-attribute
-
-
- include
- #string-double-quoted
-
-
- include
- #string-single-quoted
-
-
- include
- #embedded-code
-
-
-
-
- scopeName
- text.html.basic
- uuid
- 6F87DAE1-56E0-4193-A940-8D68BC76874C
-
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Wrap Selection in Open -Close Tag.sublime-snippet b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Wrap Selection in Open -Close Tag.sublime-snippet
deleted file mode 100644
index 09840ed..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/Wrap Selection in Open -Close Tag.sublime-snippet
+++ /dev/null
@@ -1,6 +0,0 @@
-
- $SELECTION${1/\s.*//}>]]>
- ^W
- source.php,text.html
- Wrap Selection in Open/Close Tag
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/info.plist b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/info.plist
deleted file mode 100644
index bd15797..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/info.plist
+++ /dev/null
@@ -1,531 +0,0 @@
-
-
-
-
- mainMenu
-
- excludedItems
-
- 3C44EABE-8D6F-4B1B-AB91-F419FAD1A0AD
- 0658019F-3635-462E-AAC2-74E4FE508A9B
- 2ED44A32-C353-447F-BAE4-E3522DB6944D
- CBD82CF3-74E9-4E7A-B3F6-9348754EB5AA
- 3463E85F-F500-49A0-8631-D78ED85F9D60
- 7B7E945E-A112-11D9-A5A2-000D93C8BE28
-
- items
-
- 1274DFD1-175E-43A0-B226-58EF777D0285
- 637CEA2B-578C-429C-BB74-30E8D42BFA22
- 16E02FC6-2D39-406B-8927-E2770AFC72BA
- ------------------------------------
- A7283C84-9E44-4D4A-983A-0F185F68BB71
- B002A609-8235-4368-BBA8-B35FBF4F676E
- 7E81E32E-BAB1-4BD3-BFDC-17E319F6244D
- ------------------------------------
- 98F922A8-AE66-4787-9CE2-50F3E5924E36
- 2E2E84F9-D2E2-44E2-9B31-6FEC64E0D277
- ------------------------------------
- F1601C6B-65F1-4614-BFFB-BDA644E6920D
- EF47CF92-CB4E-417D-BA8A-F24D46A7A5EC
- ------------------------------------
- B8651C6E-A05E-11D9-86AC-000D93C8BE28
- 970EE6B4-A091-11D9-A5A2-000D93C8BE28
- ------------------------------------
- 20D760B5-A127-11D9-A5A2-000D93C8BE28
- BC8B8AE2-5F16-11D9-B9C3-000D93589AF6
- 991E7EBD-F3F5-469A-BA01-DC30E04AD472
-
- submenus
-
- 2E2E84F9-D2E2-44E2-9B31-6FEC64E0D277
-
- items
-
- 3DD8406C-A116-11D9-A5A2-000D93C8BE28
- 43C9E8AE-3E53-4B82-A1AF-56697BB3EF09
- 6B024865-6095-4CE3-8EDD-DC6F2230C2FF
- C183920D-A126-11D9-A5A2-000D93C8BE28
- 2C4C9673-B166-432A-8938-75A5CA622481
- 9B13543F-8356-443C-B6E7-D9259B604927
-
- name
- URL escapes
-
- 511CD76D-8D49-448E-8114-71836FAE1D09
-
- items
-
- 65EB1ADC-76BC-4CBB-AEFA-FCE33E490A93
- 5B30570C-13C1-4CEF-84AE-C6C153434B25
- 6AF6D81C-1242-4B8E-89AC-5C628F87F15C
- C0446BA4-B6E9-4181-8C71-65F13F8DFE1F
- FB0C19EC-B5EC-4558-8B34-45865217E821
- 72AFB7AB-63FB-4EF0-8ECD-8706416AB79F
- B0DA1BE6-1A64-48F7-869F-A78E7F3EB770
- A3F0F503-4775-42DD-8E0A-71D2EBBFFE4E
- 63A80A54-B877-453B-8E24-200F493DEE47
- F216C3A5-7288-4816-997D-0F79894DDC18
-
- name
- Sections
-
- 515E8765-CC12-47C9-8DF1-C57975CA0CCB
-
- items
-
- D8D4017E-BB4E-4002-BBBD-E69161E551C9
- FF93F160-ECB8-4279-A976-4A7D4F91C607
- 908BA846-F4B0-4855-975F-AA0B4AF3D1A9
- 2593C830-3C1E-4BB5-86B1-2DFA51888C75
- 8C79DB07-1D44-4AFD-A9A6-E64AED876C54
- 187ED135-0799-4E06-80AD-A3E5C7FA2E49
- 9A3939A7-BC78-40EC-9C58-E12BFE53BF38
- BF5EB4C0-0F10-44EE-9587-411750DA7845
- 828CFBFA-C61E-4957-9554-0BC59534BFDD
- 1882B588-F340-4CEE-8E96-3F0776596457
- 343372EA-958B-44B9-AE79-ED367E475B18
- 55498DAC-4699-4296-809B-90C021DD3F5C
- BCC2AC1B-8AA0-42B6-9FDD-D5251F7F7E30
- 571EAAE4-24D0-4D50-88F1-D015E56DFA60
- C02BD316-2F58-4F37-9C24-8BDB0A63BBC8
-
- name
- Embedded content
-
- 5878F656-3EBC-4FEF-A2B7-356F6236F268
-
- items
-
- 176E2E83-9B9D-4F85-BA4C-52AB8073622E
- 72C5D28E-6A44-4293-8F6A-5105A190E218
- 3E008E42-A5C9-11D9-9BCD-000D93C8BE28
- 0A2DD7D0-F48D-47E6-A8B3-1C676B176611
- AB3FE377-10F9-4837-AAA8-8BA4E4178AB9
- B859CBE9-1B75-4938-B62D-7FBF02AEA3D5
- BC696789-359A-4663-AC9D-FD96ACEDC5FD
- E523A7AE-A923-4E4B-A286-84D5EC588E1A
- 9057B333-A8EB-494A-80DD-E188849F12A0
- 2E052273-464E-4EA1-9C38-1041527F8634
- EBE37587-6235-4BE1-A389-FECE0325198E
- BD8EB824-A106-4FE4-BF41-339BDE48AAEF
-
- name
- Grouping content
-
- 7E81E32E-BAB1-4BD3-BFDC-17E319F6244D
-
- items
-
- 067A025E-9E05-493D-A57F-2B563927213D
- 13A82635-CD7A-4EDC-B1BB-306F905DF2BE
-
- name
- Comments
-
- 8A265312-483B-4666-B129-79D6AECAED87
-
- items
-
- 232C2E8B-A08E-11D9-A5A2-000D93C8BE28
- 9BD2BE01-A854-4D55-B584-725D04C075C0
- 576036C0-A60E-11D9-ABD6-000D93C8BE28
- 9BF7061E-F2AC-492A-A532-B5B2CC0D2922
- D8DCCC81-749A-4E2A-B4BC-D109D5799CAA
- E14F25E5-CD93-4E44-8729-9A836EE7E91D
- F225A3D3-7958-4B05-81F1-9107933D1870
- 4C145C29-48B4-4A63-9451-3D499AF962D3
- B62CE929-D9CB-4D94-A8F1-D3D5B6BC142D
- 0F493D1E-7F8E-43A1-93D3-CDBD16FB70D6
- 59A9E8E1-A161-4B57-92AF-2A869C31FCCB
- 5883EC93-ED49-4DCA-8C1B-E9400298203A
- 0483EF5E-42F2-4BF5-8233-FA1A77EB8B25
- 976E3238-D6FF-410F-AAD7-00A70D4449B3
- D45E99AC-E273-4C60-87E0-D76061B624E9
- AD249766-BC28-408C-ABE4-9E5964148F48
- 06146486-AA88-47E8-9C53-78E0C38605F9
- 21CA431A-CEE5-41BD-921D-F3369D24B855
- 1A834330-07D9-44C7-8B67-4A57CE1AD4E9
- 897B22FB-E495-4C67-A21B-4B1CE25D6859
- AA97B975-76D8-440F-A64A-E445565AB4C0
- 84A78FA1-46DA-4DDE-A803-BAACE4E84845
- 8B144B82-FDDE-4E96-9E85-BA34107207C7
- F6B0C187-0D11-4678-A0EB-D4E98A5D2C13
- F296AF7A-DB65-48F3-8F08-180E9BF2DD30
- A79FB8FF-A8AE-462B-8768-EC9B6984A43D
- 3D193589-7F16-4369-836F-73675EB112CE
- 44180979-A08E-11D9-A5A2-000D93C8BE28
- FE789948-0498-4209-BA0C-FC7CB600F35A
- 26023CFF-C73F-4EF5-9803-E4DBA2CBEADD
- F806B6F2-4896-4681-8ACD-DD89C78D6F51
- 63C7CC12-ECF8-443F-AC02-846550D4F398
- 5820372E-A093-4F38-B25C-B0CCC50A0FC4
- AAC9D7B8-A12C-11D9-A5A2-000D93C8BE28
- 9E6F15F4-69A8-49B8-A928-4F6102131608
- 6FF2530E-99F5-493F-8D29-25B7AC8E3DE0
- BF1FB951-2E7A-4703-9818-DB70D4F4139C
- 988E575B-9158-48E4-BF80-83A3328F648C
-
- name
- Forms
-
- 909160DB-D37B-47E3-A90B-1F6E69E0A45C
-
- items
-
- 942BCB25-1F1E-4F51-9D16-BE62A481B39F
- D14DE56E-D23C-410B-A580-8BD33AFB4D6C
-
- name
- Edits
-
- 95F1910C-ABF2-4CD9-85C2-E5048AD11C3E
-
- items
-
- 9E586FE2-E066-440D-880C-5493FD54FA33
- 81DA4C74-A530-11D9-9BCD-000D93C8BE28
- EBB98620-3292-4621-BA38-D8A9A65D9551
- 4117D930-B6FA-4022-97E7-ECCAF4E70F63
- 76CAFE9F-4C6D-454B-BF2C-34555DF7B534
- 2512A1D9-7CFF-4233-89BA-92056FA647D8
- 28149211-5F22-4E40-97C5-D0E3A6959992
- 9CCF1FDD-A66B-41E4-90D6-3BF48D00A105
- 5E9C1787-987F-4ACB-8307-2B30333D6D56
- C2FC35FB-041E-45AC-BAF5-1813DD69EA2F
- E438992B-3762-4F98-8ABF-1D8E7DE016D7
- C7399601-B555-4051-9828-8DA76BC36697
- 553B07F3-D33C-40B1-B78C-17DED3BD3FC7
- AAAE2350-580D-47CB-B9DE-7BC1325A6F7A
- F81E1BBE-8FC9-438C-B9E5-501E37B7BCD1
- 1C55A2AC-97B1-4B32-BFDF-0CB7DB438CF6
- B476570F-987F-4DA9-B548-426D1CA7A5CE
- 7CE2862C-ED73-45AF-A7E4-2846A6890D0A
- EA4FD535-4DCF-4D5D-AB5B-DD6C2860A61A
- CA26794E-8751-4813-BEE3-8EA4A5E30806
- BF09850D-AA80-493B-93C2-8B909783889F
- 3CF8BA96-B4D5-43EF-B02A-E5B5CE533720
- D5A80705-04F2-4C05-8022-B020FA53E9B9
- EBBBB55D-4424-43C0-96C0-EC86A282EFED
-
- name
- Text-level semantics
-
- 980CF231-E644-4852-82F1-93B2AD0CBC24
-
- items
-
- 7D36AE50-5C5F-445C-9FD2-B6AFBFAD29A9
- DA80E7E5-2832-434F-9BCF-A86C3FC99E88
- 389C2FDE-B363-44DE-9B3E-3339EF88CB4E
- 84DC4FE8-DB87-46B1-9783-D83909545074
-
- name
- Interactive elements
-
- 98F922A8-AE66-4787-9CE2-50F3E5924E36
-
- items
-
- 89E5CC0A-3EFF-4DEF-A299-2E9651DE6529
- 73B40BAE-A295-11D9-87F7-000D93C8BE28
-
- name
- Entities
-
- B002A609-8235-4368-BBA8-B35FBF4F676E
-
- items
-
- 172060BD-346E-4B95-95E7-57D3F9995DCB
- B7C071AB-FC12-4E93-8937-A212D5640C3A
- 6592050A-A087-11D9-A5A2-000D93C8BE28
- 511CD76D-8D49-448E-8114-71836FAE1D09
- 5878F656-3EBC-4FEF-A2B7-356F6236F268
- 95F1910C-ABF2-4CD9-85C2-E5048AD11C3E
- 909160DB-D37B-47E3-A90B-1F6E69E0A45C
- 515E8765-CC12-47C9-8DF1-C57975CA0CCB
- EFFECF63-B3A8-401D-90C2-06679D6D6235
- 8A265312-483B-4666-B129-79D6AECAED87
- 980CF231-E644-4852-82F1-93B2AD0CBC24
-
- name
- Elements
-
- B7C071AB-FC12-4E93-8937-A212D5640C3A
-
- items
-
- EE9882E9-DEB6-46BB-9CF2-038A4AC6DD73
- 091B74AF-45E9-4F78-9013-79943E2319D2
- 4462A6B8-A08A-11D9-A5A2-000D93C8BE28
- EE92C22E-948C-41B4-9F44-BC5B0F953316
- D92E1546-77AB-43E9-8C63-D7749E045BEB
- 58735A26-840E-4F3B-AC60-19ADA7732060
- 526CA680-5A5C-401A-AEA3-EDB17AD3DD2A
- C6469B90-D3FB-42FE-B33F-416BA7D1E193
- 8EFB1A8D-B4D6-4BAD-B718-43FB277F3AE6
- 883D7DD9-4E34-457F-B019-04B382233FFB
- 5EF160F9-5735-4611-9053-99F93F2E8D91
- 77BFD0C0-A08A-11D9-A5A2-000D93C8BE28
- DA99AC44-A083-11D9-A5A2-000D93C8BE28
- 9D101904-8090-4F6C-B63B-2EF2EB79CB5F
- 3C518074-A088-11D9-A5A2-000D93C8BE28
-
- name
- Document metadata
-
- EF47CF92-CB4E-417D-BA8A-F24D46A7A5EC
-
- items
-
- E4C05331-DBD8-47D5-9CAF-2E4C2509D1FC
- 363DDC2B-0E64-424E-9B1F-0D13DB0DBE48
- 303A4EE5-A97F-4478-A347-8DB682354B2C
- 315EEBED-BBF9-4CE6-AEB6-65022CC31532
- A150DD2B-3CBB-415E-A76D-80772CF725D3
- 08C01157-7A32-4D3B-A15B-32FE02F288A9
- 34438ACE-808E-4D60-8589-826FB7C6CBE0
- F3BE0F2E-93D8-40FD-BA2B-4636F7726DDC
- 157E2240-DC62-40C7-8BEE-2EA193E575F4
- 8415F03D-0CE4-4478-808B-65ED611D5BCD
- CEF25D24-ED3B-445E-890E-124984B1C842
-
- name
- Javascript Libraries
-
- EFFECF63-B3A8-401D-90C2-06679D6D6235
-
- items
-
- 57176082-A12F-11D9-A5A2-000D93C8BE28
- 16E03CBE-8F97-43A8-971B-49FB6F9C4B4C
- 7C1CF811-3622-4311-ACEF-03BBC88505F7
- 75AB9A5D-A2BE-4D4D-8A83-7A9124B4A9C4
- FE67502A-0B4C-4114-9B94-29A6D2C32C09
- EF4250A0-0407-437D-9B84-4151232A1706
- 4CE017E0-0B8B-4451-8F4A-DD2B085CD4D3
- 93D2BF9E-D92B-4123-91B1-E2984E457C78
- C034D9F7-3866-4CCA-B50A-F564F7E80735
- 9A6AB468-1233-48D9-9CD8-DF0B2DA8E049
-
- name
- Tabular data
-
- F1601C6B-65F1-4614-BFFB-BDA644E6920D
-
- items
-
- 0ED6DA73-F38F-4A65-B18F-3379D2BA9387
- 3A517A94-001E-464D-8184-1FE56D0D0D70
- E3F8984E-7269-4981-9D30-967AB56A6ACE
- F3512848-7889-45DA-993B-0547976C8E6D
- 32BBB9AB-8732-4F91-A587-354941A27B69
- 48DF7485-52EA-49B3-88AF-3A41F933F325
- CBC24AF4-88E0-498B-BE50-934B9CF29EC7
- F00170EE-4A82-413F-A88B-85293E69A88B
- 069239F5-589C-4564-9354-79369058937F
-
- name
- Internet Explorer conditional comments
-
-
-
- name
- HTML5
- ordering
-
- 6F87DAE1-56E0-4193-A940-8D68BC76874C
- A7283C84-9E44-4D4A-983A-0F185F68BB71
- 172060BD-346E-4B95-95E7-57D3F9995DCB
- EE9882E9-DEB6-46BB-9CF2-038A4AC6DD73
- 091B74AF-45E9-4F78-9013-79943E2319D2
- 4462A6B8-A08A-11D9-A5A2-000D93C8BE28
- EE92C22E-948C-41B4-9F44-BC5B0F953316
- D92E1546-77AB-43E9-8C63-D7749E045BEB
- 58735A26-840E-4F3B-AC60-19ADA7732060
- 526CA680-5A5C-401A-AEA3-EDB17AD3DD2A
- C6469B90-D3FB-42FE-B33F-416BA7D1E193
- 8EFB1A8D-B4D6-4BAD-B718-43FB277F3AE6
- 883D7DD9-4E34-457F-B019-04B382233FFB
- 5EF160F9-5735-4611-9053-99F93F2E8D91
- 77BFD0C0-A08A-11D9-A5A2-000D93C8BE28
- C8B717C2-6B33-11D9-BB47-000D93589AF6
- DA99AC44-A083-11D9-A5A2-000D93C8BE28
- 9D101904-8090-4F6C-B63B-2EF2EB79CB5F
- 3C518074-A088-11D9-A5A2-000D93C8BE28
- 6592050A-A087-11D9-A5A2-000D93C8BE28
- 52124611-B363-40AD-B9F0-0A811941CD20
- 65EB1ADC-76BC-4CBB-AEFA-FCE33E490A93
- 5B30570C-13C1-4CEF-84AE-C6C153434B25
- 6AF6D81C-1242-4B8E-89AC-5C628F87F15C
- C0446BA4-B6E9-4181-8C71-65F13F8DFE1F
- FB0C19EC-B5EC-4558-8B34-45865217E821
- 72AFB7AB-63FB-4EF0-8ECD-8706416AB79F
- B0DA1BE6-1A64-48F7-869F-A78E7F3EB770
- A3F0F503-4775-42DD-8E0A-71D2EBBFFE4E
- 63A80A54-B877-453B-8E24-200F493DEE47
- F216C3A5-7288-4816-997D-0F79894DDC18
- 176E2E83-9B9D-4F85-BA4C-52AB8073622E
- 72C5D28E-6A44-4293-8F6A-5105A190E218
- 3E008E42-A5C9-11D9-9BCD-000D93C8BE28
- 0A2DD7D0-F48D-47E6-A8B3-1C676B176611
- AB3FE377-10F9-4837-AAA8-8BA4E4178AB9
- B859CBE9-1B75-4938-B62D-7FBF02AEA3D5
- BC696789-359A-4663-AC9D-FD96ACEDC5FD
- E523A7AE-A923-4E4B-A286-84D5EC588E1A
- 9057B333-A8EB-494A-80DD-E188849F12A0
- 2E052273-464E-4EA1-9C38-1041527F8634
- EBE37587-6235-4BE1-A389-FECE0325198E
- BD8EB824-A106-4FE4-BF41-339BDE48AAEF
- 9E586FE2-E066-440D-880C-5493FD54FA33
- 81DA4C74-A530-11D9-9BCD-000D93C8BE28
- B23D6E15-6B33-11D9-86C1-000D93589AF6
- EBB98620-3292-4621-BA38-D8A9A65D9551
- 4117D930-B6FA-4022-97E7-ECCAF4E70F63
- 76CAFE9F-4C6D-454B-BF2C-34555DF7B534
- 2512A1D9-7CFF-4233-89BA-92056FA647D8
- 28149211-5F22-4E40-97C5-D0E3A6959992
- 9CCF1FDD-A66B-41E4-90D6-3BF48D00A105
- 5E9C1787-987F-4ACB-8307-2B30333D6D56
- C2FC35FB-041E-45AC-BAF5-1813DD69EA2F
- E438992B-3762-4F98-8ABF-1D8E7DE016D7
- C7399601-B555-4051-9828-8DA76BC36697
- 553B07F3-D33C-40B1-B78C-17DED3BD3FC7
- AAAE2350-580D-47CB-B9DE-7BC1325A6F7A
- F81E1BBE-8FC9-438C-B9E5-501E37B7BCD1
- 1C55A2AC-97B1-4B32-BFDF-0CB7DB438CF6
- B476570F-987F-4DA9-B548-426D1CA7A5CE
- 7CE2862C-ED73-45AF-A7E4-2846A6890D0A
- EA4FD535-4DCF-4D5D-AB5B-DD6C2860A61A
- CA26794E-8751-4813-BEE3-8EA4A5E30806
- BF09850D-AA80-493B-93C2-8B909783889F
- 3CF8BA96-B4D5-43EF-B02A-E5B5CE533720
- D5A80705-04F2-4C05-8022-B020FA53E9B9
- EBBBB55D-4424-43C0-96C0-EC86A282EFED
- 942BCB25-1F1E-4F51-9D16-BE62A481B39F
- D14DE56E-D23C-410B-A580-8BD33AFB4D6C
- D8D4017E-BB4E-4002-BBBD-E69161E551C9
- FF93F160-ECB8-4279-A976-4A7D4F91C607
- 908BA846-F4B0-4855-975F-AA0B4AF3D1A9
- CD6D2CC6-6B33-11D9-BDFD-000D93589AF6
- 2593C830-3C1E-4BB5-86B1-2DFA51888C75
- 8C79DB07-1D44-4AFD-A9A6-E64AED876C54
- 187ED135-0799-4E06-80AD-A3E5C7FA2E49
- 9A3939A7-BC78-40EC-9C58-E12BFE53BF38
- BF5EB4C0-0F10-44EE-9587-411750DA7845
- 828CFBFA-C61E-4957-9554-0BC59534BFDD
- 1882B588-F340-4CEE-8E96-3F0776596457
- 343372EA-958B-44B9-AE79-ED367E475B18
- 55498DAC-4699-4296-809B-90C021DD3F5C
- BCC2AC1B-8AA0-42B6-9FDD-D5251F7F7E30
- 571EAAE4-24D0-4D50-88F1-D015E56DFA60
- C02BD316-2F58-4F37-9C24-8BDB0A63BBC8
- 57176082-A12F-11D9-A5A2-000D93C8BE28
- 16E03CBE-8F97-43A8-971B-49FB6F9C4B4C
- 7C1CF811-3622-4311-ACEF-03BBC88505F7
- 75AB9A5D-A2BE-4D4D-8A83-7A9124B4A9C4
- FE67502A-0B4C-4114-9B94-29A6D2C32C09
- EF4250A0-0407-437D-9B84-4151232A1706
- 4CE017E0-0B8B-4451-8F4A-DD2B085CD4D3
- 93D2BF9E-D92B-4123-91B1-E2984E457C78
- C034D9F7-3866-4CCA-B50A-F564F7E80735
- 9A6AB468-1233-48D9-9CD8-DF0B2DA8E049
- 232C2E8B-A08E-11D9-A5A2-000D93C8BE28
- 9BD2BE01-A854-4D55-B584-725D04C075C0
- 576036C0-A60E-11D9-ABD6-000D93C8BE28
- 9BF7061E-F2AC-492A-A532-B5B2CC0D2922
- D8DCCC81-749A-4E2A-B4BC-D109D5799CAA
- E14F25E5-CD93-4E44-8729-9A836EE7E91D
- F225A3D3-7958-4B05-81F1-9107933D1870
- 4C145C29-48B4-4A63-9451-3D499AF962D3
- B62CE929-D9CB-4D94-A8F1-D3D5B6BC142D
- 0F493D1E-7F8E-43A1-93D3-CDBD16FB70D6
- 59A9E8E1-A161-4B57-92AF-2A869C31FCCB
- 5883EC93-ED49-4DCA-8C1B-E9400298203A
- 0483EF5E-42F2-4BF5-8233-FA1A77EB8B25
- 976E3238-D6FF-410F-AAD7-00A70D4449B3
- D45E99AC-E273-4C60-87E0-D76061B624E9
- AD249766-BC28-408C-ABE4-9E5964148F48
- 06146486-AA88-47E8-9C53-78E0C38605F9
- 21CA431A-CEE5-41BD-921D-F3369D24B855
- 1A834330-07D9-44C7-8B67-4A57CE1AD4E9
- 897B22FB-E495-4C67-A21B-4B1CE25D6859
- AA97B975-76D8-440F-A64A-E445565AB4C0
- 84A78FA1-46DA-4DDE-A803-BAACE4E84845
- 8B144B82-FDDE-4E96-9E85-BA34107207C7
- F6B0C187-0D11-4678-A0EB-D4E98A5D2C13
- F296AF7A-DB65-48F3-8F08-180E9BF2DD30
- A79FB8FF-A8AE-462B-8768-EC9B6984A43D
- 3D193589-7F16-4369-836F-73675EB112CE
- 44180979-A08E-11D9-A5A2-000D93C8BE28
- FE789948-0498-4209-BA0C-FC7CB600F35A
- 26023CFF-C73F-4EF5-9803-E4DBA2CBEADD
- F806B6F2-4896-4681-8ACD-DD89C78D6F51
- 63C7CC12-ECF8-443F-AC02-846550D4F398
- 5820372E-A093-4F38-B25C-B0CCC50A0FC4
- AAC9D7B8-A12C-11D9-A5A2-000D93C8BE28
- 9E6F15F4-69A8-49B8-A928-4F6102131608
- 6FF2530E-99F5-493F-8D29-25B7AC8E3DE0
- BF1FB951-2E7A-4703-9818-DB70D4F4139C
- 988E575B-9158-48E4-BF80-83A3328F648C
- 7D36AE50-5C5F-445C-9FD2-B6AFBFAD29A9
- DA80E7E5-2832-434F-9BCF-A86C3FC99E88
- 389C2FDE-B363-44DE-9B3E-3339EF88CB4E
- 84DC4FE8-DB87-46B1-9783-D83909545074
- 637CEA2B-578C-429C-BB74-30E8D42BFA22
- 1274DFD1-175E-43A0-B226-58EF777D0285
- 16E02FC6-2D39-406B-8927-E2770AFC72BA
- 7B7E945E-A112-11D9-A5A2-000D93C8BE28
- 3463E85F-F500-49A0-8631-D78ED85F9D60
- 4720ADB8-DD17-4F97-A715-AFD72E22CE45
- CBD82CF3-74E9-4E7A-B3F6-9348754EB5AA
- 69BD9C8F-15C0-4F67-8B7E-64E48B5E9E71
- 2ED44A32-C353-447F-BAE4-E3522DB6944D
- 0658019F-3635-462E-AAC2-74E4FE508A9B
- 3C44EABE-8D6F-4B1B-AB91-F419FAD1A0AD
- 991E7EBD-F3F5-469A-BA01-DC30E04AD472
- BC8B8AE2-5F16-11D9-B9C3-000D93589AF6
- 3DD8406C-A116-11D9-A5A2-000D93C8BE28
- 43C9E8AE-3E53-4B82-A1AF-56697BB3EF09
- 6B024865-6095-4CE3-8EDD-DC6F2230C2FF
- C183920D-A126-11D9-A5A2-000D93C8BE28
- 2C4C9673-B166-432A-8938-75A5CA622481
- 9B13543F-8356-443C-B6E7-D9259B604927
- 89E5CC0A-3EFF-4DEF-A299-2E9651DE6529
- 20D760B5-A127-11D9-A5A2-000D93C8BE28
- 970EE6B4-A091-11D9-A5A2-000D93C8BE28
- B8651C6E-A05E-11D9-86AC-000D93C8BE28
- B79BDBCF-D0C9-468E-BE62-744074D7825F
- E7C5859E-122D-4382-84BE-5AB584DC2409
- 73251DBE-EBD2-470F-8148-E6F2EC1A9641
- 6D6B631D-0D6C-413C-B4FA-1D535CBCE890
- FC34BE82-69DC-47B0-997A-37A8763D4E69
- 73B40BAE-A295-11D9-87F7-000D93C8BE28
- 0ED6DA73-F38F-4A65-B18F-3379D2BA9387
- 3A517A94-001E-464D-8184-1FE56D0D0D70
- E3F8984E-7269-4981-9D30-967AB56A6ACE
- F3512848-7889-45DA-993B-0547976C8E6D
- 32BBB9AB-8732-4F91-A587-354941A27B69
- 48DF7485-52EA-49B3-88AF-3A41F933F325
- CBC24AF4-88E0-498B-BE50-934B9CF29EC7
- F00170EE-4A82-413F-A88B-85293E69A88B
- 069239F5-589C-4564-9354-79369058937F
- E4C05331-DBD8-47D5-9CAF-2E4C2509D1FC
- 363DDC2B-0E64-424E-9B1F-0D13DB0DBE48
- 303A4EE5-A97F-4478-A347-8DB682354B2C
- 315EEBED-BBF9-4CE6-AEB6-65022CC31532
- A150DD2B-3CBB-415E-A76D-80772CF725D3
- 08C01157-7A32-4D3B-A15B-32FE02F288A9
- 34438ACE-808E-4D60-8589-826FB7C6CBE0
- F3BE0F2E-93D8-40FD-BA2B-4636F7726DDC
- 157E2240-DC62-40C7-8BEE-2EA193E575F4
- 8415F03D-0CE4-4478-808B-65ED611D5BCD
- CEF25D24-ED3B-445E-890E-124984B1C842
- 067A025E-9E05-493D-A57F-2B563927213D
- 13A82635-CD7A-4EDC-B1BB-306F905DF2BE
-
- uuid
- 79DE1A1A-DCD0-4E2F-B20B-8FEFE97A7270
-
-
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/package-metadata.json b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/package-metadata.json
deleted file mode 100644
index c39e45b..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/HTML5/package-metadata.json
+++ /dev/null
@@ -1 +0,0 @@
-{"url": "https://github.com/mrmartineau/HTML5", "version": "2013.03.15.05.45.36", "description": "HTML5 bundle for Sublime Text 2"}
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Hayaku - tools for writing CSS faster/.gitignore b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Hayaku - tools for writing CSS faster/.gitignore
deleted file mode 100644
index 52e4e61..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Hayaku - tools for writing CSS faster/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-*.pyc
-*.pyo
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Hayaku - tools for writing CSS faster/CHANGELOG.md b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Hayaku - tools for writing CSS faster/CHANGELOG.md
deleted file mode 100644
index 6f49360..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Hayaku - tools for writing CSS faster/CHANGELOG.md
+++ /dev/null
@@ -1,133 +0,0 @@
-# Changelog for Hayaku
-
-## 1.3.3 2013.03.02
-
-- **New setting:** `hayaku_CSS_syntax_quote_symbol` for used quote symbol ([#71][])
-
-- **New setting:** `hayaku_CSS_syntax_url_quotes` for wrapping clipboarded links in urls with quotes ([#208][])
-
-- Added support for `user-select` property ([#207][])
-
-- Fixing values in abbreviations for `opacity` property ([#209][])
-
-- Don't add units if the value could be unitless (like `line-height`), also `hayaku_CSS_units_for_unitless_numbers` setting for this ([#153][])
-
-[#71]: https://github.com/hayaku/hayaku/issues/71
-[#207]: https://github.com/hayaku/hayaku/issues/207
-[#208]: https://github.com/hayaku/hayaku/issues/208
-[#209]: https://github.com/hayaku/hayaku/issues/209
-[#153]: https://github.com/hayaku/hayaku/issues/153
-
-## 1.3.2 2013.02.27
-
-- Fix the importing method for ST3 again, now should work from the `.sublime-package`.
-
-## 1.3.1 2013.02.08
-
-- Fix the importing method, now the plugin would work from PC in ST3 ([#205][])
-
-[#205]: https://github.com/hayaku/hayaku/issues/205
-
-## 1.3.0 2013.02.07
-
-- **Support for [Sublime Text 3](http://www.sublimetext.com/3) ([#201][])**
-
-- Fixed inline comment setting for OS X and Linux ([#200][], thanks to @freshmango)
-
-- Disable inline commenting in functions and quotes ([#203][])
-
-[#200]: https://github.com/hayaku/hayaku/issues/200
-[#201]: https://github.com/hayaku/hayaku/issues/201
-[#203]: https://github.com/hayaku/hayaku/issues/203
-
-## 1.2.1 2012.12.23
-
-- Hotfixing automatic new line after expand's bug ([#190][])
-
-[#190]: https://github.com/hayaku/hayaku/issues/190
-
-## 1.2.0 2012.12.23
-
-- **New feature:** [basic clipboard defaults](https://github.com/hayaku/hayaku/#clipboard-defaults) (for colors and urls) ([#180][])
-- **New setting:** optional [automatic new line after expand](https://github.com/hayaku/hayaku/#automatic-new-line-after-expand) (not by default) ([#123][])
-- Better handling of multiple carets in snippets ([#188][])
-- Fixed an issue with color postexpands and their default values ([#189][])
-- Restructured the repo, so it would be better updatable and maintainable.
-
-[#123]: https://github.com/hayaku/hayaku/issues/123
-[#180]: https://github.com/hayaku/hayaku/issues/180
-[#188]: https://github.com/hayaku/hayaku/issues/188
-[#189]: https://github.com/hayaku/hayaku/issues/189
-
-## 1.1.1 2012.12.16
-
-- Fixed bug with more than 99 completion parts in a snippet (`display: inline` affected) ([#182][])
-- Fixed bug with wrong position of color postexpand in prefixed clusters ([#183][])
-- Better handling for values that can be parts of other values in postexpands ([#184][])
-- Overall refactoring of the postexpands, not completed, but already fixed some minor issues and the code is almost ready for moving the postexpands to the dictionaries.
-
-[#182]: https://github.com/hayaku/hayaku/issues/182
-[#183]: https://github.com/hayaku/hayaku/issues/183
-[#184]: https://github.com/hayaku/hayaku/issues/184
-
-## 1.1.0 2012.12.10
-
-- **Changed default setting**: now when you use the block expand it expands to the more common code style.
-- **New feature:** added [importance to the postexpand](https://github.com/hayaku/hayaku/#postexpand-for-importance) ([#156][])
-- **New setting:** disabling the [inline comment](https://github.com/hayaku/hayaku/#inline-comments) shortcut for CSS ([#169][])
-- **New setting:** [handling the case of expanded colors](https://github.com/hayaku/hayaku/#colors-case) ([#177][])
-- **New setting:** [handling the length of expanded colors](https://github.com/hayaku/hayaku/#shorthand-colors) ([#50][])
-- Moved the default syntax settings to code, so no restart needed for them to apply ([#160][])
-- Don't indent prefixed properties when using Stylus or Sass ([#176][])
-
-[#169]: https://github.com/hayaku/hayaku/issues/169
-[#156]: https://github.com/hayaku/hayaku/issues/156
-[#160]: https://github.com/hayaku/hayaku/issues/160
-[#176]: https://github.com/hayaku/hayaku/issues/176
-[#177]: https://github.com/hayaku/hayaku/issues/177
-[#50]: https://github.com/hayaku/hayaku/issues/50
-
-## 1.0.4 2012.11.29
-
-- Fixed jumping to newline with proper indentation by tab/enter in non-CSS syntaxes ([#166][])
-- Fixed the occasional removing of the content right to the point where the tab/enter happened ([#168][])
-- Allowing expand to work on a line with other properties (“single line” code style) ([#170][])
-- Some minor refactoring.
-
-[#166]: https://github.com/hayaku/hayaku/issues/166
-[#168]: https://github.com/hayaku/hayaku/issues/168
-[#170]: https://github.com/hayaku/hayaku/issues/170
-
-## 1.0.3 2012.11.27
-
-- **New feature:** Added a way to write [color abbreviations for rgba](https://github.com/hayaku/hayaku/#rgba-values), like `cF.5` to `color: rgba(255,255,255,.5)` etc. ([#66][])
-- Removed colons from default Stylus syntax ([#161][])
-- Fixed possible leaks of default values ([#164][])
-
-[#66]: https://github.com/hayaku/hayaku/issues/66
-[#161]: https://github.com/hayaku/hayaku/issues/161
-[#164]: https://github.com/hayaku/hayaku/issues/164
-
-## 1.0.2 2012.11.26
-
-- Tab didn't work at the empty line after the last statement in Stylus/Sass ([#146][])
-- Enhanced the behaviour of the `enter`/`tab` at the end of the prefixed cluster ([#52][])
-- Fixed strange bugs in expands, when the `` token could show up ([#155][])
-- Upgraded expand code block action (you can press `enter` inside the brackets — in this position: `{|}` — to create a block), so it is not hardcoded now ([#159][])
-- Added an option to disable postexpand ([#152][])
-
-[#146]: https://github.com/hayaku/hayaku/issues/146
-[#52]: https://github.com/hayaku/hayaku/issues/52
-[#155]: https://github.com/hayaku/hayaku/issues/155
-[#159]: https://github.com/hayaku/hayaku/issues/159
-[#152]: https://github.com/hayaku/hayaku/issues/152
-
-## 1.0.1 2012.11.23
-
-- Updated installation instructions ([#147][])
-
-[#147]: https://github.com/hayaku/hayaku/issues/147
-
-## 1.0.0 2012.11.22
-
-- Initial public alpha
\ No newline at end of file
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Hayaku - tools for writing CSS faster/Default (Linux).sublime-keymap b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Hayaku - tools for writing CSS faster/Default (Linux).sublime-keymap
deleted file mode 100644
index 1c0aad1..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Hayaku - tools for writing CSS faster/Default (Linux).sublime-keymap
+++ /dev/null
@@ -1,92 +0,0 @@
-[
- // Main Hayaku context
- {
- "keys": ["tab"],
- "command": "hayaku",
- "context": [{"key": "hayaku_css_context"}]
- }
-
- // tab or enter at the end of a line should jump to a correct line
- , {
- "keys": ["tab"],
- "command": "hayaku_add_line",
- "context": [
- {"key": "hayaku_add_line"},
- {"key": "hayaku_at_css"},
- {"key": "hayaku_single_caret"}
- ]
- }
- , {
- "keys": ["enter"],
- "command": "hayaku_add_line",
- "context": [
- {"key": "hayaku_add_line"},
- {"key": "hayaku_at_css"},
- {"key": "hayaku_single_caret"}
- ]
- }
-
- // Temporary fix for the semicolon inserting (bad bad whitespace after)
- , { "keys": [":"], "command": "insert_snippet", "args": {"contents": ":$0"}, "context":
- [
- { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
- { "key": "hayaku_at_css" },
- { "key": "hayaku_single_caret" },
- { "key": "following_text", "operator": "regex_contains", "operand": "^(?:\t| |\\}|$)", "match_all": true }
- ]
- }
-
- // Temporary inline comment for CSS (would be replaced by a more useful command)
- , {
- "keys": ["/","/"],
- "command": "insert_snippet",
- "args": {"contents": "/* ${1} */$0"},
- "context": [
- { "key": "selector", "operator": "equal", "operand": "source.css -comment.block.css -punctuation.section.function.css -string.quoted", "match_all": true },
- { "key": "setting.hayaku_CSS_disable_inline_comment", "operator": "not_equal", "operand": true }
- ]
- }
-
- // Command for inserting CSS code block
- , {
- "keys": ["ctrl+enter"],
- "command": "hayaku_add_code_block",
- "context": [
- {"key": "hayaku_add_code_block"},
- {"key": "hayaku_at_css"},
- {"key": "hayaku_single_caret"}
- ]
- }
-
- // Command for inserting right indent for code block by enter in braces
- , {
- "keys": ["enter"],
- "command": "hayaku_expand_code_block",
- "context": [
- {"key": "hayaku_at_css"},
- {"key": "hayaku_single_caret"},
- {"key": "preceding_text", "operator": "regex_match", "operand": ".*\\{$" },
- {"key": "following_text", "operator": "regex_match", "operand": "^\\}" }
- ]
- },
-
- // Commands to jump out of multiple selections in CSS
- {
- "keys": ["up"],
- "command": "clear_fields",
- "context": [
- {"key": "has_next_field", "operator": "equal", "operand": true},
- {"key": "hayaku_at_css"},
- {"key": "hayaku_going_up"}
- ]
- },
- {
- "keys": ["down"],
- "command": "clear_fields",
- "context": [
- {"key": "has_next_field", "operator": "equal", "operand": true},
- {"key": "hayaku_at_css"},
- {"key": "hayaku_going_down"}
- ]
- }
-]
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Hayaku - tools for writing CSS faster/Default (OSX).sublime-keymap b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Hayaku - tools for writing CSS faster/Default (OSX).sublime-keymap
deleted file mode 100644
index 2d4ba50..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Hayaku - tools for writing CSS faster/Default (OSX).sublime-keymap
+++ /dev/null
@@ -1,92 +0,0 @@
-[
- // Main Hayaku context
- {
- "keys": ["tab"],
- "command": "hayaku",
- "context": [{"key": "hayaku_css_context"}]
- }
-
- // tab or enter at the end of a line should jump to a correct line
- , {
- "keys": ["tab"],
- "command": "hayaku_add_line",
- "context": [
- {"key": "hayaku_add_line"},
- {"key": "hayaku_at_css"},
- {"key": "hayaku_single_caret"}
- ]
- }
- , {
- "keys": ["enter"],
- "command": "hayaku_add_line",
- "context": [
- {"key": "hayaku_add_line"},
- {"key": "hayaku_at_css"},
- {"key": "hayaku_single_caret"}
- ]
- }
-
- // Temporary fix for the semicolon inserting (bad bad whitespace after)
- , { "keys": [":"], "command": "insert_snippet", "args": {"contents": ":$0"}, "context":
- [
- { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
- { "key": "hayaku_at_css" },
- { "key": "hayaku_single_caret" },
- { "key": "following_text", "operator": "regex_contains", "operand": "^(?:\t| |\\}|$)", "match_all": true }
- ]
- }
-
- // Temporary inline comment for CSS (would be replaced by a more useful command)
- , {
- "keys": ["/","/"],
- "command": "insert_snippet",
- "args": {"contents": "/* ${1} */$0"},
- "context": [
- { "key": "selector", "operator": "equal", "operand": "source.css -comment.block.css -punctuation.section.function.css -string.quoted", "match_all": true },
- { "key": "setting.hayaku_CSS_disable_inline_comment", "operator": "not_equal", "operand": true }
- ]
- }
-
- // Command for inserting CSS code block
- , {
- "keys": ["super+enter"],
- "command": "hayaku_add_code_block",
- "context": [
- {"key": "hayaku_add_code_block"},
- {"key": "hayaku_at_css"},
- {"key": "hayaku_single_caret"}
- ]
- }
-
- // Command for inserting right indent for code block by enter in braces
- , {
- "keys": ["enter"],
- "command": "hayaku_expand_code_block",
- "context": [
- {"key": "hayaku_at_css"},
- {"key": "hayaku_single_caret"},
- {"key": "preceding_text", "operator": "regex_match", "operand": ".*\\{$" },
- {"key": "following_text", "operator": "regex_match", "operand": "^\\}" }
- ]
- },
-
- // Commands to jump out of multiple selections in CSS
- {
- "keys": ["up"],
- "command": "clear_fields",
- "context": [
- {"key": "has_next_field", "operator": "equal", "operand": true},
- {"key": "hayaku_at_css"},
- {"key": "hayaku_going_up"}
- ]
- },
- {
- "keys": ["down"],
- "command": "clear_fields",
- "context": [
- {"key": "has_next_field", "operator": "equal", "operand": true},
- {"key": "hayaku_at_css"},
- {"key": "hayaku_going_down"}
- ]
- }
-]
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Hayaku - tools for writing CSS faster/Default (Windows).sublime-keymap b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Hayaku - tools for writing CSS faster/Default (Windows).sublime-keymap
deleted file mode 100644
index 1c0aad1..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Hayaku - tools for writing CSS faster/Default (Windows).sublime-keymap
+++ /dev/null
@@ -1,92 +0,0 @@
-[
- // Main Hayaku context
- {
- "keys": ["tab"],
- "command": "hayaku",
- "context": [{"key": "hayaku_css_context"}]
- }
-
- // tab or enter at the end of a line should jump to a correct line
- , {
- "keys": ["tab"],
- "command": "hayaku_add_line",
- "context": [
- {"key": "hayaku_add_line"},
- {"key": "hayaku_at_css"},
- {"key": "hayaku_single_caret"}
- ]
- }
- , {
- "keys": ["enter"],
- "command": "hayaku_add_line",
- "context": [
- {"key": "hayaku_add_line"},
- {"key": "hayaku_at_css"},
- {"key": "hayaku_single_caret"}
- ]
- }
-
- // Temporary fix for the semicolon inserting (bad bad whitespace after)
- , { "keys": [":"], "command": "insert_snippet", "args": {"contents": ":$0"}, "context":
- [
- { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
- { "key": "hayaku_at_css" },
- { "key": "hayaku_single_caret" },
- { "key": "following_text", "operator": "regex_contains", "operand": "^(?:\t| |\\}|$)", "match_all": true }
- ]
- }
-
- // Temporary inline comment for CSS (would be replaced by a more useful command)
- , {
- "keys": ["/","/"],
- "command": "insert_snippet",
- "args": {"contents": "/* ${1} */$0"},
- "context": [
- { "key": "selector", "operator": "equal", "operand": "source.css -comment.block.css -punctuation.section.function.css -string.quoted", "match_all": true },
- { "key": "setting.hayaku_CSS_disable_inline_comment", "operator": "not_equal", "operand": true }
- ]
- }
-
- // Command for inserting CSS code block
- , {
- "keys": ["ctrl+enter"],
- "command": "hayaku_add_code_block",
- "context": [
- {"key": "hayaku_add_code_block"},
- {"key": "hayaku_at_css"},
- {"key": "hayaku_single_caret"}
- ]
- }
-
- // Command for inserting right indent for code block by enter in braces
- , {
- "keys": ["enter"],
- "command": "hayaku_expand_code_block",
- "context": [
- {"key": "hayaku_at_css"},
- {"key": "hayaku_single_caret"},
- {"key": "preceding_text", "operator": "regex_match", "operand": ".*\\{$" },
- {"key": "following_text", "operator": "regex_match", "operand": "^\\}" }
- ]
- },
-
- // Commands to jump out of multiple selections in CSS
- {
- "keys": ["up"],
- "command": "clear_fields",
- "context": [
- {"key": "has_next_field", "operator": "equal", "operand": true},
- {"key": "hayaku_at_css"},
- {"key": "hayaku_going_up"}
- ]
- },
- {
- "keys": ["down"],
- "command": "clear_fields",
- "context": [
- {"key": "has_next_field", "operator": "equal", "operand": true},
- {"key": "hayaku_at_css"},
- {"key": "hayaku_going_down"}
- ]
- }
-]
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Hayaku - tools for writing CSS faster/LICENSE b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Hayaku - tools for writing CSS faster/LICENSE
deleted file mode 100644
index b189e6c..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Hayaku - tools for writing CSS faster/LICENSE
+++ /dev/null
@@ -1,22 +0,0 @@
-(The MIT License)
-
-Copyright (c) 2012 Roman Komarov , Sergey Mezentsev
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-'Software'), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Hayaku - tools for writing CSS faster/Preferences.sublime-settings b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Hayaku - tools for writing CSS faster/Preferences.sublime-settings
deleted file mode 100644
index bd65b06..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Hayaku - tools for writing CSS faster/Preferences.sublime-settings
+++ /dev/null
@@ -1,54 +0,0 @@
-{
- "disable_tab_abbreviations_for_scopes": "css,less,sass,scss,stylus",
- "auto_complete_selector": "source -comment -source.css -source.sass -source.scss -source.stylus",
-
-
-// Unused settings, work in progress
-
-// Code Style
-
- // "hayaku_CSS_colors_use_names": false, // Would expand `#000` to `black` when `true`
- // "hayaku_CSS_numbers_leading_zero": true, // Would expand `.3` to `0.3` when `true`
-
- // "hayaku_CSS_default_unit": "px", // `w10` -> `width: 10px`
- // "hayaku_CSS_default_unit_decimal": "em" // `w.5` -> `width: 10em`
-
-
- // DO NOT EDIT
- "hayaku_css_dict_snippets": {
- "": {
- ".": "em"
- },
- "": {
- "percentage": "%"
- },
- "": {
- "linear-gradient()" : "linear-gradient(${1:top}, ${2:#000} ${3:0}, ${4:#FFF} ${5:100%})",
- "repeating-linear-gradient()" : "repeating-linear-gradient(${1:center}, ${2:#000} ${3:0}, ${4:#FFF} ${5:25%})",
- "radial-gradient()" : "radial-gradient(${1:center}, ${2:#000} ${3:0}, ${4:#FFF} ${5:100%})",
- "repeating-radial-gradient()" : "repeating-radial-gradient(${1:center}, ${2:#000} ${3:0}, ${4:#FFF} ${5:25%})"
- },
- // "box-shadow": {
- // "inset" : "inset ${1:0} ${2:0} ${3:0} ${4:rgba(0,0,0,.5)}",
- // "[${1:0} ${2:0} ${3:0} ${4:rgba(0,0,0,.5)}]"
- // },
- // "text-shadow": {
- // "[${1:0} ${2:0} ${3:0} ${4:rgba(255,255,255,.5)}]"
- // },
- // "content": {
- // "[\"$1\"]"
- // },
- "quotes": {
- "english": "\"\\201C\" \"\\201D\" \"\\2018\" \"\\2019\"",
- "russian": "\"\\00AB\" \"\\00BB\" \"\\201E\" \"\\201C\""
- },
- "font": {
- "arial" : "1em/1.4 \"Helvetica Neue\", Arial, sans-serif",
- "verdana" : "86%/1.4 Verdana, sans-serif"
- }
- // "transition" : {
- // "[${1:all} ${2:linear} ${3:.3s}]"
- // }
-}
-
-}
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Hayaku - tools for writing CSS faster/README.md b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Hayaku - tools for writing CSS faster/README.md
deleted file mode 100644
index b161b56..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Hayaku - tools for writing CSS faster/README.md
+++ /dev/null
@@ -1,404 +0,0 @@
-# Hayaku [1.3.3](https://github.com/hayaku/hayaku/blob/master/CHANGELOG.md)
-
-Hayaku is a bundle of useful scripts aiming for rapid front-end web development.
-
-The main aim of Hayaku is to create the fastest way to write and maintain CSS code in an editor.
-
-# Table of Contents
-
-1. [Install Hayaku for Sublime Text](#install-hayaku-for-sublime-text)
-
-2. [Features](#features)
- - [Smart CSS Abbreviations](#smart-css-abbreviations)
- - [Fuzzy CSS property abbreviations](#fuzzy-css-property-abbreviations)
- - [Smart CSS values abbreviations](#smart-css-values-abbreviations)
- - [Numeric values in abbreviations](#numeric-values-in-abbreviations)
- - [Color values in abbreviations](#color-values-in-abbreviations) with [RGBA values](#rgba-values)
- - [Importance modifier](#importance-modifier)
- - [Default values](#Default-values)
- - [Clipboard defaults](#clipoard-defaults)
- - [Postexpands](#postexpands)
- - [Simple property postexpands](#simple-property-postexpands)
- - [Postexpands for units](#postexpands-for-units)
- - [Postexpands for colors](#postexpands-for-colors)
- - [Postexpand for importance](#postexpand-for-importance)
- - [Creating new CSS rule blocks](#creating-new-css-rule-blocks)
- - [Inline comments](#inline-comments)
-
-
-3. [Settings and Preferences](#settings-and-preferences)
- - [Autoguessing the code style](#autoguessing-the-code-style)
- - [Single code style](#single-code-style)
- - [Automatic new line after expand](#automatic-new-line-after-expand)
- - [Quotes and URLs](#quotes-and-urls)
- - [Units for unitless values](#units-for-unitless-values)
- - [Prefixes options](#prefixes-options)
- - [The aligning for the prefixes](#the-aligning-for-the-prefixes)
- - [Using only specific prefixes](#using-only-specific-prefixes)
- - [Options for colors](#options-for-colors)
- - [Colors' case](#colors-case)
- - [Shorthand colors](#shorthand-colors)
-
-
-4. [Using Hayaku with CSS Preprocessors](#using-hayaku-with-css-preprocessors)
-
-5. [License and copyrights](#license-and-copyrights)
-
-
-# Install Hayaku for [Sublime Text](http://www.sublimetext.com/2)
-
-Right now Hayaku is available only for Sublime Text (even for third version!), but when it would be complete, we would port it to some other editors.
-
-#### Using [Package Control](http://wbond.net/sublime_packages/package_control):
-
-1. Run `Package Control: Install Package` command
-2. Search for `Hayaku - tools for writing CSS faster` (`Hayaku` should be enough) and wait for it to be installed
-3. Restart Sublime Text (required to make default settings for different syntaxes to work)
-
-#### Or manually, using git:
-
-Clone repository into Packages directory (can be found using `Preferences: Browse Packages` command in Sublime Text)
-``` sh
-git clone git://github.com/hayaku/hayaku.git
-```
-
-And then restart Sublime Text.
-
-# Features
-
-## Smart CSS Abbreviations
-
-Hayaku is not your average snippet engine. Most of the CSS snippets to date are static — you need to remember all the abbreviations if you want to use them.
-
-Hayaku offers a better and faster way: you don't need to remember anything, you can just try to write the shortest abbreviation for a thing you want to write in CSS — and Hayaku would try to guess it when you press `tab`.
-
-There are a lot of things Hayaku can do in abbeviations, here are some of them:
-
-### Fuzzy CSS property abbreviations
-
-This is the first basic thing: Hayaku don't have any premade snippets for CSS, it have a dictionary with a lot of CSS properties, so when you write some abrakadabra, it tries to parse it and guess what you meant. For most properties those abbreviations could be rather short, but you're not sticked to them: you can write as much letters for a property as you wish.
-
-So, writing `w`, `wi` or `wid` would give you `width`. And don't forget about the fuzzy part: `wdt` and `wdth` would work too.
-
-Sometimes you would guess that some abbreviations must become other things, but in most cases all the variants have some logic beyound. `b` could be expanded to `background` or `border`, but expanded to `bottom` instead — it's becouse all the “sides” values are abbreviated to just one letter: **l**eft, **r**eft, **t**op, so **b**ottom goes by this path.
-
-However, if you feel that some abbreviation just need to be not that is expands to, feel free to [fill up an issue](https://github.com/hayaku/hayaku/issues/new).
-
-### Smart CSS values abbreviations
-
-Here comes the second basic thing of Hayaku, the awesome one. You can expand abbreviations for the property+value parts, but you don't need to use any delimiters in those abbreviations! That's right — you can just write something like `por` and get `position: relative`!
-
-This works also fuzzy, so to get `position: relative` you could use any number of letters: `pore`, `posrel`, `pstnrltv` etc. Also, if you want, you can still use a delimiter — just add a colon between the property and value and get the same result. So, if you want to stick to Zen style, use it — `pos:r` would work as intended. And `p:r` would work too — while `pr` would expand to `padding-right`, adding delimiter could help by removing ambiguity — padding can't have any values containing `r`, so hayaku falls to `position`.
-
-### Numeric values in abbreviations
-
-Hayaku understands a lot of ways of writing numeric abbreviations.
-
-- You can just write a number after abbreviation to treat it as a value: `w10` would expand to `width: 10px` (see? automatic pixels!).
-
-- Negative numbers supported too: `ml-10` would expand to `margin-left: -10px`.
-
-- If you'd write a dot somewhere in abbreviation, Hayaku would guess what you need `em`s, so `w10.5` would expand to `width: 10.5em`.
-
-- There are some abbreviations for some units, like `percents` for `%`, or `.` for em, so `100p` would expand to `100%` and `10.` to `10em`.
-
-- All other units are supported, `h2pt` would expand to `height:2pt` and so on. Fuzzy guess is there too: if you'd want `vh` you could write just `w10h` and get `width: 10vh`.
-
-### Color values in abbreviations
-
-Actually, you can not only expand strings and numbers, you can expand even colors using abbreviations! You can use different ways to achieve that (as anything in Hayaku), so just look at those examples:
-
-- `c0` → `color: #000`
-- `cF` → `color: #FFF` (use uppercase to tell Hayaku it's a color)
-- `cFA` → `color: #FAFAFA`
-- `c#fa` → `color: #FAFAFA` (no need in uppercase if you use `#`)
-
-And, of course, this works everywhere you would expect colors to work, so `brc0` would expand to `border-right-color: #000;`
-
-#### RGBA values
-
-There is also a way to expand `rgba` values for colors — you can either use rgba's alpha after the dot, either use hexadecimal alpha after the full color, if you'd like. This would look like this:
-
-- `c0.5` → `color: rgba(0,0,0,.5)`
-- `cF.2` → `color: rgba(255,255,255,.2)`
-- `cABCD` → `color: rgba(170,187,204,0.87)`
-- `cABC80` → `color: rgba(170,187,204,0.5)`
-
-You can also write just the dot and get the placeholder on the `alpha` part of the `rgba`:
-
-- `cF00.` → `color: rgba(255,0,0,.[5])`
-
-### Importance modifier
-
-A nice little feature: add `!` after abbreviation and get ` !important` at the end. Not that importance is something you would want to use everyday, but still.
-
-`dn!` would give you `display:none !important;`, yeah.
-
-### Automatic vendor prefixes
-
-If you need some vendor prefixes, Hayaku could provide them!
-
-`bra1.5` would expand to this:
-
-``` CSS
--webkit-border-radius: 1.5em;
- border-radius: 1.5em;
-```
-
-Right now there are no prefixes for values (like gradients etc.) but someday they'd be there.
-
-### Default values
-
-If you'd write something that is only a property (as Hayaku would guess), Hayaku would insert a snippet with some default value already selected for you, so you could start writing your own value to replace it or to press `tab` again to keep it and move forward. So, writing `w` would actually expand to `width: [100%]` (braces mean that this value is selected by default).
-
-### Clipboard defaults
-
-Aside from the normal defaults, Hayaku would try to use your clipboard for getting the value from it as the default value.
-
-Right now it's available for colors and images urls:
-
-- If you'd have color in hexadecimal, rgb(a) or hsl(a) in your clipboard, Hayaku would use it as a default shown value. That would work even is the value is hashless, so if you've copied `808080` from anywhere, then on expanding `c` you would get `color: #[808080]`.
-
-- If you'd have an image url in your clipboard (even relative, Hayaku would look at extension), you'd have it added as default values along inside an `url()`. Also, see [quotes and URLs](#quotes-and-urls) settings on how to adjust the quoting of the inserted url if you want.
-
-#### Configure clipboard defaults
-
-Hayaku offers a setting to set up the behavior of the Clipboard defaults: `hayaku_CSS_clipboard_defaults`. It is an array of the value types that Hayaku could accept as the defaults. So, to disable all the clipboard defaults you could use this setting:
-
-``` JSON
-{
- "hayaku_CSS_clipboard_defaults": [""]
-}
-```
-
-## Postexpands
-
-“Postexpands” is a nice Hayaku's feature, that allows you to expand only the property at first and then use instant autocomplete for the values of numbers.
-
-That must be said is that postexpand is a bit different from the usual abbreviation expands — it don't have any fuzzy search inside, so only the first letters matter. However, as you'd use it you would see that it is still a powerfull feature.
-
-### Simple property postexpands
-
-The simplest postexpand feature is autocomplete for the string values of different properties.
-
-If you'd expand some property like `po` to `position: |;`, then you could start writing any of it's values and get they expanded right after the cursor. So, writing `a` would give you `position: a|bsolute;`.
-
-### Postexpands for units
-
-Another postexpand feature would allow you to firstly expand the property that can have numeric values, like `width` and then write only the digits and let Hayaku place the corresponding units automatically.
-
-So, when you expand, for example, `w` to `width: |;`, you'd get different options:
-
-- write any iteger like `10` and you'd get `width: 10|px;`
-- write any float like `1.5` and you'd get `width: 1.5|em;`
-- write an integer and them `e`, so you'd get `width: 10e|m;`
-- if the value have any string values, you can also use them: writing `a` would give you `width: a|uto;`
-
-Negative numbers could still be used and if you'd like any other unit, you could just write it down, the autocompleted units won't bother you.
-
-### Postexpands for colors
-
-As you can use shortcuts to colors in abbreviations, you could also write the color values after expanding only the property. The basics are the same: `color: |;` + `F` would give you `color: #F|FF;`, and so on. You can use or don't use the hash symbol.
-
-Another somewhat obscure (but helpful) feature is postexpand for `rgba` colors. This is triggered by writing the comma after decimal value. There is also a shortcut to the alpha value.
-
-- `color: 255,|` would transform to `color: rgba(255,|255,255,1);`
-- `color: 255,.|` would transform to `color: rgba(255,255,255,.|5);`
-
-There are a lot of things we could improve there, so stay tuned.
-
-### Postexpand for importance
-
-If you'd like to make some value important, you could just write the first symbols of `!important` keyword and Hayaku would autocomplete it for you.
-
-### Disabling postexpands
-
-If you'd wish to disable postexpands at all for some reason, you could use this setting for this: `"hayaku_CSS_disable_postexpand": true`
-
-## Creating new CSS rule blocks
-
-In Hayaku there is a simple but powerful feature: when you wrote a selector, you could just press `CMD+Enter` to get a block for writing CSS here.
-
-## Inline comments
-
-Another little helper: write `//` in CSS to have it expanded to `/* | */` (where the pipe is a caret placement).
-
-If you'd wish to disable inline comments, you could use this setting: `"hayaku_CSS_disable_inline_comment": true`
-
-*This feature is in development, we plan on adding a lot of things to make commenting fun.*
-
-# Settings and Preferences
-
-Hayaku have **a lot** of different configurable options, both for your code style and for different features you'd wish to use.
-
-## Autoguessing the code style
-
-The easiest way to set the basic settings for your codestyle, is to use `hayaku_CSS_syntax_autoguess` option:
-
-``` JSON
-{
- "hayaku_CSS_syntax_autoguess": [
- " selector { ",
- " property: value; ",
- " } "
- ]
-}
-```
-
-There you can use any whitespaces between the predefined keywords and they would be used by Hayaku. A few notes regarding this setting:
-
-- You should use the newline symbol `\n` or multiple array items, because JSON don't support multiline well.
-- For your convenience you can use any leading of trailing spaces. Trailing spaces would be stripped at all, leading spaces would be stripped as if there weren't spaces at the start of the selector.
-
-Maybe someday there'd be a _real_ autoguessing, that would read your open stylesheet and find what better suits it, but not today.
-
-## Single code style
-
-If you don't want to use autoguessing, then you could define single options one by one. This would also be helpful if you'd want to redefine only some of the code styling settings in other project or syntax.
-
-Here is a JSON with all the available single code styling options:
-
-``` JSON
-{
- "hayaku_CSS_whitespace_after_colon": " ",
- "hayaku_CSS_whitespace_block_start_before": " ",
- "hayaku_CSS_whitespace_block_start_after": "\n\t",
- "hayaku_CSS_whitespace_block_end_before": "\n\t",
- "hayaku_CSS_whitespace_block_end_after": ""
-}
-```
-
-The names speak for themselves there.
-
-The important thing is that the single code style settings always override the autoguessed one.
-
-## Automatic new line after expand
-
-That's somewhat experimental feature, that is disabled by default. To enable it use this setting:
-
-``` JSON
-{
- "hayaku_CSS_newline_after_expand": true
-}
-```
-
-With this setting you could save a bit more time, cause Hayaku would add a new line after you expand your abbreviations. The only downside is that you'll need to delete a line when you finish with the selector or when you're inserting something between existing lines.
-
-## Quotes and URLs
-
-By default Hayaku uses double quotes for different CSS stuff (like `content: ""`). You can change this by setting this:
-
-``` JSON
-{
- "hayaku_CSS_syntax_quote_symbol": "'"
-}
-```
-
-Also, by default the image urls wouldn't have quotes in CSS-like syntaxes and would have them in Sass or Stylus, you can override this automatic behaviour by setting `hayaku_CSS_syntax_url_quotes` setting to `true` or `false`.
-
-## Units for unitless values
-
-By default Hayaku won't add `em` or `px` after values for properties like `line-height`. If you're not using unit less values for those properties, you could enable them like this:
-
-``` JSON
-{
- "hayaku_CSS_units_for_unitless_numbers": true
-}
-```
-
-## Prefixes options
-
-If you don't want to use any prefixes at all (as if you're using some mixins for it in Stylus, or use prefix-free), you can disable them with that option:
-
-``` JSON
-{
- "hayaku_CSS_prefixes_disable": true
-}
-```
-
-### The aligning for the prefixes
-
-By default Hayaku aligns expanded prefixed properties in this nice way:
-
-``` CSS
-.foo {
- -webkit-transform: rotate(45deg);
- -moz-transform: rotate(45deg);
- -ms-transform: rotate(45deg);
- -o-transform: rotate(45deg);
- transform: rotate(45deg);
- }
-```
-
-This way it's easier to spot changes to a single prefixed property and to use multiline edit on them.
-
-However, if you'd want to expand such properties left aligned, set
-
-``` JSON
-{
- "hayaku_CSS_prefixes_align": false
-}
-```
-
-### Using only specific prefixes
-
-This is not something that you would use often, but if you'd need, you could use only prefixes for browsers you want. There are two settigns for this:
-
-``` JSON
-{
- "hayaku_CSS_prefixes_only": ["webkit","moz","o"],
- "hayaku_CSS_prefixes_no_unprefixed": true
-}
-```
-
-- `hayaku_CSS_prefixes_only` is an array of the prefixes you'd want to use **only**. In the upper example I excuded `ms` prefix, so if you'd use meta to emulate all IE versions to IE7 for example, then you could remove `ms` prefix, so your CSS would be a bit cleaner.
-- when `hayaku_CSS_prefixes_no_unprefixed` is set to `True`, such prefixed clusters won't contain the official unprefixed variant.
-
-Right now there is no easy way to adjust prefixes per property, but it would be there in a near feature, so stay tuned!
-
-## Options for colors
-
-Note that those settings would work for every pre-set and expanded colors, like the default color values, but they won't work for postexpands due to their mechanics.
-
-### Colors' case
-
-You can tell Hayaku if you prefer `lowercase` or `uppercase` for color values, so it would change the case while expanding abbreviations like `c#f`, `cF` etc.
-
-The default value is `uppercase`, so `c#f` would become `color: #FFF`. If you'd like to change that to `lowercase`, you can set it this way:
-
-``` JSON
-{
- "hayaku_CSS_colors_case": "lowercase"
-}
-```
-
-And if you'd like it to leave the color as is, you could use value `initial`.
-
-### Shorthand colors
-
-By default Hayaku shortens the colous, so if there could be `#FFFFFF` expanded, Hayaku would make it `#FFF`.
-
-However, if you wish, you can redefine this behavior using this setting:
-
-``` JSON
-{
- "hayaku_CSS_colors_length": "long"
-}
-```
-
-That would make `cF` to be expanded into `color: #FFFFFF`.
-
-
-# Using Hayaku with CSS Preprocessors
-
-“Hey! I don't need to write CSS faster — I use Preprocessors!” you could say. But, well, you would still need to write all those extra symbols, so abbreviations would fit preprocessors well. And as Hayaku is highly customizable, you could use it with any preprocessor: Sass, Less, Stylus etc.
-
-Right now only basic things are available, but in feature you could expand different mixins and functions too, so just wait for it.
-
-- - -
-
-And this is just the start, there would be a lot of other nice features, so still tuned and follow the [official bundle's twitter](http://twitter.com/#!/hayakubundle)!
-
-# License and copyrights
-
-This software is released under the terms of the [MIT license](https://github.com/hayaku/hayaku/blob/master/LICENSE).
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Hayaku - tools for writing CSS faster/add_code_block.py b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Hayaku - tools for writing CSS faster/add_code_block.py
deleted file mode 100644
index 19fde65..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Hayaku - tools for writing CSS faster/add_code_block.py
+++ /dev/null
@@ -1,159 +0,0 @@
-#!/usr/bin/python
-import re
-import sublime
-import sublime_plugin
-
-
-# __all__ = [
-# 'HayakuAddCodeBlockCommand',
-# 'HayakuExpandCodeBlockCommand',
-# ]
-
-# Guessing the codestyle 1 2 3 4 5 6 7 8 9
-GUESS_REGEX = re.compile(r'selector(\s*)(\{)?(\s*)property(:)?(\s*)value(;)?(\s*)(\})?(\s*)', re.IGNORECASE)
-
-
-def get_hayaku_options(self):
- settings = self.view.settings()
- options = {}
- match = {}
- # Autoguessing the options
- if settings.get("hayaku_CSS_syntax_autoguess"):
- autoguess = settings.get("hayaku_CSS_syntax_autoguess")
- offset = len(autoguess[0]) - len(autoguess[0].lstrip())
- autoguess = [ s[offset:].rstrip() for s in autoguess]
-
- match = GUESS_REGEX.search('\n'.join(autoguess))
-
- # Helper to set an option got from multiple sources
- def get_setting(setting, fallback, match_group = False):
- if match_group and match:
- fallback = match.group(match_group)
- single_setting = False
- if settings.has("hayaku_" + setting):
- single_setting = settings.get("hayaku_" + setting, fallback)
- options[setting] = single_setting or fallback
-
- # Some hardcode for different scopes
- # (could this be defined better?)
- scope_name = self.view.scope_name(self.view.sel()[0].a)
- is_sass = sublime.score_selector(scope_name, 'source.sass') > 0
- is_stylus = sublime.score_selector(scope_name, 'source.stylus') > 0
-
- disable_braces = is_stylus or is_sass
- if is_stylus and match and match.group(2) and match.group(8):
- disable_braces = False
-
- disable_colons = is_stylus
- if match and match.group(4):
- disable_colons = False
-
- disable_semicolons = is_stylus or is_sass
- if is_stylus and match and match.group(6):
- disable_semicolons = False
-
- # Calling helper, getting all the needed options
- get_setting("CSS_whitespace_block_start_before", " ", 1 )
- get_setting("CSS_whitespace_block_start_after", "\n\t", 3 )
- get_setting("CSS_whitespace_block_end_before", "\n", 7 )
- get_setting("CSS_whitespace_block_end_after", "", 9 )
- get_setting("CSS_whitespace_after_colon", " ", 5 )
- get_setting("CSS_newline_after_expand", False)
- get_setting("CSS_syntax_no_curly_braces", disable_braces )
- get_setting("CSS_syntax_no_colons", disable_colons )
- get_setting("CSS_syntax_no_semicolons", disable_semicolons )
- get_setting("CSS_syntax_url_quotes", (is_stylus or is_sass) )
- get_setting("CSS_syntax_quote_symbol", "\"" ) # or "'"
- get_setting("CSS_prefixes_disable", False )
- get_setting("CSS_prefixes_align", not (is_stylus or is_sass) )
- get_setting("CSS_prefixes_only", [] )
- get_setting("CSS_prefixes_no_unprefixed", False )
- get_setting("CSS_disable_postexpand", False )
- get_setting("CSS_units_for_unitless_numbers", False )
- get_setting("CSS_colors_case", "uppercase" ) # or "lowercase" or "initial"
- get_setting("CSS_colors_length", "short" ) # or "long" or "initial"
- get_setting("CSS_clipboard_defaults", ["colors","images"] )
-
- return options
-
-def hayaku_get_block_snippet(options, inside = False):
- start_before = options["CSS_whitespace_block_start_before"]
- start_after = options["CSS_whitespace_block_start_after"]
- end_before = options["CSS_whitespace_block_end_before"]
- end_after = options["CSS_whitespace_block_end_after"]
- opening_brace = "{"
- closing_brace = "}"
-
- if options["CSS_syntax_no_curly_braces"]:
- opening_brace = ""
- closing_brace = ""
- start_after = ""
- end_after = ""
-
- if inside:
- opening_brace = ""
- closing_brace = ""
- start_before = ""
- end_after = ""
-
- return ''.join([
- start_before
- , opening_brace
- , start_after
- , "$0"
- , end_before
- , closing_brace
- , end_after
- ])
-
-# Command
-class HayakuExpandCodeBlockCommand(sublime_plugin.TextCommand):
- def run(self, edit):
- # TODO: consume the braces and whitespaces around and inside
- self.view.run_command("insert_snippet", {"contents": hayaku_get_block_snippet(get_hayaku_options(self),True)})
-
-class HayakuAddCodeBlockCommand(sublime_plugin.TextCommand):
- def run(self, edit):
- result = '/* OVERRIDE ME */'
-
- # Determine the limits for place searching
- regions = self.view.sel()
- region = regions[0]
- line = self.view.line(region)
- stop_point = self.view.find('[}]\s*',line.begin())
- if stop_point is not None and not (-1, -1):
- end = stop_point.end()
- else:
- end = self.view.find('[^}]*',line.begin()).end()
- where_to_search = self.view.substr(
- sublime.Region(
- line.begin(),
- end
- )
- )
-
- options = get_hayaku_options(self)
-
- # Insert a code block if we must
- found_insert_position = re.search('^([^}{]*?[^;,}{\s])\s*(?=\n|$)',where_to_search)
- if found_insert_position is not None:
- self.view.sel().clear()
- self.view.sel().add(sublime.Region(len(found_insert_position.group(1)) + line.begin(), len(found_insert_position.group(1)) + line.begin()))
-
- result = hayaku_get_block_snippet(options)
- else:
- # Place a caret + create a new line otherwise
- # FIXME: the newline is not perfectly inserted. Must rethink it so there wouldn't
- # be replacement of all whitespaces and would be better insertion handling
- found_insert_rule = re.search('^(([^}]*?[^;]?)\s*)(?=\})',where_to_search)
- if found_insert_rule:
- self.view.sel().clear()
- self.view.sel().add(sublime.Region(len(found_insert_rule.group(2)) + line.begin(), len(found_insert_rule.group(1)) + line.begin()))
-
- result = ''.join([
- options["CSS_whitespace_block_start_after"]
- , "$0"
- , options["CSS_whitespace_block_end_before"]
- ])
-
- self.view.run_command("insert_snippet", {"contents": result})
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Hayaku - tools for writing CSS faster/contexts.py b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Hayaku - tools for writing CSS faster/contexts.py
deleted file mode 100644
index ac86901..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Hayaku - tools for writing CSS faster/contexts.py
+++ /dev/null
@@ -1,141 +0,0 @@
-#!/usr/bin/python
-import re
-import sublime
-import sublime_plugin
-
-REGEX_WHITESPACES = re.compile(r'^\s*$')
-
-class HayakuSingleCaretContext(sublime_plugin.EventListener):
- def on_query_context(self, view, key, *args):
- if key != "hayaku_single_caret":
- return None
-
- # Multiple blocks inserting doesn't make sense
- if len(view.sel()) > 1:
- return None
-
- # TODO: understand selection, but don't replace it on code block inserting
- if not view.sel()[0].empty():
- return None
-
- return True
-
-class HayakuAtCssContext(sublime_plugin.EventListener):
- def on_query_context(self, view, key, *args):
- if key != "hayaku_at_css":
- return None
-
- # Looking for the scope
- if not view.score_selector(view.sel()[0].begin(),'source.css, source.stylus, source.sass, source.scss'):
- return None
-
- return True
-
-class HayakuAddCodeBlockContext(sublime_plugin.EventListener):
- def on_query_context(self, view, key, *args):
- if key != "hayaku_add_code_block":
- return None
-
- # Determining the left and the right parts
- region = view.sel()[0]
- line = view.line(region)
- left_part = view.substr(sublime.Region(line.begin(), region.begin()))
- right_part = view.substr(sublime.Region(region.begin(), line.end()))
-
- # Check if the line isn't just a line of whitespace
- if REGEX_WHITESPACES.search(left_part + right_part) is not None:
- return None
- # Simple check if the left part is ok
- if left_part.find(';') != -1:
- return None
- # Simple check if the right part is ok
- if right_part.find(';') != -1:
- return None
-
- return True
-
-class HayakuAddLineContext(sublime_plugin.EventListener):
- def on_query_context(self, view, key, *args):
- if key != "hayaku_add_line":
- return None
-
- # Determining the left and the right parts
- region = view.sel()[0]
- line = view.line(region)
- left_part = view.substr(sublime.Region(line.begin(), region.begin()))
- right_part = view.substr(sublime.Region(region.begin(), line.end()))
-
- # Simple check if the left part is ok
- if re.search(';\s*$|[^\s;\{] [^;\{]+$',left_part) is None:
- return None
-
- # Simple check if the right part is ok
- if re.search('^\s*\}?$',right_part) is None:
- return None
-
- return True
-
-
-class HayakuStyleContext(sublime_plugin.EventListener):
- def on_query_context(self, view, key, *args):
- if key != "hayaku_css_context":
- return None
-
- regions = view.sel()
- # We won't do anything for multiple carets for now
- if len(regions) > 1:
- return None
-
- region = regions[0]
-
- # We don't do anything for selection for now
- if not region.empty():
- return None
-
- # Looking for the scope
- # TODO: Make it expandable in HTML's attributes (+ left/right fixes)
- if view.score_selector(region.begin(),'source.css -meta.selector.css, source.stylus, source.sass, source.scss') == 0:
- return None
-
- # Determining the left and the right parts
- line = view.line(region)
- left_part = view.substr(sublime.Region(line.begin(), region.begin()))
- right_part = view.substr(sublime.Region(region.begin(),line.end()))
-
- # Simple check if the left part is ok
- # 1. Caret is not straight after semicolon, slash or plus sign
- # 2. We're not at the empty line
- # 3. There were no property/value like entities before caret
- # 1 2 3
- if re.search('[;\s\/\+]$|^$|[^\s;\{] [^;\{]+$',left_part) is not None:
- return None
-
- # Simple check if the right part is ok
- # 1. The next symbol after caret is not space or curly brace
- # 2. There could be only full property+value part afterwards
- # 1 2
- if re.search('^[^\s\}]|^\s[^:\}]+[;\}]',right_part) is not None:
- return None
-
- return True
-
-# Context-commands to jump out of multiple selections in snippets
-class HayakuGoingUpContext(sublime_plugin.EventListener):
- def on_query_context(self, view, key, *args):
- if key != "hayaku_going_up":
- return None
- if len(view.sel()) > 1:
- region = view.sel()[0]
- view.sel().clear()
- view.sel().add(region)
- return None
-
-class HayakuGoingDownContext(sublime_plugin.EventListener):
- def on_query_context(self, view, key, *args):
- if key != "hayaku_going_down":
- return None
- if len(view.sel()) > 1:
- region = view.sel()[1]
- view.sel().clear()
- view.sel().add(region)
- return None
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Hayaku - tools for writing CSS faster/css_dict_driver.py b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Hayaku - tools for writing CSS faster/css_dict_driver.py
deleted file mode 100644
index e679441..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Hayaku - tools for writing CSS faster/css_dict_driver.py
+++ /dev/null
@@ -1,109 +0,0 @@
-# -*- coding: utf-8 -*-
-# (c) 2012 Sergey Mezentsev
-import string
-
-from itertools import chain, product, starmap
-
-
-def parse_dict_json(raw_dict):
- result_dict = {}
-
- valuable = (i for i in raw_dict if 'name' in i and 'values' in i)
-
- def strip(s):
- return string.strip(s) if hasattr(string, 'strip') else s.strip()
-
- for i in valuable:
- name, values, default = i['name'], i['values'], i.get('default')
- names = name if isinstance(name, list) else map(strip, name.split(','))
- for n in names:
- assert n not in result_dict
-
- val = { 'values': values }
-
- if default is not None:
- val['default'] = default
-
- if 'prefixes' in i:
- val['prefixes'] = i['prefixes']
- if 'no-unprefixed-property' in i:
- val['no-unprefixed-property'] = i['no-unprefixed-property']
- else:
- assert 'no-unprefixed-property' not in i
-
- result_dict[n] = val
-
- return result_dict
-
-get_css_dict_cache = None
-def get_css_dict():
- global get_css_dict_cache
- if get_css_dict_cache is not None:
- return get_css_dict_cache
- else:
- CSS_DICT_DIR = 'dictionaries'
- CSS_DICT_FILENAME = 'hayaku_CSS_dictionary.json'
- DICT_KEY = 'hayaku_CSS_dictionary'
-
- import json
- import os
- try:
- import sublime
- css_dict = sublime.load_settings(CSS_DICT_FILENAME).get(DICT_KEY)
- if css_dict is None:
- import zipfile
- zf = zipfile.ZipFile(os.path.dirname(os.path.realpath(__file__)))
- f = zf.read('{0}/{1}'.format(CSS_DICT_DIR, CSS_DICT_FILENAME))
- css_dict = json.loads(f.decode())[DICT_KEY]
- except ImportError:
- css_dict_path = os.path.join(CSS_DICT_DIR, CSS_DICT_FILENAME)
- css_dict = json.load(open(css_dict_path))[DICT_KEY]
-
- assert css_dict is not None
- get_css_dict_cache = parse_dict_json(css_dict)
- return get_css_dict_cache
-
-def css_defaults(name, css_dict):
- """Находит первое значение по-умолчанию
- background -> #FFF
- color -> #FFF
- content -> ""
- """
- cur = css_dict.get(name) or css_dict.get(name[1:-1])
- if cur is None:
- return None
- default = cur.get('default')
- if default is not None:
- return default
-
- for v in cur['values']:
- if v.startswith('<') and v.endswith('>'):
- ret = css_defaults(v, css_dict)
- if ret is not None:
- return ret
-
-def css_flat(name, values=None, css_dict=None):
- """Все значения у свойства (по порядку)
- left -> [u'auto', u'', u'', u'', u'.em', u'.ex',
- u'.vw', u'.vh', u'.vmin', u'.vmax', u'.ch', u'.rem', u'.px', u'.cm',
- u'.mm', u'.in', u'.pt', u'.pc', u'', u'.%']
- """
- cur = css_dict.get(name) or css_dict.get(name[1:-1])
- if values is None:
- values = []
- if cur is None:
- return values
- for value in cur['values']:
- values.append(value)
- if value.startswith('<') and value.endswith('>'):
- values = css_flat(value, values, css_dict)
- return values
-
-def css_flat_list(name, css_dict):
- """Возвращает список кортежей (свойство, возможное значение)
- left -> [(left, auto), (left, ), (left, .px)...]
- """
- return list(product((name,), css_flat(name, css_dict=get_css_dict())))
-
-def get_flat_css():
- return list(chain.from_iterable(starmap(css_flat_list, ((i, get_css_dict()) for i in get_css_dict()))))
diff --git a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Hayaku - tools for writing CSS faster/dictionaries/hayaku_CSS_dictionary.json b/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Hayaku - tools for writing CSS faster/dictionaries/hayaku_CSS_dictionary.json
deleted file mode 100644
index 12220ba..0000000
--- a/EthanBrown.SublimeText2.WebPackages/tools/PackageCache/Hayaku - tools for writing CSS faster/dictionaries/hayaku_CSS_dictionary.json
+++ /dev/null
@@ -1,533 +0,0 @@
-{ "hayaku_CSS_dictionary":
-[
- {"_Description": [
- " Dictionary for Hayaku Core, http://hayakubundle.com ",
- " Copyright © 2011 Roman Komarov, http://kizu.ru/en/ ",
- " Licensed under MIT license ",
-
- " Got inspiration from ",
- " Zen Coding snippets for CSS ",
- " Copyright © 2008–2011 Vadim Makeev, http://pepelsbey.net ",
- " Licensed under MIT license "
- ]
- },{
- "name": "",
- "values": [ "inherit" ],
- "_comment": [
- "Common values, that any single property can have",
- "Must have lesser priority than any other value"
- ]
- },{
- "name": "",
- "values": [ "", "" ]
- },{
- "name": "",
- "values": [
- ".em", ".ex", ".vw", ".vh", ".vmin", ".vmax", ".ch", ".rem",
- ".px", ".cm", ".mm", ".in", ".pt", ".pc"
- ]
- },{
- "name": "",
- "values": [ ".%" ]
- },{
- "name": "",
- "values": [ ".deg", ".grad", ".rad", ".turn" ]
- },{
- "name": "",
- "values": [ ".s", ".ms" ]
- },{
- "name": "",
- "values": [ "url()" ]
- },{
- "name": "",
- "values": [ "attr()" ]
- },{
- "name": "",
- "values": [ "linear-gradient()", "repeating-linear-gradient()", "radial-gradient()", "repeating-radial-gradient()" ],
- "prefixes": [ "webkit", "moz", "ms", "o" ]
- },{
- "name": "",
- "values": [ "ease", "linear", "ease-in", "ease-out", "ease-in-out", "cubic-bezier()" ]
-
-
-
- },{
- "name": "position",
- "values": [ "static", "relative", "absolute", "fixed" ]
- },{
- "name": [ "top", "right", "bottom", "left" ],
- "values": [ "auto", "" ],
- "default": "100%"
- },{
- "name": "z-index",
- "values": [ "auto", "" ]
-
-
-
- },{
- "name": "float",
- "values": [ "left", "right", "none" ]
- },{
- "name": "clear",
- "values": [ "none", "left", "right", "both" ]
- },{
- "name": "display",
- "values": [ "inline", "block", "inline-block", "list-item", "none", "table", "inline-table", "table-row-group", "table-header-group", "table-footer-group", "table-row", "table-cell", "table-column", "table-caption", "table-column-group", "run-in", "compact", "flexbox", "inline-flexbox" ]
- },{
- "name": "visibility",
- "values": [ "visible", "hidden", "collapse" ]
- },{
- "name": [ "overflow" ],
- "values": [ "visible", "hidden", "scroll", "auto" ]
- },{
- "name": [ "overflow-x", "overflow-y" ],
- "values": [ "" ],
- "prefixes": [ "ms" ]
- },{
- "name": "clip",
- "values": [ "auto", "rect()" ]
- },{
- "name": "box-sizing",
- "values": [ "content-box", "border-box" ],
- "prefixes": [ "webkit", "moz" ]
- },{
- "name": "-moz-box-sizing",
- "values": [ "", "padding-box" ]
- },{
- "name": "flex-direction",
- "values": [ "lr", "rl", "tb", "bt", "inline", "inline-reverse", "block", "block-reverse" ]
- },{
- "name": "flex-order",
- "values": [ "" ]
- },{
- "name": "flex-pack",
- "values": [ "start", "end", "center", "justify" ]
- },{
- "name": "flex-align",
- "values": [ "auto", "baseline" ]
- },{
- "name": "pointer-events",
- "values": [ "none", "all" ]
-
-
-
- },{
- "name": [ "margin", "margin-top", "margin-right", "margin-bottom", "margin-left" ],
- "values": [ "auto", "" ]
- },{
- "name": "padding, padding-top, padding-right, padding-bottom, padding-left",
- "values": [ "" ]
- },{
- "name": "width, height, min-width, min-height",
- "values": [ "auto", "" ],
- "default": "100%"
- },{
- "name": "max-height, max-width",
- "values": [ "none", "" ],
- "default": "100%"
-
-
-
- },{
- "name": "outline-color",
- "values": [ "invert", "" ]
- },{
- "name": "outline-style",
- "values": [ "" ]
- },{
- "name": "outline-width",
- "values": [ "" ]
- },{
- "name": "outline-offset",
- "values": [ "" ]
- },{
- "name": "outline",
- "values": [ "", "<_outline-style>", "" ]
- },{
- "name": "border-collapse",
- "values": [ "collapse", "separate" ]
- },{
- "name": "border-spacing",
- "values": [ "" ]
- },{
- "name": [ "border-color", "border-top-color", "border-right-color", "border-bottom-color", "border-left-color" ],
- "values": [ "" ]
- },{
- "name": [ "border-style", "border-top-style", "border-right-style", "border-bottom-style", "border-left-style" ],
- "values": [ "none", "hidden", "dotted", "dashed", "solid", "double", "groove", "ridge", "inset", "outset" ]
- },{
- "name": [ "border-width", "border-top-width", "border-right-width", "border-bottom-width", "border-left-width" ],
- "values": [ "thin", "medium", "thick", "" ]
- },{
- "name": [ "border", "border-top", "border-right", "border-bottom", "border-left" ],
- "values": [ "", "<_border-style>", "" ],
- "default": "1px solid"
- },{
- "name": [ "border-radius", "border-top-right-radius", "border-top-left-radius", "border-bottom-left-radius", "border-bottom-right-radius" ],
- "values": [ "" ],
- "prefixes": [ "webkit" ]
- },{
- "name": "",
- "values": [ "", "none" ],
- "prefixes": [ "webkit", "moz", "o" ]
- },{
- "name": "",
- "values": [ "", "", "fill" ],
- "prefixes": [ "webkit", "moz", "o" ]
- },{
- "name": "",
- "values": [ "" ],
- "prefixes": [ "webkit", "moz", "o" ]
- },{
- "name": "",
- "values": [ "", "" ],
- "prefixes": [ "webkit", "moz", "o" ]
- },{
- "name": "",
- "values": [ "stretch", "repeat", "round" ],
- "prefixes": [ "webkit", "moz", "o" ]
- },{
- "name": "border-image",
- "values": [ "", "", "", "", "